主页 > 手机  > 

Kubespray部署企业级高可用K8S指南

Kubespray部署企业级高可用K8S指南

目录 前言1 K8S集群节点准备1.1 主机列表1.2 kubespray节点python3及pip3准备1.2.1. 更新系统1.2.2. 安装依赖1.2.3. 下载Python 3.12源码1.2.4. 解压源码包1.2.5. 编译和安装Python1.2.6. 验证安装1.2.7. 设置Python 3.12为默认版本(可选)1.2.8. 安装pip1.2.9. 验证pip 1.3 kubespray源文件获取1.4 kubespray环境准备1.5 配置主机清单1.6 准备K8S集群配置文件1.7 准备k8s集群插件文件1.8 设置kubespray主机免密登录到其他集群主机1.8.1. 在kubespray主机生成ssh密钥1.8.2. 使用ssh-copy-id复制ssh密钥到k8s集群节点主机1.8.3. 在K8S集群节点添加sysops用户指行授权 1.9 k8s集群主机安全设置1.10 k8s集群主机路由转发设置1.11 禁用swap分区 2 k8s集群部署及可用性验证2.1 k8s集群部署2.2 查看集群节点的配置是否已就绪2.3 验证集群部署成功 3 移除节点4 增加节点5 清理k8s集群

前言

Kubespray 是一个自由开源的工具,它提供了 Ansible 剧本(playbook) 来部署和管理 Kubernetes 集群。它旨在简化跨多个节点的 Kubernetes 集群的安装过程,允许用户快速轻松地部署和管理生产就绪的 Kubernetes 集群。

它支持一系列操作系统,包括 Ubuntu、CentOS、Rocky Linux 和 Red Hat Enterprise Linux(RHEL),它可以在各种平台上部署 Kubernetes,包括裸机、公共云和私有云。

1 K8S集群节点准备 1.1 主机列表 主机名称IP地址硬件配置主机角色node1192.168.191.133/244C4G1Tmasternode2192.168.191.129/244C4G1Tmasternode3192.168.191.128/244C4G1Tmasternode4192.168.191.130/244C4G1Tworkernode5192.168.191.132/244C4G1Tworkerkubespray192.168.191.131/244C4G1Tansible

所有的node节点均为centos9

1.2 kubespray节点python3及pip3准备

此操作只需要在 kubespary 节点!!!

1.2.1. 更新系统

首先,确保系统是最新的:

sudo dnf update -y 1.2.2. 安装依赖

安装编译Python所需的依赖包:

sudo dnf install -y gcc openssl-devel bzip2-devel libffi-devel zlib-devel ncurses-devel sqlite-devel readline-devel tk-devel xz-devel libuuid-devel 1.2.3. 下载Python 3.12源码

前往Python官网下载Python 3.12的源码包,或使用wget直接下载:

wget .python.org/ftp/python/3.12.0/Python-3.12.0.tgz 1.2.4. 解压源码包

解压下载的源码包:

tar -xvf Python-3.12.0.tgz 1.2.5. 编译和安装Python

进入解压后的目录并编译安装Python:

cd Python-3.12.0 ./configure --enable-optimizations make -j$(nproc) sudo make altinstall

make altinstall 用于避免覆盖系统自带的Python 2.x或3.x版本。

1.2.6. 验证安装

安装完成后,验证Python 3.12是否安装成功:

python3.12 --version 1.2.7. 设置Python 3.12为默认版本(可选)

如果你希望将Python 3.12设置为默认的Python版本,可以更新alternatives:

sudo alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.12 1 sudo alternatives --config python3 1.2.8. 安装pip

确保pip已安装:

python3.12 -m ensurepip --upgrade 1.2.9. 验证pip

验证pip是否安装成功:

pip3.12 --version

如果日志提醒升级pip也可以根据提示命令去升级到提示版本 下面是我kuberspray主机上的版本

1.3 kubespray源文件获取

此操作只需要在 kubespary 节点!!!

创建个空目录,我本地创建的目录叫workspace

在workspace下通过kubespray官网下载代码

下载完后查看目录 本篇部署是基于release-2.26这个版本部署的,所以切换到对应的版本

git checkout release-2.26 git branch

1.4 kubespray环境准备

此操作只需要在 kubespary 节点!!!

kubespray部署所需要的环境及配置说明在kubespray/requirements.txt这个文件下

使用pip进行下载

pip3 install -r requirements.txt

下载一定要注意报错!!确保所有的环境都成功安装!!

查看ansible是否安装成功,这个是重中之重!

ansible --version

1.5 配置主机清单

此操作只需要在 kubespary 节点!!!

inventory/sample这个文件夹是一个样例,我们拷贝一份叫mycluster,再进行配置

cp -rfp inventory/sample inventory/mycluster

声明集群ip,这里替换成你的master及node的节点ip

declare -a IPS=(192.168.191.133 192.168.191.129 192.168.191.128 192.168.191.130 192.168.191.132)

创建主机清单

CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}

上面的命令会给我们生成配置到inventory/mycluster/hosts.yaml这个文件下,这个就是主机清单

[root@kubespray kubespray]# ls inventory/mycluster/ group_vars inventory.ini patches [root@kubespray kubespray]# CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]} DEBUG: Adding group all DEBUG: Adding group kube_control_plane DEBUG: Adding group kube_node DEBUG: Adding group etcd DEBUG: Adding group k8s_cluster DEBUG: Adding group calico_rr DEBUG: adding host node1 to group all DEBUG: adding host node2 to group all DEBUG: adding host node3 to group all DEBUG: adding host node4 to group all DEBUG: adding host node5 to group all DEBUG: adding host node1 to group etcd DEBUG: adding host node2 to group etcd DEBUG: adding host node3 to group etcd DEBUG: adding host node1 to group kube_control_plane DEBUG: adding host node2 to group kube_control_plane DEBUG: adding host node1 to group kube_node DEBUG: adding host node2 to group kube_node DEBUG: adding host node3 to group kube_node DEBUG: adding host node4 to group kube_node DEBUG: adding host node5 to group kube_node [root@kubespray kubespray]# ls inventory/mycluster/ group_vars hosts.yaml inventory.ini patches

这个清单还不正确,让我们查看并修改一下

vim inventory/mycluster/hosts.yaml

核对一下master节点和work节点是否符合要求,不符合进行对应的调整

1.6 准备K8S集群配置文件

此操作只需要在 kubespary 节点!!!

修改k8s的集群的配置文件

vim inventory/mycluster/group_vars/k8s_cluster/k8s-cluster.yml

这里有一些集群的配置,确保这里的版本是v1.28.0,如果不是请修改为该版本,因为我们使用的是kubespray的release-2.26版本

1.7 准备k8s集群插件文件

此操作只需要在 kubespary 节点!!!

要启用 Kuberenetes 仪表板和入口控制器等插件,请在文件inventory/mycluster/group_vars/k8s_cluster/addons.yml 中将参数设置为已启用

根据业务自身去进行修改

vim inventory/mycluster/group_vars/k8s_cluster/addons.yml

我这里只开启了helm和dashboard

1.8 设置kubespray主机免密登录到其他集群主机 1.8.1. 在kubespray主机生成ssh密钥 [root@kubespray ~]# ssh-keygen 1.8.2. 使用ssh-copy-id复制ssh密钥到k8s集群节点主机

下面的过程会有页面交互,输入yes后还会验证目标主机的密码,输入即可

[root@kubespray ~]# ssh-copy-id root@192.168.191.133 [root@kubespray ~]# ssh-copy-id root@192.168.191.129 [root@kubespray ~]# ssh-copy-id root@192.168.191.128 [root@kubespray ~]# ssh-copy-id root@192.168.191.130 [root@kubespray ~]# ssh-copy-id root@192.168.191.132

成功后直接ssh任何集群主机无需密码登录即可,这一步是保证ansible成功部署的关键!

1.8.3. 在K8S集群节点添加sysops用户指行授权

⬇️此操作需要在集群中的所有节点!!!

echo "sysops ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops 1.9 k8s集群主机安全设置

此操作只需要在 kubespary 节点!!!

ansible all -i inventory/mycluster/hosts.yaml -m shell -a "systemctl stop firewalld && systemctl disable firewalld" 1.10 k8s集群主机路由转发设置 ansible all -i inventory/mycluster/hosts.yaml -m shell -a "echo 'net.ipv4.ip_forward=1' | tee -a /etc/sysctl.conf" 1.11 禁用swap分区 ansible all -i inventory/mycluster/hosts.yaml -m shell -a "sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab && swapoff -a"

以上就是所有的环境准备了,只有一步需要在集群节点操作,其他的都在kubespray节点上操作即可!!!

2 k8s集群部署及可用性验证 2.1 k8s集群部署

建议接下来的操作可以开科学上网!!!

执行部署集群的代码

ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml

如果上面的部署失败了可以重复执行,如果重复报错相同错误可以在上面的命令后面加-vvv可以打印详细报错。不明白的就复制到ai里!!

部署成功应该是如下这样,没有红色的报错,且failed=0

2.2 查看集群节点的配置是否已就绪

我们现在登录到集群节点执行获取节点状态的命令

kubectl get nodes

查看kube配置

kubectl config view

可以看到集群配置不正确

kubespray生成了一份配置没有替换,我们手动执行一下

mkdir -p $HOME/.kube sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config

再去查看kube配置

2.3 验证集群部署成功

查看node节点

kubectl get nodes

3 移除节点

不用修改hosts.yaml文件

[root@kubespray kubespray]# ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root remove-node.yml -v -b --extra-vars "node=node5" 4 增加节点

需要修改hosts.yaml文件,在inventory/mycluster/hosts.yaml中添加新增节点信息

[root@kubespray kubespray]# cat inventory/mycluster/hosts.yaml all: hosts: node1: ansible_host: 192.168.10.160 ip: 192.168.10.160 access_ip: 192.168.10.160 node2: ansible_host: 192.168.10.161 ip: 192.168.10.161 access_ip: 192.168.10.161 node3: ansible_host: 192.168.10.162 ip: 192.168.10.162 access_ip: 192.168.10.162 node4: 添加 ansible_host: 192.168.10.163 ip: 192.168.10.163 access_ip: 192.168.10.163 node5: 添加 ansible_host: 192.168.10.164 ip: 192.168.10.164 access_ip: 192.168.10.164 children: kube_control_plane: hosts: node1: node2: node3: kube_node: hosts: node4: 添加 node5: 添加 etcd: hosts: node1: node2: node3: k8s_cluster: children: kube_control_plane: kube_node: calico_rr: hosts: {} [root@kubespray kubespray]# ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root scale.yml -v -b 5 清理k8s集群 [root@kubespray ~]# cd kubespray/ [root@kubespray kubespray]# ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root reset.yml
标签:

Kubespray部署企业级高可用K8S指南由讯客互联手机栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Kubespray部署企业级高可用K8S指南

上一篇
绪论(4)

下一篇
金融项目实战