KS8概念总结
模型图
技术迭代
部署大规模集群
模型
架构
实现高可用架构
三大指标
- 高可用、高性能、高并发
Zookeeper
- 负载均衡:实现轮询机制。防止阻塞
- 集群:必须实现数据同步,Redis
- 高可用:一直可用,实现崩溃恢复 A(down & resume) B(up) C
ks8高可用集群搭建
节点配置
步骤:
关闭交换空间
避免开机启动交换空间
关闭防火墙
配置 DNS
安装 Docke
配置 Docker 加速器
安装 kubeadm,kubelet,kubectl
同步时间:时间要统一
配置 IPVS
配置内核参数\
修改 cloud.cfg 是修改hostname
单独节点
问题
解决Node无法加入集群
替换 Calico(网络插件) 网段为我们虚拟机不重叠的网段(这里用的是 Flannel 默认网段)
如果Calico网段与master、slaver网段重叠就会导致Node无法加入集群。
- ks8重置
- 删除kubectl配置
- 启动ipvs
- 导出并修改配置文件 改calico网段
- kubeadm初始化
- 配置kubectl
- 下载Calico 配置文件并修改 611 行 /name: CALICO_IPV$POOL_CIDR 的value
- 直接应用本地Calico
- 加入Master结点(最后 配置mkdir babbalala~~ dubectl get node)
通过资源配置运行容器(部署容器)测试
启动顺序
Pod
Deployment 内部访问
Service 外部访问机制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31kubectl get node #结点状态
master01: vi /kubernetes/yml/nginx-deployment.yml #设置deployment
kubectl create -f nginx-deployment.yml
kubectl get pod #查看pod
kubectl get deployment #看看deployment 开两个实例
master01: vi /kubernetes/yml/ nginx-service.yml #设置service
kubectl get service #查看service
端口: 80:30066 (30066指的是node 的pod暴露30066端口,再由pod映射到nginx 的80端口)
kubectl describe service nginx-http #下面
NodePort: 30066/TCP
使用LoadBalancer master slaver 端口都暴露
master01:30066
master02:30066
slaver01:30066
slaver02: 30066
kubectl delete -f nginx-service.yml #停掉
想要把30066改成80端口
vi /kubernetes/yml/ nginx-service.yml
prots:
-prot: 80 #Service 端口
targetPort: 80 #Pod 端口 将Service暴露端口转发到Pod端口上
nodePort: 80 # 本来是30066 但是报错 他的范围30000-32767
kubectl create -f nginx-service.yml #重开
解决办法
vi /etc/kubernetes/manitestls/kube-apiserver.yml
增加配置
--service-node-prot-range=2-65545
ks8重启 或者 他自动重启
验证
kubectl create -f nginx-service.yml
kubectl describe service nginx-http
Ingress统一访问入口
ClusterIP服务
内部访问方式:外部proxy模式访问内部
1 | kubectl get service |
三种外部访问方式
NodePort
在所有节点(虚拟机)上开放一个特定端口
- 每个端口一种服务
- 默认模式(官方不推荐)
- 调试的时候用
LoadBalancer
在NodePort加了负载均衡
Ingress
扮演智能路由 或 集
群入口 (类似API网关)
例如:部署Tomcat只允许在内网访问,需要Ingress提供反向代理功能路由到Tomcat上
部署Tomcat tomcat.yml(Devlopment+Service)
ClusterIP设置
watch kubectl get pods # 查看运行状态
kubectl get deployment
kubectl get service
kubectl describe service tomcat-http
没有nodeport 限制外网访问下载Nginx Ingress Controller 配置文件 & 修改
hostNetwork: true
kubectl get pods -all -namespaces
多了
ingress-nginx
部署ingress -> ingress.yml
kubectl get pods -n ingress-nginx -o wide
ip: 192.168.141.161
SwitchHosts : 192.168.141.161 域名
数据持久化
NFS+PV/PVC
NFS
RPC通信,分布式文件系统
部署
- 安装NFS服务端
- 安装NFS客户端
- 验证NFS服务
PV和PVC
持久卷提供者 持久卷消费者 NFS网络方案
pv:规格集群资源
pvc:分配集群资源
create pv.yml pvc.yml
部署mysql 8 连接pv pvc
出现问题:没有个性化配置
ConfigMap
用来存储配置文件的ks8资源对象,放在etcd内,一种外挂配置。解耦
即:可是用ConfigMap配置MYSQL
Dashboard
运行界面
CI/CD
环境:
- java
- git
- mvn