#作者:曹付江
文章目录
- [一、kubeasz 核心特点](#一、kubeasz 核心特点)
- 二、环境准备
-
- [1. 节点规划(示例)](#1. 节点规划(示例))
- [2. 所有节点执行](#2. 所有节点执行)
- [三、部署 kubeasz](#三、部署 kubeasz)
-
- [1. 在管理节点执行(一般用 master)](#1. 在管理节点执行(一般用 master))
- 四、配置集群
-
- [1. 初始化集群配置](#1. 初始化集群配置)
- [2. 修改 hosts 文件(核心)](#2. 修改 hosts 文件(核心))
- [3. 修改集群参数](#3. 修改集群参数)
- 五、一键部署集群
- 六、验证集群
- 七、安装网络插件(默认)
- [八、1.30.1 版本,常见问题(可能会遇到)](#八、1.30.1 版本,常见问题(可能会遇到))
-
- [1. containerd 启动失败](#1. containerd 启动失败)
- [2. kubelet NotReady](#2. kubelet NotReady)
- [3. API Server 访问失败](#3. API Server 访问失败)
- [4. CRI 接口变化(用 cri-o 必看)](#4. CRI 接口变化(用 cri-o 必看))
- [5. cgroup driver 必须一致](#5. cgroup driver 必须一致)
- [6. pause 镜像版本](#6. pause 镜像版本)
- [7. CoreDNS 版本兼容](#7. CoreDNS 版本兼容)
- 9、扩容节点
-
- [9.1. 修改 hosts](#9.1. 修改 hosts)
- [9.2. 执行](#9.2. 执行)

用 kubeasz 快递部署 Kubernetes (含1.30版本关键坑)集群,是目前国内非常流行的一种方式(基于 Ansible 自动化)。小编给你一套实战级流程,从单节点→多节点都适用。
一、kubeasz 核心特点
- 基于 Ansible,无需复杂 kubeadm 手动操作
- 支持 离线/在线部署
- 使用二进制方式安装 K8s
- 支持 containerd / cri-o(用 cri-o也很契合)
- 自动安装:
- containerd / docker
- etcd
- kube-apiserver / scheduler / controller
- 支持扩容、升级、证书管理
二、环境准备
1. 节点规划(示例)
# master
192.168.1.10 k8s-master
# worker
192.168.1.11 k8s-node1
192.168.1.12 k8s-node2
2. 所有节点执行
# 关闭 swap
swapoff -a
sed -i '/swap/s/^/#/' /etc/fstab
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭 selinux
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
# 时间同步
yum install -y chrony
systemctl enable chronyd --now
三、部署 kubeasz
1. 在管理节点执行(一般用 master)
apt-get -y install ansible
下载kubeasz 最新版本:
git clone https://github.com/easzlab/kubeasz.git
cd kubeasz
或用容器方式(推荐)
docker run -d \
--name kubeasz \
--restart always \
--network host \
-v /etc/ansible:/etc/ansible \
-v /root/.kube:/root/.kube \
easzlab/kubeasz
四、配置集群
1. 初始化集群配置
①下载脚本和组件
./ezdown -D
./ezdown -P
说明:
-D:下载脚本
-P:下载组件(包含 k8s)
关键:指定 Kubernetes 1.30.1
默认不是 1.30,需要手动改!
编辑:
vi down/config.yml
修改:
kube_version: "1.30.1"
第一次没有改,可以修改后,重新下载:
./ezdown -P
首次下载注意:
( 第一次下载 需要具备科学上网条件,且svc文件也要添加
vim /etc/systemd/system/docker.service
## 在service里面增加内容
Environment="HTTP_PROXY=http://127.0.0.1:17890"
Environment="HTTPS_PROXY=http://127.0.0.1:17890"
Environment="NO_PROXY=localhost,127.0.0.1,docker"
## 更改daemon.json文件
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["https://eteram232.mirror.aliyuncs.com"
],
"insecure-registries": ["http://easzlab.io.local:5000"],
"max-concurrent-downloads": 10,
}}
以上都执行了之后重启docker:./ezdown -D 下载 镜像到本地)
② ./ezdown -S # 生成示例配置
会生成:
/etc/kubeasz/clusters/xxx/
2. 修改 hosts 文件(核心)
编辑:
vi /etc/kubeasz/clusters/mycluster/hosts
示例:
[etcd]
192.168.1.10
[kube_master]
192.168.1.10
[kube_node]
192.168.1.11
192.168.1.12
3. 修改集群参数
vi /etc/kubeasz/clusters/mycluster/config.yml
重点关注:
CLUSTER_NAME: "k8s"
CONTAINER_RUNTIME: "containerd"
SERVICE_CIDR: "10.68.0.0/16"
CLUSTER_CIDR: "172.20.0.0/16"
选择容器运行时(你重点关注)如果用: cri-o
kubeasz 默认是 containerd,需要改:
vi clusters/mycluster/config.yml
修改:
CONTAINER_RUNTIME: "crio"
五、一键部署集群
标准部署(推荐)
cd /etc/kubeasz
ansible-playbook -i clusters/mycluster/hosts 01.prepare.yml
ansible-playbook -i clusters/mycluster/hosts 02.etcd.yml
ansible-playbook -i clusters/mycluster/hosts 03.kube_master.yml
ansible-playbook -i clusters/mycluster/hosts 04.kube_node.yml
ansible-playbook -i clusters/mycluster/hosts 05.network.yml
或者一键,全部执行
ansible-playbook -i clusters/mycluster/hosts 90.setup.yml
六、验证集群
kubectl get node
输出类似ready, 说明成功:
NAME STATUS ROLES AGE
k8s-master Ready master 5m
k8s-node1 Ready 3m
k8s-node2 Ready 3m
七、安装网络插件(默认)
kubeasz 默认支持:
- calico(推荐)
- flannel
检查:
kubectl get pods -n kube-system
八、1.30.1 版本,常见问题(可能会遇到)
1. containerd 启动失败
systemctl status containerd
journalctl -u containerd -f
常见原因:
- cgroup 驱动不一致
- 内核模块没开
2. kubelet NotReady
journalctl -u kubelet -f
常见问题:
- 网络插件未就绪
- DNS 问题
3. API Server 访问失败
kubectl get cs
检查:
- 6443 端口
- 证书
4. CRI 接口变化(用 cri-o 必看)
K8s 1.30:
- 完全依赖 CRI
- 不再兼容 dockershim
必须保证:cri-o >= 1.30
5. cgroup driver 必须一致
检查:
cat /var/lib/kubelet/config.yaml | grep cgroupDriver
推荐:
cgroupDriver: systemd
6. pause 镜像版本
K8s 1.30 默认:
如果你在国内或内网:
SANDBOX_IMAGE: registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9
7. CoreDNS 版本兼容
确保:
kubectl get pod -n kube-system
coredns 正常 Running
9、扩容节点
新增节点后:
9.1. 修改 hosts
[kube_node]
192.168.1.11
192.168.1.12
192.168.1.13 # 新节点
9.2. 执行
ansible-playbook -i clusters/mycluster/hosts 04.kube_node.yml
