KubeSphere 最佳实战:基于 Ansible 极速初始化 KubeSphere 集群节点

2024-07-02 18:29:22 浏览数 (3)

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.9openEuler 22.03 LTS SP3
  • Ansible: 2.10.17

1. 安装配置 Ansible

1.1 下载离线 Ansible

本文使用我自己制作的解压即用的 Ansible 离线安装包,实际使用中可以使用 yum 或是其他方式安装。

  • 下载解压 Ansible 离线部署包
代码语言:javascript复制
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/

代码语言:javascript复制
# 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 管理密钥
代码语言:javascript复制
ssh-keygen -N '' -t ed25519 -q -f ./id_ed25519_ops -C "Ansible Remote SSH Management Key"
  • 分发密钥
代码语言:javascript复制
# 激活 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
  • 验证节点连通性
代码语言:javascript复制
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 系统依赖包

  • 安装系统依赖包
代码语言:javascript复制
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 站|运维有术

版权声明

  • 所有内容均属于原创,感谢阅读、收藏,转载请联系授权,未经授权不得转载

0 人点赞