前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >KubeSphere 最佳实战:基于 Ansible 极速初始化 KubeSphere 集群节点

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

作者头像
运维有术
修改2024-07-02 18:29:22
1330
修改2024-07-02 18:29:22
举报
文章被收录于专栏:运维有术运维有术

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 站|运维有术

版权声明

  • 所有内容均属于原创,感谢阅读、收藏,转载请联系授权,未经授权不得转载
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维有术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 安装配置 Ansible
    • 1.1 下载离线 Ansible
      • 1.2 下载 Ansible-devops 运维脚本
        • 1.3 根据项目信息修改 hosts 文件
          • 1.4 配置 SSH 密钥
          • 2. 执行系统初始化任务
            • 2.1 系统初始化配置
              • 2.2 更新系统内核
                • 2.3 初始化数据盘
                  • 2.4 安装 KubeSphere 系统依赖包
                  • 3. 自动化工具
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档