我会为你详细讲解基于 sealy 工具(Sealyun 集群管理工具)、通过 clusterfile 配置文件指定机器搭建 K8s 集群的完整流程,包括环境准备、配置编写、集群部署和验证。
一、核心前提:安装 sealy 工具(任意一台控制机 / 目标机器均可)
sealy 是 Sealyun 官方的集群部署工具,先完成工具安装:
bash
运行
# 下载并安装 sealy 工具(国内源,一键安装)
curl -sfL https://oss.sealyun.com/sealyun-script/install.sh | sh -s v1.2.0
# 验证安装是否成功
sealy version
# 输出类似 "sealy version v1.2.0" 即表示安装成功
二、编写 clusterfile 配置文件(核心:指定机器)
clusterfile 是 sealy 部署集群的核心配置文件,通过它可以精准指定集群的 Master/Node 节点、IP、角色、K8s 版本等信息。
1. 完整的 clusterfile 示例(自定义指定机器)
创建 clusterfile.yaml 文件,内容如下(根据你的实际机器 IP / 密码 / 角色修改):
yaml
apiVersion: sealyun.com/v1alpha1
kind: Cluster
metadata:
name: my-k8s-cluster # 集群名称,自定义
spec:
# 全局配置
ssh:
user: root # 机器登录用户(建议root,权限足够)
password: "123456" # 机器登录密码(如果用密钥登录,替换为 privateKey: "xxx")
port: 22 # 机器SSH端口
kubernetes:
version: v1.28.0 # 指定K8s版本
imageRepo: registry.aliyuncs.com/google_containers # 国内镜像源,避免拉取失败
network:
plugin: calico # 网络插件(calico/flannel,推荐calico,适配性更强)
cidr: 10.244.0.0/16 # Pod网段,默认即可
# 节点配置(核心:指定每台机器的IP和角色)
hosts:
- ip: 192.168.1.10 # 指定作为Master的机器IP
hostname: k8s-master # 自定义主机名
role: [master] # 角色为master
- ip: 192.168.1.11 # 指定作为Node的机器IP1
hostname: k8s-node1
role: [node] # 角色为node
- ip: 192.168.1.12 # 指定作为Node的机器IP2
hostname: k8s-node2
role: [node]
# 可选:如果需要多Master高可用,新增master节点即可
# - ip: 192.168.1.13
# hostname: k8s-master2
# role: [master]
配置说明(关键参数)
ssh段:必须确保指定的用户 / 密码 / 端口能登录所有目标机器,否则部署会失败;hosts段:ip是核心 ,必须填写你要指定的机器 IP;role支持master/node/etcd(单 Master 集群无需指定 etcd);kubernetes.version:支持大部分稳定版(如 v1.26.x、v1.27.x、v1.28.x),建议选最新稳定版。
三、执行部署(指定机器拉起集群)
在安装了 sealy 工具的机器上,执行以下命令:
bash
运行
# 执行部署(-f 指定clusterfile配置文件)
sealy apply -f clusterfile.yaml
# 部署过程会自动完成:
# 1. 检查目标机器环境(关闭防火墙/swap、安装依赖);
# 2. 拉取K8s镜像;
# 3. 初始化Master节点;
# 4. 将指定Node节点加入集群;
# 5. 安装网络插件。
四、验证集群部署结果
部署完成后,登录任意一台 Master 节点,执行以下命令验证:
bash
运行
# 配置kubectl(sealy部署后会自动生成配置,直接执行即可)
source /etc/profile.d/k8s.sh
# 查看节点状态(确认指定的机器都已加入且状态为Ready)
kubectl get nodes
预期输出(所有指定机器都在列表中,STATUS 为 Ready):
plaintext
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 5m v1.28.0
k8s-node1 Ready <none> 3m v1.28.0
k8s-node2 Ready <none> 2m v1.28.0
五、常见问题处理
- SSH 登录失败 :检查
clusterfile中的ssh.user/password/port是否正确,确保目标机器开启 SSH 且端口互通; - 镜像拉取失败 :确认
kubernetes.imageRepo配置为国内源(如阿里云),或检查机器网络能否访问外网; - 节点状态 NotReady :等待网络插件安装完成(calico/flannel 启动需要 1-2 分钟),或执行
kubectl get pods -n kube-system查看网络插件 Pod 是否正常运行。
六、集群卸载(如需重新部署)
如果需要清理指定机器的集群环境,执行:
bash
运行
# 卸载集群(-f 指定原clusterfile)
sealy delete -f clusterfile.yaml
总结
sealy apply -f clusterfile方式的核心是通过clusterfile.yaml的hosts段精准指定机器 IP 和角色,无需手动在每台机器执行命令;- 部署前需确保
clusterfile中的 SSH 配置能登录所有目标机器,这是部署成功的关键; - 部署过程全自动化,无需手动初始化 Master / 加入 Node,适合快速搭建指定机器的 K8s 集群。
如果你的机器需要用密钥登录 (而非密码),只需将 clusterfile 中的 password: "123456" 替换为 privateKey: "你的私钥内容" 即可;如果需要部署多 Master 高可用集群,只需在 hosts 中新增 master 节点并指定 role: [master]。