K8s高可用集群
配置高可用(HA)Kubernetes集群,有以下两种可选的etcd拓扑:
- 集群master节点与etcd节点共存,etcd也运行在控制平面节点上
- 使用外部etcd节点,etcd节点与master在不同节点上运行
本实验使用第一种
堆叠的etcd拓扑 外部etcd拓扑 实验方案一:
IP | 功能 |
---|
server1 | harbor仓库 | server5 | 高可用和负载均衡(peacemaker + haproy) | server6 | 高可用和负载均衡(peacemaker + haproy) | server7 | k8s的master | server8 | k8s的master | server9 | k8s的master | server10 | k8s的worker |
master和高可用负载均衡都需要2个CPU和2048的Mem 考虑到电脑本身内存只有8G,选择方案二进行实验,实现了负载均衡,但未能体现高可用,有条件的朋友可选择方案一进行操作!!!
实验方案二:
IP | | 功能 |
---|
172.25.28.1 | server1 | 仓库 | 172.25.28.5 | server5 | k8s的master ,haproxy | 172.25.28.6 | server6 | k8s的master | 172.25.28.7 | server7 | k8s的master | 172.25.28.8 | server8 | k8s的worker |
server5 负载均衡的配置
server5,server6,server6编写dvd.repo文件,保证仓库配置成功 server5 vip :172.25.28.100,此处使用虚拟ip 与真实主机进行隔离
ping vip 查看是否ping 通!!!
安装 haproxy ,编写配置文件
使用(http协议)80端口来监控:ststus
haproxy端口:设定为8443,此处一定要区分haproxy和api-server的端口,因为server5即负责haproxy,又负责k8s的master !!! api-server的端口:6443,tcp协议 haproxy支持 4/7 层 http协议是7层,tcp协议是4层
重启haproxy
端口查看,80端口为监听haproxy状态的端口,8443端口为haproxy的端口
网页访问:
监控查看,此处也可以访问虚拟ip!!!
serveer5,server6,server7 部署docker
复制docker.rep文件给server5,server6,server7
server5,server6,server7安装docker,设置开机自启!!!
server5,server6,server7 编写解析文件,添加私有仓库
复制 daemon.json 给server5,server6,server7
复制 docker.conf 给server5,server6,server7
加载内核参数
重启docker
docker info 可以查看查看私有仓库已经接入,cgroup为system
测试: 拉取景象成功 ‘
server5,server6,server7 k8s集群部署为master
server5,server6,server7都需要禁掉swap分区 准备kubeadm,kubelet,kubectl 安装包
server5,server6,server7安装 kubeadm,kubelet,kubectl server5,server6,server7都启动kubelet server5上修改kubeadm的yaml文件
server5,server6,server7加载内核参数 server5拉取镜像 初始化k8s集群
申明后,即可看到pod的所有信息 查看server5节点未ready!!!pod也出现pending!!! 需要安装网络插件,此处选择flanner的网络插件 kubectl 命令补齐 修改flanner.yaml文件中的网络模式为host-gw直连网关 执行清单 此时pod全部running!!!node已经就绪 此时server6和server7以master形式加入集群中 查看节点状态,成功ready!!! 查看kube-system的ns中pod的状态 网页测试: 172.25.28.5/status
server8 部署为k8s集群中的worker
新建虚拟机server8,添解析 配置docker的仓库 安装docker,设定开机自启动 复制json,认证,内核参数文件 重启,内核参数设定生效 docker info查看是否成功介入私有仓库,cgroup是否设定为systemd 添加仓库的解析 拉取镜像进行测试 准备k8s部署需要的包 安装kubeadm,kubelet,kubectl 禁用swap分区 server8以worker形式加入k8s集群 kubelet设定开机自启动 查看所有集群节点,server5,6,7为master,server8为worker
运行demo容器,查看pod状态 ,集群内部访问成功 server6声明,查看所有node状态
server7声明,查看所有node状态
测试:
server6进行down,测试pod是否能够调度在另外一个node节点进行工作 外部查看监控,发现server6已经down掉
server7上查看pod正常running
|