目录
- 前言
- [1 K8S集群节点准备](#1 K8S集群节点准备)
-
- [1.1 主机列表](#1.1 主机列表)
- [1.2 kubespray节点python3及pip3准备](#1.2 kubespray节点python3及pip3准备)
-
- [1.2.1. 更新系统](#1.2.1. 更新系统)
- [1.2.2. 安装依赖](#1.2.2. 安装依赖)
- [1.2.3. 下载Python 3.12源码](#1.2.3. 下载Python 3.12源码)
- [1.2.4. 解压源码包](#1.2.4. 解压源码包)
- [1.2.5. 编译和安装Python](#1.2.5. 编译和安装Python)
- [1.2.6. 验证安装](#1.2.6. 验证安装)
- [1.2.7. 设置Python 3.12为默认版本(可选)](#1.2.7. 设置Python 3.12为默认版本(可选))
- [1.2.8. 安装pip](#1.2.8. 安装pip)
- [1.2.9. 验证pip](#1.2.9. 验证pip)
- [1.3 kubespray源文件获取](#1.3 kubespray源文件获取)
- [1.4 kubespray环境准备](#1.4 kubespray环境准备)
- [1.5 配置主机清单](#1.5 配置主机清单)
- [1.6 准备K8S集群配置文件](#1.6 准备K8S集群配置文件)
- [1.7 准备k8s集群插件文件](#1.7 准备k8s集群插件文件)
- [1.8 设置kubespray主机免密登录到其他集群主机](#1.8 设置kubespray主机免密登录到其他集群主机)
-
- [1.8.1. 在kubespray主机生成ssh密钥](#1.8.1. 在kubespray主机生成ssh密钥)
- [1.8.2. 使用ssh-copy-id复制ssh密钥到k8s集群节点主机](#1.8.2. 使用ssh-copy-id复制ssh密钥到k8s集群节点主机)
- [1.8.3. 在K8S集群节点添加sysops用户指行授权](#1.8.3. 在K8S集群节点添加sysops用户指行授权)
- [1.9 k8s集群主机安全设置](#1.9 k8s集群主机安全设置)
- [1.10 k8s集群主机路由转发设置](#1.10 k8s集群主机路由转发设置)
- [1.11 禁用swap分区](#1.11 禁用swap分区)
- [2 k8s集群部署及可用性验证](#2 k8s集群部署及可用性验证)
-
- [2.1 k8s集群部署](#2.1 k8s集群部署)
- [2.2 查看集群节点的配置是否已就绪](#2.2 查看集群节点的配置是否已就绪)
- [2.3 验证集群部署成功](#2.3 验证集群部署成功)
- [3 移除节点](#3 移除节点)
- [4 增加节点](#4 增加节点)
- [5 清理k8s集群](#5 清理k8s集群)
前言
Kubespray 是一个自由开源的工具,它提供了 Ansible 剧本(playbook) 来部署和管理 Kubernetes 集群。它旨在简化跨多个节点的 Kubernetes 集群的安装过程,允许用户快速轻松地部署和管理生产就绪的 Kubernetes 集群。
它支持一系列操作系统,包括 Ubuntu、CentOS、Rocky Linux 和 Red Hat Enterprise Linux(RHEL),它可以在各种平台上部署 Kubernetes,包括裸机、公共云和私有云。
1 K8S集群节点准备
1.1 主机列表
主机名称 | IP地址 | 硬件配置 | 主机角色 |
---|---|---|---|
node1 | 192.168.191.133/24 | 4C4G1T | master |
node2 | 192.168.191.129/24 | 4C4G1T | master |
node3 | 192.168.191.128/24 | 4C4G1T | master |
node4 | 192.168.191.130/24 | 4C4G1T | worker |
node5 | 192.168.191.132/24 | 4C4G1T | worker |
kubespray | 192.168.191.131/24 | 4C4G1T | ansible |
所有的node节点均为centos9
1.2 kubespray节点python3及pip3准备
此操作只需要在 kubespary 节点!!!
1.2.1. 更新系统
首先,确保系统是最新的:
bash
sudo dnf update -y
1.2.2. 安装依赖
安装编译Python所需的依赖包:
bash
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
直接下载:
bash
wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
1.2.4. 解压源码包
解压下载的源码包:
bash
tar -xvf Python-3.12.0.tgz
1.2.5. 编译和安装Python
进入解压后的目录并编译安装Python:
bash
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是否安装成功:
bash
python3.12 --version
1.2.7. 设置Python 3.12为默认版本(可选)
如果你希望将Python 3.12设置为默认的Python版本,可以更新alternatives
:
bash
sudo alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.12 1
sudo alternatives --config python3
1.2.8. 安装pip
确保pip已安装:
bash
python3.12 -m ensurepip --upgrade
1.2.9. 验证pip
验证pip是否安装成功:
bash
pip3.12 --version
如果日志提醒升级pip也可以根据提示命令去升级到提示版本
下面是我kuberspray主机上的版本
1.3 kubespray源文件获取
此操作只需要在 kubespary 节点!!!
创建个空目录,我本地创建的目录叫workspace
在workspace下通过kubespray官网下载代码
下载完后查看目录
本篇部署是基于release-2.26
这个版本部署的,所以切换到对应的版本
bash
git checkout release-2.26
git branch

1.4 kubespray环境准备
此操作只需要在 kubespary 节点!!!
kubespray部署所需要的环境及配置说明在kubespray/requirements.txt这个文件下
使用pip进行下载
bash
pip3 install -r requirements.txt
下载一定要注意报错!!确保所有的环境都成功安装!!
查看ansible是否安装成功,这个是重中之重!
bash
ansible --version

1.5 配置主机清单
此操作只需要在 kubespary 节点!!!
inventory/sample这个文件夹是一个样例,我们拷贝一份叫mycluster,再进行配置
bash
cp -rfp inventory/sample inventory/mycluster
声明集群ip,这里替换成你的master及node的节点ip
bash
declare -a IPS=(192.168.191.133 192.168.191.129 192.168.191.128 192.168.191.130 192.168.191.132)
创建主机清单
bash
CONFIG_FILE=inventory/mycluster/hosts.yaml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
上面的命令会给我们生成配置到inventory/mycluster/hosts.yaml这个文件下,这个就是主机清单
bash
[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
这个清单还不正确,让我们查看并修改一下
bash
vim inventory/mycluster/hosts.yaml

核对一下master节点和work节点是否符合要求,不符合进行对应的调整
1.6 准备K8S集群配置文件
此操作只需要在 kubespary 节点!!!
修改k8s的集群的配置文件
bash
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 中将参数设置为已启用
根据业务自身去进行修改
bash
vim inventory/mycluster/group_vars/k8s_cluster/addons.yml

我这里只开启了helm和dashboard
1.8 设置kubespray主机免密登录到其他集群主机
1.8.1. 在kubespray主机生成ssh密钥
powershell
[root@kubespray ~]# ssh-keygen
1.8.2. 使用ssh-copy-id复制ssh密钥到k8s集群节点主机
下面的过程会有页面交互,输入yes后还会验证目标主机的密码,输入即可
powershell
[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用户指行授权
⬇️此操作需要在集群中的所有节点!!!
powershell
echo "sysops ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/sysops
1.9 k8s集群主机安全设置
此操作只需要在 kubespary 节点!!!
bash
ansible all -i inventory/mycluster/hosts.yaml -m shell -a "systemctl stop firewalld && systemctl disable firewalld"
1.10 k8s集群主机路由转发设置
bash
ansible all -i inventory/mycluster/hosts.yaml -m shell -a "echo 'net.ipv4.ip_forward=1' | tee -a /etc/sysctl.conf"
1.11 禁用swap分区
bash
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集群部署
建议接下来的操作可以开科学上网!!!
执行部署集群的代码
bash
ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root cluster.yml
如果上面的部署失败了可以重复执行,如果重复报错相同错误可以在上面的命令后面加-vvv可以打印详细报错。不明白的就复制到ai里!!
部署成功应该是如下这样,没有红色的报错,且failed=0
2.2 查看集群节点的配置是否已就绪
我们现在登录到集群节点执行获取节点状态的命令
bash
kubectl get nodes

查看kube配置
bash
kubectl config view

可以看到集群配置不正确
kubespray生成了一份配置没有替换,我们手动执行一下
bash
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节点
bash
kubectl get nodes

3 移除节点
不用修改hosts.yaml文件
powershell
[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中添加新增节点信息
powershell
[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: {}
powershell
[root@kubespray kubespray]# ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root scale.yml -v -b
5 清理k8s集群
powershell
[root@kubespray ~]# cd kubespray/
[root@kubespray kubespray]# ansible-playbook -i inventory/mycluster/hosts.yaml --become --become-user=root reset.yml