文章目录
介绍
- 重构k8s的部署方式,添加私有仓库的部署及相关离线安装包的方式
- 通过kubeadm进行一键式部署k8s集群,根据不同的启动方式,可部署单节点、一主多从、多主多从高可用的k8s集群
软件架构
- 通过部署包中的Run.sh进行统一入口,进行初始化环境(部署节点)
- ansible+shell实现自动获取host文件中的相关信息进行自动化部署
安装教程
- 需要提前准备多台主机,因本次环境,采用一主多从,本环境是为了学习环境中快速部署k8s集群
- 采用kubeadn安装,采用本地yum仓库,版本是:1.21.1
- 安装docker的yum源是基于Centos7.5/7.6,版本是:19.03.14
- 安装ansible时,使用离线安装,版本:2.9.27
更新内容
2023-02-10
- 处理内核参数有几率加载失败的情况
- 重构初始化环境的脚本,减少初始化时出现的错误
- 如果失败,重新执行即可
- 重写设置主机名的角色,默认删除后覆盖
/etc/hosts
文件 - 新增nfs服务的安装,可以通过
storageClassName: nfs-storage
字段添加pvc- nfs目前只支持单节点部署,不支持自动化对应外部nfs
- 对接外部nfs需要手动修改对应的yaml即可,后续详细介绍
2022-10-20
- 添加kubeadm自动部署高可用版本,新增haproxy+keepalived
- 修复dashboard权限问题,添加ingress的部署方式(默认安装,通过)
- 部署包已更新至下述链接
2022-08-06
- 时间太久,忘记了。。。
准备部署包
https://download.csdn.net/download/qq_44246980/85695007
新版本未成功上传
操作步骤
环境准备
作用 | IP地址 | 操作系统 | 配置 |
---|---|---|---|
k8s-master01 | 192.168.1.13 | CentOS7 | 最低配置2C2G |
k8s-master02 | 192.168.1.14 | CentOS7 | 最低配置2C2G |
k8s-master02 | 192.168.1.15 | CentOS7 | 最低配置2C2G |
k8s-node01 | 192.168.1.16 | CentOS7 | 最低配置2C2G |
ansible | 192.168.1.140 | CentOS7 | 最低配置1C1G |
结构
- node节点可以填写多个,根据实际情况确认,但是不能超出单master节点的限制
- master节点至少是三个少一个都不是高可用版本
- keepalived需要提前确认好vip
- 建议机器处于同一网段中,或者同一局域网内
备注
- 建议单独找一台机器用于部署ansible服务,可以不接受
- 但是需要确保机器资源充足,且相关的端口不会冲突(38081【yum】、38082【registry】)
- 相关的网络关系需要提前确认
- 三台master节点,可以是2n+1台,目前因本地环境,只测试了三台master其他节点尚未涉足
解压部署包
#上传部署包(xshell)
cd /opt #目录随意
yum -y install lrzsz
rz install_k8s_kubeadm_20230210.tar.gz
#解压
tar -xvf install_k8s_kubeadm_20230210.tar.gz
修改host文件
#部署机器,初始脚本、安装包镜像
[deploy_server]
192.168.1.21 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22
#多主多从
[kubernetes_master]
192.168.1.22 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-master01"
192.168.1.23 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-master02"
192.168.1.24 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-master03"
#可添加多个
[kubernetes_node]
#192.168.1.22 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-node02"
#192.168.1.23 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-node02"
[nfs]
192.168.1.22 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22
#双节点
[haproxy_keepalived]
192.168.1.22 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-master01"
192.168.1.23 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-master02"
#不填写,则不安装镜像仓库
[docker_repositry]
#192.168.1.136 ansible_user="root" ansible_ssh_pass="1" ansible_ssh_port=22 hostname="k8s-node01"
[nodes:children]
kubernetes_master
kubernetes_node
[all:vars]
#脚本解析主机信息,层级默认只能添加3个,即3个master,3个node
Number="3"
master_vip="192.168.1.120" #keepalived使用的vip
add_node_hosts="no" #添加主机信息(yes=合并,no=删除后新建[覆盖])
#布尔值true or false
Basic_enable="true" #安装基础软件包
set_host_enable="true" #设置主机名注入/etc/hosts文件
######################################################################################
k8s_nfs_enable="false" #安装nfs-client服务
prometheus_enable="false" #安装Prometheus服务
dashboard_enable="false" #安装dashboard服务
ingress_enable="false" #安装ingress服务
- 一主多从需要把
kubernetes_master
里只添加一个地址- 多主多从需要把
kubernetes_master
里添加三个地址,脚本只支持添加三个master节点- 多主多从同时需要把
haproxy_keepalived
角色填写
初始化环境
[root@registry]# cd /opt/deploy_install_k8s
[root@registry]# ls
host images init playbook Run.sh yum
[root@ansible install_k8s_kubeadm]# sh Run.sh
1) 初始化环境(ansible))
2) 安装k8s集群[一主多从](1.21.1)
3) 安装k8s集群[多主多从](1.21.1)
4) 添加k8s node节点(1.21.1)
5) 更新k8s certs,续费10年(1.21.1)
----------------------------------------------------------------------------
请输入对应的数字编号:1
请输入部署机的地址(192.168.1.100):
【ansible 2022-10-21 02:24:39】 start install docker
【ansible 2022-10-21 02:25:22】 docker安装成功
{
"registry-mirrors": ["https://geuj9lut.mirror.aliyuncs.com"]
}
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
-----------------------------------------------------------------------------------------
【nginx.tar】 load repository success
69715584ec78: Loading layer [==================================================>] 5.885MB/5.885MB
ad10b481abe7: Loading layer [==================================================>] 818.7kB/818.7kB
aa4330046b37: Loading layer [==================================================>] 20.08MB/20.08MB
f640be0d5aad: Loading layer [==================================================>] 4.096kB/4.096kB
aeccf26589a7: Loading layer [==================================================>] 2.048kB/2.048kB
Loaded image: registry.bcbx.com:38082/bcbx_registry:v1.0.0
【repositry.tar】 load repository success
-----------------------------------------------------------------------------------------
【ansible 2022-10-21 02:25:30】 start the image yum_repo success
-----------------------------------------------------------------------------------------
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
【ansible 2022-10-21 02:25:33】 使用离线安装包,安装ansible,请等待!!!
【ansible 2022-10-21 02:25:33】 Check the offline installation package
【ansible 2022-10-21 02:25:47】 Ansible is installed successfully
【ansible 2022-10-21 02:25:47】 Ansible.cfg配置文件修改成功
-----------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------
Error response from daemon: Cannot restart container registry: driver failed programming external connectivity on endpoint registry (33ab68e2ce671900016e9cf1f1d37f1d2c11d7d787826127a59f7e6f9763c161): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 38082 -j DNAT --to-destination 172.17.0.3:5000 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1))
-----------------------------------------------------------------------------------------
#部署机的地址,通过脚本过去的地址,确认无误后直接回车即可
出现上述错误,则重新执行一下
直接结果如下
- 安装docker服务
- 安装ansible服务,修改配置
- 准备离线yum仓库
- 准备离线registry仓库,相关挂载点是:/var/images/
验证ansible配置
[root@registry install_k8s_kubeadm]# sh Run.sh ping
192.168.1.192 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
[root@registry install_k8s_kubeadm]#
安装k8s集群
[root@registry deploy_install_k8s]# sh Run.sh
1) 初始化环境(ansible))
2) 安装k8s集群[一主多从](1.21.1)
3) 安装k8s集群[多主多从](1.21.1)
4) 添加k8s node节点(1.21.1)
5) 更新k8s certs,续费10年(1.21.1)
----------------------------------------------------------------------------
请输入对应的数字编号:2
#host文件需要提前修改
#确认host中用户名、密码、ip正确且网络连接正常后,回车,等待执行脚本结束
执行结果如下:
登录master的节点
添加node节点
- 在host文件下的kubernetes_node分组下添加新增的需要新增的节点,并把之前已添加的节点删除
- 修改后执行Run.sh脚本,选择4,添加node节点
- 脚本正常执行完毕后,检查各个节点的/etc/hosts文件,如果确认对应的域名解析,需要手动添加对应的主机关系
组件安装
- 默认不安装,手动修改后安装,可以在按照k8s集群后进行安装使用
- 也可以在安装集群的是否安装
安装方式
[root@k8s-node01 install_k8s_kubeadm]# sh Run.sh install
- 需要前修改上述图片中的布尔值,改为true时,开始执行安装
访问dashboard
获取登陆token
kubectl -n kubernetes-dashboard describe secrets `kubectl -n kubernetes-dashboard get secrets |grep kubernetes-dashboard-token|awk '{print $1}'`
访问prometheus
服务访问
访问prometheus
ingress-nginx
使用方式,自行百度
证书查看
kubeadm 命令查看
#可以通过 kubeadm alpha certs check-expiration 命令查看相关证书是否过期。
#注:该命令仅在 v.15 之后的版本可用
kubeadm alpha certs check-expiration
# k8s v1.21.1
kubeadm certs check-expiration
openssl 命令查看
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text |grep ' Not '
更新证书
Kubenetes通过脚本自动更新证书有效期脚本来源
[root@k8s-master install_k8s_kubeadm]# sh Run.sh
1) 初始化环境(ansible))
2) 安装k8s集群[一主多从](1.21.1)
3) 安装k8s集群[多主多从](1.21.1)
4) 添加k8s node节点(1.21.1)
5) 更新k8s certs,续费10年(1.21.1)
----------------------------------------------------------------------------
请输入对应的数字编号:5
验证证书有效期
部署包地址
链接:https://pan.baidu.com/s/1c20RSSKlZ7CtkqHild2ByQ?pwd=cv0n
总结
- 上述则是当前部署中可运行正常的服务
- 执行
sh Run.sh init
,则可以调试脚本,对应的启动文件,修改,则可以进行调试- 执行
sh Run.sh install
,修改host文件,则可以进行安装组件