国内开发者实战指南CentOS 7.6环境下的Kubernetes 1.18.6集群部署全攻略当容器化技术成为现代应用部署的标准方案时Kubernetes作为容器编排领域的事实标准其重要性不言而喻。但对于国内开发者而言官方镜像拉取困难、网络环境不稳定等问题常常成为入门路上的绊脚石。本文将彻底解决这些问题带您完成一次顺畅的集群搭建体验。1. 环境准备与系统调优在CentOS 7.6上部署Kubernetes集群前系统环境的精心准备是成功的第一步。许多初学者容易忽视这个环节导致后续出现各种莫名奇妙的错误。硬件配置检查是首要工作每台机器至少2核CPU/2GB内存生产环境建议4核8G起步确保MAC地址和product_uuid唯一性ip link | grep link/ether cat /sys/class/dmi/id/product_uuid系统参数优化对集群稳定性至关重要。以下是我在多个生产环境中验证过的配置方案# 关闭防火墙和SELinux systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config # 关闭Swap并优化内存参数 swapoff -a sed -i / swap / s/^\(.*\)$/#\1/g /etc/fstab echo vm.swappiness0 /etc/sysctl.conf内核模块加载需要特别注意特别是使用IPVS模式时cat /etc/sysconfig/modules/ipvs.modules EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 modprobe -- br_netfilter EOF chmod 755 /etc/sysconfig/modules/ipvs.modules提示执行完上述命令后建议重启服务器使所有配置生效。我曾遇到过因未重启导致的内核参数未加载问题浪费了数小时排查时间。2. 容器运行时与Kubernetes组件安装Docker安装环节最常遇到镜像拉取失败的问题。采用阿里云镜像源可以极大提升成功率# 配置阿里云Docker CE源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 安装指定版本兼容性已验证 yum install -y docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io关键配置往往被官方文档一笔带过但实际非常重要// /etc/docker/daemon.json { registry-mirrors: [https://你的ID.mirror.aliyuncs.com], exec-opts: [native.cgroupdriversystemd], log-driver: json-file, storage-driver: overlay2 }Kubeadm安装同样需要替换国内源cat EOF /etc/yum.repos.d/kubernetes.repo [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled1 gpgcheck0 EOF yum install -y kubelet-1.18.6 kubeadm-1.18.6 kubectl-1.18.6 systemctl enable --now kubelet3. 镜像加速与离线部署方案官方镜像仓库k8s.gcr.io在国内几乎无法访问这是阻碍部署的最大障碍。经过多次实践我总结出三种可靠解决方案方案一阿里云镜像仓库替代# 镜像列表转换脚本 images( kube-apiserver:v1.18.6 kube-controller-manager:v1.18.6 kube-scheduler:v1.18.6 kube-proxy:v1.18.6 pause:3.2 etcd:3.4.3-0 coredns:1.6.7 ) for image in ${images[]}; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$image docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$image k8s.gcr.io/$image docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$image done方案二第三方镜像仓库docker pull kubeimage/kube-apiserver-amd64:v1.18.6 docker tag kubeimage/kube-apiserver-amd64:v1.18.6 k8s.gcr.io/kube-apiserver:v1.18.6方案三离线包部署适合完全无外网环境# 在可联网机器上打包镜像 docker save $(docker images | grep -v REPOSITORY | awk {print $1:$2}) -o k8s-1.18.6-images.tar # 在离线节点加载 docker load -i k8s-1.18.6-images.tar注意实际环境中我曾遇到coredns镜像版本不匹配导致DNS服务异常的情况。建议严格按照kubeadm config images list列出的版本号操作。4. 集群初始化与网络配置初始化命令需要根据实际网络规划调整参数kubeadm init \ --kubernetes-versionv1.18.6 \ --apiserver-advertise-address192.168.203.212 \ --pod-network-cidr10.244.0.0/16 \ --service-cidr10.1.0.0/16 \ --image-repositoryregistry.cn-hangzhou.aliyuncs.com/google_containers成功后会输出node加入命令形如kubeadm join 192.168.203.212:6443 --token xxxx --discovery-token-ca-cert-hash sha256:xxxx网络插件选择直接影响集群性能。以下是三种常见方案的对比方案性能配置复杂度适用场景Flannel中等简单中小型集群Calico高中等需要网络策略Weave Net中等简单快速POC环境推荐使用Calico并配置国内镜像源curl -O https://docs.projectcalico.org/v3.15/manifests/calico.yaml sed -i s#docker.io/calico/#registry.aliyuncs.com/google_containers/# calico.yaml kubectl apply -f calico.yamlIPVS模式启用能显著提升服务代理性能kubectl edit cm kube-proxy -n kube-system # 修改mode: ipvs kubectl delete pod -l k8s-appkube-proxy -n kube-system5. 运维增强与可视化监控Dashboard部署需要特别注意安全配置# 使用NodePort方式暴露服务 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p {spec:{type:NodePort}}权限配置是安全关键点。创建一个具有合适权限的ServiceAccountapiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kubernetes-dashboard --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: dashboard-admin roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: dashboard-admin namespace: kubernetes-dashboardMetrics Server是HPA和Dashboard监控数据的基础curl -O https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml sed -i /--metric-resolution/a\ \ \ \ \ \ - --kubelet-insecure-tls components.yaml kubectl apply -f components.yaml6. 常见问题排查指南在数百次部署经验中我整理出以下高频问题及解决方案节点NotReady状态检查网络插件Pod是否正常运行验证kubelet日志是否有证书相关错误确认节点间网络连通性尤其是6443端口Pod一直处于Pending状态kubectl describe pod pod-name | grep -A 10 Events kubectl get events --sort-by.metadata.creationTimestampDNS解析失败检查coredns Pod状态验证kube-dns服务Endpoint是否正确测试Pod内到kube-dns服务的网络连通性镜像拉取失败# 查看Pod事件 kubectl describe pod pod-name # 手动测试镜像拉取 docker pull image-name记得第一次部署时我因为没配置systemd作为cgroup驱动导致kubelet不断重启。现在每次部署都会双重检查这个配置docker info | grep -i cgroup cat /var/lib/kubelet/config.yaml | grep cgroup集群搭建只是Kubernetes之旅的第一步后续的资源调度、应用部署、监控告警等主题同样精彩。建议新手在掌握基础部署后立即尝试部署一个简单的Nginx服务体验完整的应用生命周期管理流程。