kubeadm 号称一键安装部署,很多人试过都顺利成功,但实际落地时往往因为系统环境差异踩不少坑。它的优势在于自动配置必要服务,默认启用安全认证,etcd、apiserver、controller-manager、scheduler、kube-proxy 等组件都以 Pod 形式运行,便于状态检测与迁移。不过目前它仍定位在 Beta 版,且缺乏原生高可用模式,生产环境需谨慎评估。
准备工作
首先清理系统干扰项。关闭 SELinux 和防火墙,避免网络策略冲突:
# 修改 SELinux 配置
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
# 停止并禁用防火墙
systemctl disable firewalld
systemctl stop firewalld
systemctl disable iptables
systemctl stop iptables
设置主机名并配置 hosts 解析,确保节点间能互相识别:
hostnamectl set-hostname k8s-1
# 编辑 /etc/hosts,添加所有节点 IP 映射
# 192.168.0.105 k8s-1
# 192.168.0.106 k8s-2
# 192.168.0.107 k8s-3
将网络配置为静态 IP 并重启网络服务。接着安装 Docker 及 K8s 基础组件。
安装 Docker 与 K8s 组件
使用 yum 源安装 Docker:
yum install docker
systemctl enable docker
systemctl start docker
验证版本无误后,配置 Kubernetes 的 yum 源(以阿里云为例):
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF
安装 kubelet、kubectl、kubeadm 等核心包:
yum install kubectl kubelet kubeadm
sysctl net.bridge.bridge-nf-call-iptables=1
注意修改 kubelet 启动配置,确保 cgroup-driver 与 Docker 一致:
vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
# 确保 Environment 中包含 --cgroup-driver=cgroupfs
最后启动服务:
systemctl enable kubelet
systemctl start kubelet
镜像准备
国内访问 gcr.io 受限,需提前拉取所需镜像并重命名。可通过 kubeadm init 中断运行查看所需镜像列表,或参考官方文档。这里提供自动化脚本批量处理:
images=(etcd-amd64:3.0.17 pause-amd64:3.0 kube-proxy-amd64:v1.7.2 \
kube-scheduler-amd64:v1.7.2 kube-controller-manager-amd64:v1.7.2 \
kube-apiserver-amd64:v1.7.2 kubernetes-dashboard-amd64:v1.6.1 \
k8s-dns-sidecar-amd64:1.14.4 k8s-dns-kube-dns-amd64:1.14.4 \
k8s-dns-dnsmasq-nanny-amd64:1.14.4)
imageName ;
docker pull cloudnil/
docker tag cloudnil/ gcr.io/google_containers/
docker rmi cloudnil/


