2024 年云原生运维实战文档 99 篇原创计划 第 030 篇 |KubeSphere 最佳实战「2024」系列 第 007 篇
你好,欢迎来到运维有术。
今天分享的内容是 KubeSphere 最佳实战「2024」 系列文档中的 基于 Ansible 极速初始化 KubeSphere 集群节点。
当我们部署 KubeSphere 和 Kubernetes 集群节点数量较大时,手工部署比较耗时,复杂性和出错率会显著增加,这时引入自动化运维工具就变得尤为重要。通过自动化,能够大幅减少繁琐的手动操作,显著提高部署效率,同时降低人为操作带来的风险和莫名其妙的异常。
今天,我将为大家实战演示,如何利用自动化运维工具 Ansible 快速完成 KubeSphere 集群节点的初始化配置。
实战服务器配置 (架构 1:1 复刻小规模生产环境,配置略有不同)
主机名 | IP | CPU | 内存 | 系统盘 | 数据盘 | 用途 |
---|---|---|---|---|---|---|
ksp-control-1 | 192.168.9.111 | 4 | 8 | 40 | 100 | k8s-control-plane |
ksp-control-2 | 192.168.9.112 | 4 | 8 | 40 | 100 | k8s-control-plane |
ksp-control-3 | 192.168.9.113 | 4 | 8 | 40 | 100 | k8s-control-plane |
ksp-worker1 | 192.168.9.114 | 4 | 16 | 40 | 100 | k8s-worker |
ksp-worker-2 | 192.168.9.115 | 4 | 16 | 40 | 100 | k8s-worker |
ksp-worker-3 | 192.168.9.116 | 4 | 16 | 40 | 100 | k8s-worker |
Ansible | 192.168.9.90 | 2 | 4 | 40 | Ansible 控制节点 | |
合计 | 5 | 26 | 76 | 280 | 600 |
实战环境涉及软件版本信息
- 操作系统:CentOS 7.9 和 openEuler 22.03 LTS SP3
- Ansible: 2.10.17
1. 安装配置 Ansible
1.1 下载离线 Ansible
本文使用我自己制作的解压即用的 Ansible 离线安装包,实际使用中可以使用 yum 或是其他方式安装。
- 下载解压 Ansible 离线部署包
tar xvf ansible-2.10.tar.gz -C /opt/
1.2 下载 Ansible-devops 运维脚本
代码语言:javascript复制tar xvf ansible-devops.tar.gz -C /opt/
1.3 根据项目信息修改 hosts 文件
根据节点实际情况修改 Ansible 使用的 hosts 文件,本文使用了 6个节点组成的 3 Control 和 3 Worker 节点的配置。
hosts 文件的默认目录,/opt/ansible-devops/inventories/dev/
# vi hosts,# 根据实际情况修改
[k8s_control]
ksp-control-1 ansible_ssh_host=192.168.9.111 host_name=ksp-control-1
ksp-control-2 ansible_ssh_host=192.168.9.112 host_name=ksp-control-2
ksp-control-3 ansible_ssh_host=192.168.9.113 host_name=ksp-control-3
[k8s_worker]
ksp-worker-1 ansible_ssh_host=192.168.9.114 host_name=ksp-worker-1
ksp-worker-2 ansible_ssh_host=192.168.9.115 host_name=ksp-worker-2
ksp-worker-3 ansible_ssh_host=192.168.9.116 host_name=ksp-worker-3
[k8s:children]
k8s_control
k8s_worker
[servers:children]
k8s
[servers:vars]
ansible_connection=paramiko
ansible_ssh_user=root
ansible_ssh_private_key_file=id_ed25519_ops
#ansible_ssh_pass=
1.4 配置 SSH 密钥
在 Ansible 控制节点生成 SSH 管理密钥,用于 Ansible 管理控制其他节点。本步骤为可选内容,也可以修改 hosts 文件加入密码参数或是在执行命令时加上 -k ,使用密码认证的方式。
- 生成 Ansible 管理密钥
ssh-keygen -N '' -t ed25519 -q -f ./id_ed25519_ops -C "Ansible Remote SSH Management Key"
- 分发密钥
# 激活 Ansible 虚拟环境
source /opt/ansible-2.10/bin/activate
# 执行分发密钥的 playbook (按提示输入系统密码)
ansible-playbook ../../playbooks/deploy-ssh-authorized-key.yaml -k
正确执行后,输出结果如下 :
代码语言:javascript复制(ansible-2.10) $ ansible-playbook ../../playbooks/deploy-ssh-authorized-key.yaml -k
SSH password:
PLAY [分发 SSH 管理密钥] ****************************************************************************************************************************************
TASK [分发 SSH 管理密钥] ****************************************************************************************************************************************
changed: [ksp-control-2] => (item=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILagZZ/cLcICc0l Brd5Yw9V2Rtot2D2FBtn e1LXRAh Ansible Remote SSH Management Key)
changed: [ksp-control-3] => (item=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILagZZ/cLcICc0l Brd5Yw9V2Rtot2D2FBtn e1LXRAh Ansible Remote SSH Management Key)
changed: [ksp-control-1] => (item=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILagZZ/cLcICc0l Brd5Yw9V2Rtot2D2FBtn e1LXRAh Ansible Remote SSH Management Key)
changed: [ksp-worker-1] => (item=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILagZZ/cLcICc0l Brd5Yw9V2Rtot2D2FBtn e1LXRAh Ansible Remote SSH Management Key)
changed: [ksp-worker-2] => (item=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILagZZ/cLcICc0l Brd5Yw9V2Rtot2D2FBtn e1LXRAh Ansible Remote SSH Management Key)
changed: [ksp-worker-3] => (item=ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILagZZ/cLcICc0l Brd5Yw9V2Rtot2D2FBtn e1LXRAh Ansible Remote SSH Management Key)
PLAY RECAP ************************************************************************************************************************************************
ksp-control-1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ksp-control-2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ksp-control-3 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ksp-worker-1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ksp-worker-2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ksp-worker-3 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
- 验证节点连通性
ansible -m ping all
正确执行后,输出结果如下 :
代码语言:javascript复制(ansible-2.10) $ ansible -m ping all
ksp-worker-2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
ksp-control-3 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
ksp-control-1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
ksp-worker-1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
ksp-control-2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
ksp-worker-3 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
2. 执行系统初始化任务
2.1 系统初始化配置
系统初始化主要包含以下任务:
- 配置主机名
- 配置 DNS
- 配置时区
- 停止并禁用 Firewalld
- 禁用 SELinux
- 配置 /etc/hosts
- 升级操作系统(默认不执行)
- 配置时间同步
执行命令:
代码语言:javascript复制ansible-playbook ../../playbooks/init-os.yaml
2.2 更新系统内核
该任务为可选项,适用于操作系统为 CentOS 7 时,将系统内核升级到最新的长期稳定版。
执行命令:
代码语言:javascript复制ansible-playbook ../../playbooks/deploy-update-kernel.yaml
2.3 初始化数据盘
新加的数据盘为 /dev/sdb,使用 LVM 的方式初始化数据盘,并挂载到 /data 目录。如果你的环境跟我的不一样,请修改 Ansible vars 配置。
执行命令:
代码语言:javascript复制ansible-playbook ../../playbooks/init-disk-lvm.yaml
2.4 安装 KubeSphere 系统依赖包
- 安装系统依赖包
ansible-playbook ../../playbooks/deploy-ksp-nodes.yaml
正确执行后,输出结果如下 :
代码语言:javascript复制(ansible-2.10) $ ansible-playbook ../../playbooks/deploy-ksp-nodes.yaml
PLAY [安装 K8S Master/Worker Nodes 基础环境.] *******************************************************************************************************************
skipping: no hosts matched
PLAY RECAP ************************************************************************************************************************************************
(ansible-2.10) [root@devops-main-oe ct-v331]# ansible-playbook ../../playbooks/deploy-ksp-nodes.yaml
PLAY [安装 K8S Master/Worker Nodes 基础环境.] *******************************************************************************************************************
TASK [01-安装依赖包.] ******************************************************************************************************************************************
changed: [ksp-control-2]
changed: [ksp-control-1]
changed: [ksp-worker-2]
changed: [ksp-worker-1]
changed: [ksp-control-3]
changed: [ksp-worker-3]
TASK [02-创建数据目录.] *****************************************************************************************************************************************
changed: [ksp-control-3] => (item=/data/openebs/local)
changed: [ksp-control-1] => (item=/data/openebs/local)
changed: [ksp-worker-2] => (item=/data/openebs/local)
changed: [ksp-control-2] => (item=/data/openebs/local)
changed: [ksp-worker-1] => (item=/data/openebs/local)
changed: [ksp-control-1] => (item=/data/containerd)
changed: [ksp-control-2] => (item=/data/containerd)
changed: [ksp-worker-2] => (item=/data/containerd)
changed: [ksp-control-3] => (item=/data/containerd)
changed: [ksp-worker-1] => (item=/data/containerd)
changed: [ksp-worker-3] => (item=/data/openebs/local)
changed: [ksp-worker-3] => (item=/data/containerd)
TASK [03-创建 Containerd 数据目录软连接.] **************************************************************************************************************************
changed: [ksp-control-1]
changed: [ksp-control-2]
changed: [ksp-control-3]
changed: [ksp-worker-2]
changed: [ksp-worker-1]
changed: [ksp-worker-3]
TASK [04-安装 GlusterFS 软件仓库.] ******************************************************************************************************************************
skipping: [ksp-control-1]
skipping: [ksp-control-3]
skipping: [ksp-control-2]
skipping: [ksp-worker-2]
skipping: [ksp-worker-1]
skipping: [ksp-worker-3]
TASK [04-安装 GlusterFS 客户端.] *******************************************************************************************************************************
skipping: [ksp-control-1]
skipping: [ksp-control-2]
skipping: [ksp-control-3]
skipping: [ksp-worker-1]
skipping: [ksp-worker-3]
skipping: [ksp-worker-2]
TASK [05-安装 NFS 客户端.] *************************************************************************************************************************************
skipping: [ksp-control-2]
skipping: [ksp-control-1]
skipping: [ksp-control-3]
skipping: [ksp-worker-1]
skipping: [ksp-worker-3]
skipping: [ksp-worker-2]
PLAY RECAP ************************************************************************************************************************************************
ksp-control-1 : ok=3 changed=3 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
ksp-control-2 : ok=3 changed=3 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
ksp-control-3 : ok=3 changed=3 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
ksp-worker-1 : ok=3 changed=3 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
ksp-worker-2 : ok=3 changed=3 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
ksp-worker-3 : ok=3 changed=3 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
至此,我们利用自动化运维工具 Ansible 完成了 6个 操作系统为 CentOS 7.9 的 KubeSphere 集群节点的系统初始化任务。
3. 自动化工具
文章中所有操作步骤,已全部编排为自动化脚本,包含以下内容(因篇幅限制,不在此文档中展示):
- ansible-devops 源代码
- Ansible 离线包,ansible-2.10.tar.gz
运维有术星球会员请到专属代码仓库下载(价值内容,仅星球会员专享)。
以上,就是我今天分享的全部内容。下一期分享的内容还没想好,敬请期待开盲盒。
如果你喜欢本文,请分享、收藏、点赞、评论! 请持续关注 @运维有术,及时收看更多好文!
欢迎加入 「知识星球|运维有术」 ,获取更多的 KubeSphere、Kubernetes、云原生运维、自动化运维、AI 大模型等实战技能。未来运维生涯始终有我坐在你的副驾。
免责声明:
- 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
- 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境。由此引发的任何问题,作者概不负责!
Get 本文实战视频(请注意,文档视频异步发行,请先关注)
- B 站|运维有术
版权声明
- 所有内容均属于原创,感谢阅读、收藏,转载请联系授权,未经授权不得转载。