Kubeasz快速部署高可用k8s集群入门到实战

#作者:曹付江

文章目录

  • [一、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 默认:

registry.k8s.io/pause:3.9

如果你在国内或内网:

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
相关推荐
a里啊里啊2 小时前
Docker安装全流程-包括修改默认安装路径
运维·docker·容器
zfoo-framework2 小时前
minikube+docker desktop搭建k8s环境部署SpringBoot应用(仅仅是玩玩,端口映射很麻烦)
运维·docker·容器
会飞的大可4 小时前
Docker 企业级镜像构建与安全实践
安全·docker·容器
维度攻城狮14 小时前
Docker优雅地运行OpenClaw
运维·docker·容器·openclaw·openclaw安装
AI攻城狮16 小时前
OpenClaw Exec Approvals 机制:在安全与效率之间寻找平衡
人工智能·云原生·aigc
wuxingge18 小时前
docker部署solara音乐播放器
docker·容器
❀͜͡傀儡师19 小时前
docker部署Antigravity-Manager
运维·docker·容器·antigravity
sg_knight19 小时前
Docker环境下的MinIO安装,以及如何正确配置数据持久化(避坑篇)
运维·docker·容器·minio·ftp·cos·oss
会飞的大可20 小时前
Docker容器项目无法访问MySQL的解决策略
mysql·docker·容器