容器编排:K8s 集群部署(kubeadm / kops)、节点管理全解读
容器已经成为现代应用的"标配",而 Kubernetes 则是容器编排领域的事实标准。无论你是想在公司落地 K8s,还是想自己折腾一个练手的集群,理解 如何部署集群 、如何管理节点,都是迈向云原生的第一步。
这篇文章,星哥就来带你把 Kubernetes 的集群部署方式(kubeadm / kops)和节点管理流程梳理得清清楚楚。
一、部署 Kubernetes:为什么有 kubeadm 和 kops 两种方式?
K8s 本身是"去中心化"的控制系统,但它的安装方式却有很多种。常见的两种是:
- kubeadm:官方推荐的标准部署工具(适合裸机、虚拟机、自建服务器)
- kops:Kubernetes Operations(适合在云上快速创建集群)
一句话总结就是:
kubeadm 更像"手工搭建",kops 更像"一键托管"。
下面分别展开细说。
二、kubeadm:最常见的 K8s 自建方式
kubeadm 是 Kubernetes 官方提供的部署工具,被定位为"启动最小可用集群的基础工具"。
✔ kubeadm 的特点
- 官方标准、文档齐全
- 灵活度高,可用于物理机和虚拟机
- 适合本地实验、小公司环境、中小规模生产集群
- 可搭配 Containerd / Docker / CRI-O
✔ kubeadm 适用场景
- 你有几台服务器,想部署自己的 K8s
- 本地 VMware / Proxmox / VirtualBox 练手
- 公司内部自建集群(非云厂商)
✔ kubeadm 部署流程(简版)
1. 安装基础环境(关闭 swap / 配置 iptables / 开启内核模块)
bash
swapoff -a
modprobe br_netfilter
sysctl -w net.bridge.bridge-nf-call-iptables=1
2. 安装 Containerd(推荐)
bash
apt install containerd.io
3. 安装 kubeadm / kubelet / kubectl
bash
apt install kubeadm kubelet kubectl
4. 初始化 Master 节点
bash
kubeadm init --pod-network-cidr=10.244.0.0/16
5. 配置 kubectl 权限
bash
mkdir -p ~/.kube
cp /etc/kubernetes/admin.conf ~/.kube/config
6. 部署 CNI 插件(例如 Flannel)
bash
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
7. Worker 节点加入集群
bash
kubeadm join x.x.x.x:6443 --token xxxx --discovery-token-ca-cert-hash sha256:xxxx
到这里,一个自建 Kubernetes 集群就准备完毕。
三、kops:云端快速创建 K8s 集群的利器
kops 全称 Kubernetes Operations,是一款"集群自动化运维工具"。
一句话描述:
kops = 云上版 kubeadm + Terraform + 自动运维
kops 主要支持:
- AWS(最成熟)
- GCE
- DigitalOcean
- OpenStack(部分)
- 本地 KVM(需要额外插件)
✔ kops 的优势
- 真正做到"一条命令创建可用的 HA K8s 集群"
- 配置、网络、证书、DNS 全自动化
- 支持自动扩容、滚动升级
- 天然契合云平台资源(VPC、Load Balancer、Auto Scaling)
✔ 典型使用场景
- 在 AWS 部署企业生产级 Kubernetes 集群
- 快速创建测试环境 / CI 集群
- 希望集群部署"开箱即用",不用自己调配置
✔ kops 部署流程(简版)
1. 创建 S3 bucket(用于存储 Kops 状态)
bash
aws s3api create-bucket --bucket my-kops-state --region ap-southeast-1
2. 创建集群配置
bash
kops create cluster \
--name=k8s.xgcloud.com \
--state=s3://my-kops-state \
--zones=ap-southeast-1a \
--node-count=3 --node-size=t3.large --master-size=t3.large
3. 一键部署
bash
kops update cluster k8s.xgcloud.com --yes
4. 验证
bash
kubectl get nodes
是不是感觉云端的 K8s 搭建瞬间简单好多?
四、节点管理:K8s 运维的核心环节
无论你用 kubeadm 还是 kops,最终都要面对一个核心主题:
节点(Node)的生命周期管理
下面说说最关键的节点运维操作。
1. 查看节点状态
bash
kubectl get nodes -o wide
可以看到:
- 节点是否 Ready
- 内核版本
- 运行时 Containerd、Docker 版本
- Pod 分布、网络情况
2. 节点扩容(加入新 Worker)
kubeadm:
bash
kubeadm token create --print-join-command
再在新节点执行打印出来的 join 命令即可。
kops:
bash
kops edit ig nodes
kops update cluster --yes
即可自动扩容。
3. 节点维护(Drain)
当节点需要维护、升级、重启时,要先把 Pod 驱逐:
bash
kubectl drain node01 --ignore-daemonsets --delete-emptydir-data
然后维护完成后重新加入:
bash
kubectl uncordon node01
4. 节点删除
kubeadm:
bash
kubectl delete node node01
kubeadm reset
kops:
bash
kops delete ig nodes --yes
5. 节点升级
kubeadm 集群
升级 Master:
bash
kubeadm upgrade apply v1.30.0
升级 Worker:
bash
kubeadm upgrade node
kops 集群
bash
kops upgrade cluster
kops update cluster --yes
kops rolling-update cluster --yes
五、kubeadm vs kops:怎么选?
| 特性 | kubeadm | kops |
|---|---|---|
| 适合环境 | 裸机 / 自建 | 云上 |
| 部署复杂度 | 中等(需手动配置) | 简单(一键) |
| 运维自动化 | 一般 | 高 |
| 适合规模 | 小到中等 | 中到大型 |
| 学习门槛 | 较高 | 较低 |
| 可控性 | 很强 | 中等 |
星哥一句话总结:
想深入理解 K8s 架构,用 kubeadm;想快速跑起来集群,用 kops。
企业要生产级 Kubernetes,优先考虑托管服务(如 ACK/EKS/GKE),其次是 kops。