K8s 四种部署方式总结
一、kubeadm
原理:kubeadm 只是部署工具,不提供二进制,把控制平面各组件以容器镜像方式运行,自动生成 SSL 证书、初始化 etcd,master 节点执行kubeadm init初始化控制平面,worker 节点执行kubeadm join加入集群,不会安装 CNI 网络插件,需要手动部署,支持单 Master 和多 Master 高可用。
适用:企业自建私有 K8s、CKA 实验环境;缺点:离线部署镜像处理麻烦,深度定制能力有限。
# 控制平面初始化
kubeadm init --apiserver-advertise-address=192.168.10.10 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16
# 配置kubectl认证
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# work节点加入集群(输出的join命令)
kubeadm join 192.168.10.10:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxx
# 部署网络插件calico
kubectl apply -f calico.yaml
二、二进制部署
原理:手动下载 etcd、kube‑apiserver、kube‑controller‑manager、kube‑scheduler、kubelet、kube‑proxy 二进制程序,手动签发全套 SSL 证书,手写 systemd 服务单元文件,组件直接以宿主机进程运行,不封装容器,etcd 集群手动搭建,所有参数完全可控。
适用:学习 K8s 底层原理、安全合规严格私有化环境;缺点:步骤繁琐,证书维护、版本升级成本高,极易出错。
[Unit]
Description=kube-apiserver
After=network.target
[Service]
ExecStart=/opt/k8s/bin/kube-apiserver \
--etcd-servers=https://192.168.10.10:2379 \
--etcd-ca-cert=/opt/k8s/ca.pem \
--client-ca-file=/opt/k8s/ca.pem
Restart=on-failure
[Install]
WantedBy=multi-user.target
三、kubespray(Ansible 自动化部署)
原理:基于 Ansible 剧本做批量自动化,底层依然调用 kubeadm 实现集群安装。Ansible 批量预处理服务器:关闭 swap、时间同步、加载内核模块、安装 containerd,自动处理证书、高可用、CNI、节点扩容缩容。
适用:大规模多节点集群批量交付;缺点:依赖 Ansible,配置项多,需要熟悉 inventory 清单
[all]
k8s-master01 ansible_host=192.168.10.10
k8s-node01 ansible_host=192.168.10.11
k8s-node02 ansible_host=192.168.10.12
[kube_control_plane]
k8s-master01
[kube_node]
k8s-node01
k8s-node02
四、托管 K8s
原理:云厂商完全托管控制平面(Master 节点用户不可见),etcd、apiserver、controller‑manager、scheduler 全部由云侧维护,自动高可用、备份、版本升级;用户仅管理 Worker 业务节点,只需要拿到 kubeconfig 即可访问集群,没有集群初始化部署命令。
适用:公有云业务快速上线,不想维护 master 组件;缺点:底层无法深度定制,会产生服务费用。
四种部署方式通用业务yaml
# 四种部署方式通用业务yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-demo
spec:
replicas: 2
selector:
matchLabels:
app: web-demo
template:
metadata:
labels:
app: web-demo
spec:
containers:
- name: web
image: nginx:latest
ports:
- containerPort: 80
更多推荐

所有评论(0)