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

目录

  • 前言
  • [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
相关推荐
爱搞技术的猫猫2 小时前
微店商品详情API接口实战指南:从零实现商品数据自动化获取
大数据·linux·运维·数据库·自动化
winkel_wang3 小时前
Centos7服务器防火墙设置教程
linux·运维·服务器
阿里云云原生3 小时前
Spring AI 智能体通过 MCP 集成本地文件数据
云原生·mcp
非 白3 小时前
【服务器】Nginx
运维·服务器·nginx
这货不是陈进坚3 小时前
vmware虚拟机与宿主机共享文件夹
linux·运维·服务器
MarvelousJ5 小时前
Ubuntu解决Genesis报错
linux·运维·ubuntu
BTU_YC6 小时前
server can‘t find dns01.test.com: SERVFAIL
linux·运维·服务器
ftpeak6 小时前
ubuntu Linux 正确设置中文环境的方法
linux·运维·ubuntu
Ronin-Lotus7 小时前
上位机知识篇---Linux中RPM包管理工具&PATH环境变量
linux·运维·服务器·rpm包管理工具·path环境变量
encoding-console7 小时前
Centos7部署k8s(单master节点安装)
docker·云原生·容器·kubernetes·部署·集群·centos7