Kubernetes Linux 集群搭建实操指南
一 规划与准备
- 节点规模与硬件:建议至少3台 Linux 服务器(1 个 Master + 2 个 Worker),每台≥2GB 内存、2 核 CPU、20–30GB 存储,并确保节点间网络互通、可访问外网拉取镜像。操作系统推荐CentOS 7.x/8.x或Ubuntu 20.04+。
- 主机名与解析:为每台机器设置唯一主机名,并在所有节点的**/etc/hosts**中添加映射,便于通过主机名互通。
- 基础依赖:安装常用工具(如ipvsadm、iptables、conntrack、sysstat、libseccomp等),为后续 kube-proxy/ipvs 与系统调优做准备。
- 容器运行时:安装并启用Docker或containerd(下文以 Docker 为例,containerd 流程类似)。
二 系统初始化与内核参数
- 关闭 Swap:临时执行swapoff -a,并在**/etc/fstab**中注释 swap 行,避免 kubelet 启动失败。
- 关闭 SELinux:执行setenforce 0,并将**/etc/selinux/config中 SELINUX 设为disabled**。
- 防火墙策略:为简化入门,可临时停止并禁用 firewalld;生产环境请改为精细化放行(见文末“网络与安全”)。
- 内核网络参数:启用桥接流量经 iptables、开启转发,示例:
- net.bridge.bridge-nf-call-iptables = 1
- net.bridge.bridge-nf-call-ip6tables = 1
- net.ipv4.ip_forward = 1
写入**/etc/sysctl.d/kubernetes.conf后执行sysctl -p**。
- 可选优化:如vm.swappiness=0、文件句柄与连接跟踪等可按需调整。
三 安装容器运行时与 Kubernetes 组件
- 安装 Docker(CentOS 示例):
- 安装依赖与仓库:yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加 Docker CE 仓库并安装:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装并启动:yum install -y docker-ce docker-ce-cli containerd.io && systemctl enable --now docker
- 可选镜像加速:在**/etc/docker/daemon.json**中添加{“registry-mirrors”: [“https://mirrors.aliyuncs.com”]}并重启 Docker。
- 安装 kubeadm、kubelet、kubectl(CentOS 示例):
- 添加 Kubernetes YUM 源(可用国内镜像源):
cat </etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
- 安装并设为开机自启:yum install -y kubelet kubeadm kubectl && systemctl enable --now kubelet
- Ubuntu 路径:使用apt添加 Docker 与 Kubernetes 仓库,安装相同组件并启用 kubelet。
四 初始化控制平面与加入工作节点
- 初始化 Master:
- 命令示例:kubeadm init --apiserver-advertise-address=<Master_IP> --pod-network-cidr=10.244.0.0/16
- 国内镜像加速(可选):–image-repository=registry.aliyuncs.com/google_containers
- 初始化成功后按提示执行:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 加入 Worker:在 Master 输出或重新生成后,于各 Worker 执行:
- kubeadm join <Master_IP>:6443 --token --discovery-token-ca-cert-hash sha256:
- 验证:在 Master 执行kubectl get nodes,待所有节点状态为Ready。
五 部署网络插件与验证
- 部署网络插件(以 Calico 为例):
- kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- 如使用flannel,请按其官方清单设置对应的Pod CIDR(与 kubeadm init 的 --pod-network-cidr 保持一致)。
- 快速验证:
- 查看节点与系统 Pod:kubectl get nodes;kubectl get pods -A
- 部署测试应用:
kubectl create deployment nginx --image=nginx:1.25
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc nginx
- 常见问题速查:
- 节点 NotReady:多因CNI 未部署或Pod CIDR 不匹配,检查 Calico/Flannel 清单与 kubeadm init 参数。
- kubelet 启动失败:检查Swap 未关闭、cgroup driver 一致(常见为 systemd)、内核参数是否生效。
- 镜像拉取慢/失败:配置镜像加速或使用国内仓库镜像。
网络与安全要点
- 云上或公网环境:确保安全组/防火墙放行控制平面端口(如6443)、NodePort 范围(默认30000–32767)及节点间通信所需端口;必要时使用内网互通与负载均衡。
- 内网环境:若禁用 firewalld,需确保iptables 规则允许 kube-apiserver、kubelet、CNI 组件等必要通信;生产环境不建议完全无防火墙。
- 高可用与控制平面:生产可部署多 Master与kube-vip/Keepalived或云上LB,并考虑kubeadm 配置文件与证书管理。
- 容器运行时:如使用 containerd,需启用SystemdCgroup并与 kubelet 保持一致;镜像仓库与私有镜像需配置ImagePullSecrets。