资讯动态

CentOS 7部署Kubernetes集群的实践指南

发布时间:2026/10/26 11:39:19 来源:尧图企业网站定制
1. 为什么选择CentOS 7作为K8S基础环境在容器编排领域CentOS 7至今仍是许多企业级部署的首选系统。这主要源于其长期支持周期维护到2024年6月和出色的稳定性。与Ubuntu等发行版相比CentOS 7的保守软件包策略虽然导致内置工具版本较低比如默认的Docker 1.13需要升级但这也意味着更少的兼容性问题。我在生产环境中最常遇到的是内核版本问题。CentOS 7默认的3.10内核虽然能运行K8S但建议至少升级到4.x系列以获得完整的cgroup v2支持。这里有个经验公式当你的节点需要运行超过50个Pod时新内核的内存管理效率会显著提升。重要提示如果计划使用Containerd作为运行时必须确认内核已启用overlay2和br_netfilter模块。运行lsmod | grep -E overlay|br_netfilter检查缺失时需要手动加载。2. 环境准备不可忽视的系统配置2.1 基础依赖安装首先禁用SELinux生产环境请谨慎评估setenforce 0 sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config安装必备工具链时很多人会漏掉conntrackyum install -y conntrack-tools socat ebtables ipset2.2 网络参数调优编辑/etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-ip6tables 1 net.bridge.bridge-nf-call-iptables 1 net.ipv4.ip_forward 1 vm.swappiness 0加载配置时有个坑必须确保br_netfilter模块已加载否则bridge-nf相关参数会报错。建议在rc.local中加入modprobe br_netfilter。2.3 容器运行时选择虽然Docker已不再是K8S默认推荐但在CentOS 7上它仍是安装最简便的选择。建议使用官方仓库安装19.03版本yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce-19.03.15 docker-ce-cli-19.03.15配置关键参数{ exec-opts: [native.cgroupdriversystemd], log-driver: json-file, log-opts: { max-size: 100m }, storage-driver: overlay2 }3. Kubeadm部署实战3.1 安装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.20.15 kubeadm-1.20.15 kubectl-1.20.15这里特别说明版本选择1.20.x是CentOS 7上经过充分验证的稳定版本。新版本可能需要更高版本的glibc支持。3.2 初始化控制平面关键初始化命令kubeadm init \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.20.15 \ --pod-network-cidr10.244.0.0/16初始化完成后常见的三个问题cgroup驱动不匹配检查docker和kubelet的cgroupdriver是否都为systemd端口占用8383、10250等端口被占用会导致apiserver启动失败证书问题时间不同步会导致证书验证失败务必确保NTP服务正常运行3.3 网络插件部署Flannel是最易上手的方案kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml但在实际使用中发现如果节点有多个网卡需要修改flannel的daemonset配置containers: - args: - --ip-masq - --kube-subnet-mgr - --ifaceeth0 # 明确指定主网卡4. 节点扩容与运维要点4.1 Worker节点加入生成join命令时有个实用技巧kubeadm token create --print-join-command --ttl2h在worker节点执行时建议先手动拉取镜像kubeadm config images pull --image-repositoryregistry.aliyuncs.com/google_containers4.2 常见故障排查查看组件状态journalctl -xeu kubelet -f # 实时日志 crictl ps -a # 容器状态网络连通性检查# 在Pod内执行 ping 另一个PodIP curl -I Service ClusterIP:Port4.3 资源监控方案简易方案kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml然后添加关键参数args: - --kubelet-insecure-tls - --kubelet-preferred-address-typesInternalIP5. 生产环境加固建议5.1 证书自动续期修改kubeadm配置kubeadm alpha certs renew all或者更推荐的方式apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration controllerManager: extraArgs: feature-gates: RotateKubeletServerCertificatetrue cluster-signing-duration: 87600h5.2 关键组件高可用对于控制平面建议至少三个master节点kubeadm init --control-plane-endpoint LOAD_BALANCER_DNS:LOAD_BALANCER_PORT --upload-certs其他节点加入时使用kubeadm join LB:PORT --token TOKEN \ --discovery-token-ca-cert-hash HASH \ --control-plane --certificate-key KEY5.3 存储方案选型本地存储方案推荐yum install -y nfs-utils mkdir -p /data/k8s-storagePV配置示例apiVersion: v1 kind: PersistentVolume metadata: name: local-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: local-storage local: path: /data/k8s-storage nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - node1我在实际部署中发现CentOS 7的默认文件描述符限制1024会导致高负载场景下etcd报错建议修改echo * soft nofile 65535 /etc/security/limits.conf echo * hard nofile 65535 /etc/security/limits.conf对于需要运行Java应用的场景还需要特别注意内核参数的调整vm.max_map_count262144 fs.file-max2097152

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑