Kubernetes学习路径——2. 集群环境搭建
Kubernetes 集群搭建实战从零到生产级高可用在云原生时代KubernetesK8s已成为容器编排的事实标准。本文将手把手教你使用kubeadm搭建一个安全、高性能的 K8s 集群并深入解析关键配置背后的原理。为什么选择 kubeadm✅官方推荐CNCF 认证的集群部署工具✅简化复杂度自动化证书管理、组件部署✅生产就绪支持高可用、网络插件集成一、环境规划与准备1. 集群拓扑角色IP主机名Master192.168.100.30masterWorker192.168.100.31node1Worker192.168.100.32node2架构选择单 Master适用于测试/开发环境多 MasterHA生产环境必备本文后续会扩展2. 系统初始化所有节点步骤 1配置主机名解析cat/etc/hostsEOF 192.168.100.30 master 192.168.100.31 node1 192.168.100.32 node2 EOF步骤 2禁用 SwapK8s 强制要求# 临时关闭swapoff-a# 永久关闭注释 fstab 中的 swap 行sed-i/swap/s/^/#//etc/fstab步骤 3加载内核模块# 启用网桥过滤cat/etc/sysctl.d/k8s.confEOF net.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 EOF# 应用配置sysctl--system步骤 4安装 IPVS高性能负载均衡# 安装依赖yuminstall-yipset ipvsadm# 加载 IPVS 模块cat/etc/sysconfig/modules/ipvs.modulesEOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 EOFchmod755/etc/sysconfig/modules/ipvs.modulesbash/etc/sysconfig/modules/ipvs.modules# 验证lsmod|grep-eip_vs-enf_conntrack_ipv4IPVS vs iptables特性iptablesIPVS性能O(n) 规则匹配O(1) 哈希查找算法仅随机轮询/加权/最少连接等适用场景小规模集群 (100 Service)大规模集群 (100 Service)→ 生产环境强烈推荐 IPVS二、安装 Docker 与 K8s 组件1. 安装 Docker所有节点# 配置阿里云源yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo# 安装指定版本避免兼容问题yuminstall-ydocker-ce-18.06.3.ce-3.el7# 配置 daemon.jsoncat/etc/docker/daemon.jsonEOF { exec-opts: [native.cgroupdriversystemd], registry-mirrors: [https://docker.mirrors.ustc.edu.cn] } EOF# 启动 Dockersystemctlenable--nowdocker⚠️关键配置native.cgroupdriversystemd确保 Docker 与 K8s 使用相同的 cgroup 驱动不要用最新版 DockerK8s 对 Docker 版本有严格兼容矩阵2. 安装 K8s 组件所有节点# 配置阿里云 K8s 溇cat/etc/yum.repos.d/kubernetes.repo/etc/sysconfig/kubeletEOF KUBELET_CGROUP_ARGS--cgroup-driversystemd KUBE_PROXY_MODEipvs EOF# 启动 kubelet此时会报错属正常现象systemctlenablekubelet三、初始化 Master 节点1. 执行 kubeadm initkubeadm init\--kubernetes-version1.18.0\--apiserver-advertise-address192.168.100.30\--service-cidr10.96.0.0/16\--pod-network-cidr10.245.0.0/16\--image-repositoryregistry.aliyuncs.com/google_containers参数详解--pod-network-cidr必须与后续网络插件 CIDR 一致--image-repository解决 gcr.io 镜像拉取失败问题不要省略版本号避免自动安装不兼容版本2. 配置 kubectlmkdir-p$HOME/.kubecp-i/etc/kubernetes/admin.conf$HOME/.kube/configchown$(id-u):$(id-g)$HOME/.kube/config3. 验证 Master 状态kubectl get nodes# 输出master NotReady master ...NotReady 是正常的缺少网络插件导致。四、加入 Worker 节点在 Master 初始化成功后会输出类似以下命令kubeadmjoin192.168.100.30:6443--token... --discovery-token-ca-cert-hash...在node1和node2上执行该命令。Token 管理Token 默认 24 小时过期重新生成kubeadm token create --print-join-command五、部署网络插件Flannel1. 准备镜像所有节点# 从离线包加载解决网络问题dockerloadflanneld-v0.13.1-rc2-amd64.docker2. 修改 Flannel 配置Master# 下载配置文件若网络不通直接提供文件wgethttps://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml# 关键修改# 1. 修改 Network CIDR 与 pod-network-cidr 一致# Network: 10.245.0.0/16# 2. 替换镜像地址若使用私有仓库# image: registry.local/flannel:v0.13.13. 应用配置kubectl apply-fkube-flannel.yml4. 验证网络状态# 检查 Pod 状态kubectl-nkube-system get pods-owide# 检查节点状态kubectl get nodes# 输出所有节点应为 Ready 状态Flannel 工作原理基于VXLAN Overlay 网络为每个节点分配唯一子网如 node1: 10.245.1.0/24Pod 跨节点通信通过封装/解封装实现六、功能测试1. 部署 Nginx# 创建 Deploymentkubectl create deployment nginx--imagenginx:1.14-alpine# 暴露服务NodePortkubectl expose deployment nginx--port80--typeNodePort# 查看服务kubectl get svc# 输出nginx NodePort 10.96.x.x 80:3XXXX/TCP2. 验证访问# 在任意节点访问curlhttp://任意节点IP:# 应返回 Nginx 欢迎页3. 验证跨节点通信# 进入 Nginx Podkubectlexec-it--sh# Ping 其他节点上的 Podping其他Pod的IP# 应能通七、生产环境增强1. 高可用 MasterHA方案3 Master 负载均衡器HAProxy/Keepalived关键配置kubeadm init --control-plane-endpointLOAD_BALANCER_DNS:LOAD_BALANCER_PORT...2. 安全加固启用 RBAC默认已开启网络策略部署 Calico 替代 Flannel支持 NetworkPolicy审计日志配置 kube-apiserver 审计策略3. 监控集成# 部署 Metrics Serverkubectl apply-fhttps://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml# 验证kubectltopnodes八、故障排查指南常见问题 1Master NotReady原因未安装网络插件解决部署 Flannel/Calico常见问题 2Worker 加入失败检查点# 1. Token 是否过期kubeadm token list# 2. 网络是否互通telnet master6443# 3. 防火墙是否放行firewall-cmd --list-ports|grep6443常见问题 3Pod 无法跨节点通信排查步骤# 1. 检查 Flannel Pod 状态kubectl-nkube-system get pods-lappflannel# 2. 检查路由表iproute show|grepflannel# 3. 检查 VXLAN 接口iplinkshow|grepflannel九、总结K8s 集群搭建 Checklist阶段关键动作验证命令系统初始化禁用 Swap、加载内核模块swapon --show,lsmod组件安装固定版本、配置 cgroup 驱动docker info | grep -i cgroupMaster 初始化正确设置 CIDR、镜像源kubeadm init --dry-run网络插件CIDR 一致、镜像可拉取kubectl get pods -n kube-system功能验证跨节点通信、服务暴露curl NodeIP:NodePort下一步行动将单 Master 升级为 HA 架构集成 Helm 管理应用生命周期部署 Prometheus Grafana 监控栈掌握 K8s 集群搭建你就拥有了构建云原生基础设施的核心能力。现在你的微服务应用终于有了一个强大而可靠的运行平台