
#云原生征文# Kubeadm部署高可用k8S集群 原创 精华
👨🏻🎓博主介绍:大家好!我是李大白,一名运维容器运维工程师,热爱分享知识🌟
🌈擅长领域:云原生、数据库、自动化运维
🙏🏻如果本文章对小伙伴们有帮助的话,🍭关注+👍🏻点赞+🗣评论+📦收藏!
🤝如果在文章描述时如有错,恳请各位大佬指正,在此感谢!!!
🍂 落叶而知秋,博闻而强识!
📕 精品专栏:Harbor大白话(企业级)
一、部署说明
1.1 部署环境
为在vmware workstation16 Pro中开通的Linux虚拟机作为安装主机。
【操作系统】:CentOS7.5
1.2 主机清单
IP地址 | 主机名 | 角色 | 备注 |
---|---|---|---|
192.168.2.90 | 虚拟VIP地址 | 通过keepalived提供的虚拟VIP地址 | |
192.168.2.91 | master1 | master | |
192.168.2.92 | master2 | master | |
192.168.2.93 | master3 | master | |
192.168.2.94 | node1 | node |
**说明:**可根据自己的安装环境,使用
Ctrl + F
快捷键将对应的IP和主机名全局修改
为自己的IP和主机名!
1.3 版本说明
本处安装的是1.20.6
版本的kubernetes集群,其它版本也可参考本篇文章。
二、主机初始化
2.1 配置yum仓库
配置阿里云镜像仓库
bash-completion:命令table键
2.2 配置hosts
🐖:未配置会hosts在集群检测会出现以下警告:
[WARNING Hostname]: hostname “master02” could not be reached
[WARNING Hostname]: hostname “master02”: lookup master02 on 8.8.8.8:53: no such host
2.3 关闭selinux、swap、firewalld
2.4 配置时间同步(Chrony)
服务端(Master)
客户端(Node)
2.5 内核升级
必须操作,内核太低会出现很多问题,需要上传kernel内核包进行安装升级
重新编译内核启动文件
查看默认启动的内核
重启主机后查看内核版本
注:
内核升级完成后需要重启主机,然后使用uname -r
查看内核版本是否升级成功。
2.6 配置IPVS
非必须操作,如果kube-proxy
组件要使用IPVS
模式,才需要配置IPVS。
dummy0
网卡和kube-ipvs0
网卡:在安装k8s集群时,启用了ipvs的话,就会有这两个网卡。(将service的IP绑定在kube-ipvs0网卡上)
2.7 内核环境参数
说明:
net.bridge.bridge-nf-call-iptables:开启桥设备内核监控(ipv4);
net.ipv4.ip_forward:开启路由转发;
net.bridge.bridge-nf-call-ip6tables:开启桥设备内核监控(ipv6);
以上3项为必须参数,其他参数可根据需要添加。
2.8 docker部署
注:需要将docker的驱动器改为systemd才能与k8s的兼容
registry-mirrors:镜像仓库地址
docker部署后,通过ip addr命令可看到多了docker0的网卡。
2.9 安装kubelet、kubectl、kubeadm
Master和node均操作
注:
有安装顺序,否则会出现版本不一致情况。启动kubelet会出现报错,属于正常情况,初始化集群后就好了。
2.10 设置table键补全
让命令可用自动table键进行补全,对新手无法记住命令提供很好的支持,所在主机进行该操作方可使用table补全。
- Kubectl命令补全:
- Kubeadm命令补全:
三、Keepalived + Nginx提供高可用
使用
keepalived
和Nginx
实现kube-apiserver
的高可用。在master1和master2节点上安装
keepalived
服务来提供VIP实现负载均衡。Nginx服务则实现将来到VIP的请求转发到后端服务器组(kube-apiserver
)
3.1 安装nginx和keepalived
在master1和master2操作
nginx从
1.9.0
开始新增了steam模块,用来实现四层协议的转发、代理、负载均衡等。二进制安装的nginx则在
./configure
时添加--with-stream
参数来安装stream
模块。
3.2 修改nginx配置文件
在master1和master2的Nginx服务配置文件一样。
- 检测nginx配置文件语法
3.3 修改keepalived配置
本处以master1为keepalived服务的主节点,master2为keepalived的备节点。主备节点的keepalived配置文件不一样。
- 主节点(master1)
- 备节点(master2)
3.4 编写健康检查脚本
在主备节点(master1和master2)同样操作。
3.5 启动服务
先启动master1和master2节点上的nginx服务,再启动keepalived服务
- 启动nginx服务
- 启动keepalived服务
3.6 查看VIP
在master1节点查看VIP是否成功绑定。
通过ifconfig是无法查看到VIP的,通过
hostname -I
命令也可以查看到VIP。
四、初始化kubernetes集群
4.1 检测安装环境
检测主机环境是否达到集群的要求,可根据结果提示进行逐一排除故障。
4.2 创建集群初始化配置文件
在master1
上创建kubeadm-config.yaml
文件,集群初始化时将会根据该文件内容进行初始化。
4.3 初始化k8s集群
在master1操作
初始化流程:
- 环境检查:检查安装环境是否满足安装要求;
- 拉取镜像:拉取设置Kubernetes群集所需的镜像;
- 证书生成:生成各个组件的证书并放到
/etc/kubernetes/pki
下;
看到以下内容则表示初始化操作成功完成:
4.4 master节点基础设置
在初始化完成后,根据输出的提示信息对master节点进行一些基本的设置,设置完成后才可以实现对集群的管理操作。
在master1进行操作:
4.5 将master2加入集群
1)在master2上创建目录
2)将master1上的证书拷贝到master2上
根据集群初始化完成的输出提示,复制master加入集群的命令到master2和master3执行:
–control-plane参数表示加入的主机是master节点,不加则是加入node节点到集群。
出现以下表示master2加入集群成功:
3)master2基础设置
根据输出结果提示执行以下命令:
可以看到master2成功加入集群。
4.6 将master3加入集群
操作和将master2加入集群一致
4.7 将node1节点加入集群
将master加入集群的命令去掉 ---control-plane
参数后复制到node节点执行
五、安装插件
5.1 安装Calico网络插件
Calico的版本和kubernetes的版本是有对应关系的,1.20.6的k8s安装Calico 3.20.x以上的版本会报错,本处安装的是3.18.5版本的Calico。
- 查看集群状态
可以看到STATUS的状态还是NotReady
状态,说明集群还是无法正常使用的,需要安装Calico网络插件和CoreDNS域名解析插件才可以正常使用。
- 下载资源清单
默认下载的是最新的Calico版本,3.18.5版本的下载地址:https://ost.51cto.com/resource/1991
- 查看Calico版本
- 更新资源清单
- 查看Calico服务状态
Calico服务状态都正常!
5.2 安装CoreDNS域名解析插件
在kubeadm安装的k8s集群中,安装Calico网络插件后会自动安装CoreDNS插件。
5.3 安装Metrics数据采集插件
metrics-server 是一个集群范围内的资源数据集和工具,同样的,metrics-server 也只是显示数据,并不提供数据存储服务,主要关注的是资源度量 API 的实现,比如 CPU、文件描述符、内存、请求延时等指标,metric-server 收集数据给 k8s 集群内使用,如 kubectl,hpa,scheduler 等!
1)修改apiserver配置
生产环境多master要逐个修改
2)重新更新 apiserver 配置
然后将旧的Pod删除!
3)下载Metrics的资源清单文件
资源清单文件和镜像下载地址:https://ost.51cto.com/resource/1992
4)导入镜像
查看Pod被调度到哪个节点就在哪个节点导入镜像。
5)查看metrics服务状态
服务状态正常!
6)查看集群资源
六、验证
验证集群是否可以正常使用。
6.1 测试coredns是否正常
【本文正在参加云原生有奖征文活动】,活动链接:https://ost.51cto.com/posts/12598
