☰
CentOS 7部署Kubernetes集群的实践指南
2026/10/26 11:39:09 网站建设 项目流程

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/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config

安装必备工具链时,很多人会漏掉conntrack:

yum install -y conntrack-tools socat ebtables ipset

2.2 网络参数调优

编辑/etc/sysctl.d/k8s.conf:

net.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.cgroupdriver=systemd"], "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] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 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-cidr=10.244.0.0/16

初始化完成后常见的三个问题:

  1. cgroup驱动不匹配:检查docker和kubelet的cgroupdriver是否都为systemd
  2. 端口占用:8383、10250等端口被占用会导致apiserver启动失败
  3. 证书问题:时间不同步会导致证书验证失败,务必确保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 - --iface=eth0 # 明确指定主网卡

4. 节点扩容与运维要点

4.1 Worker节点加入

生成join命令时有个实用技巧:

kubeadm token create --print-join-command --ttl=2h

在worker节点执行时,建议先手动拉取镜像:

kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers

4.2 常见故障排查

查看组件状态:

journalctl -xeu kubelet -f # 实时日志 crictl ps -a # 容器状态

网络连通性检查:

# 在Pod内执行 ping <另一个PodIP> curl -I <Service ClusterIP>:<Port>

4.3 资源监控方案

简易方案:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

然后添加关键参数:

args: - --kubelet-insecure-tls - --kubelet-preferred-address-types=InternalIP

5. 生产环境加固建议

5.1 证书自动续期

修改kubeadm配置:

kubeadm alpha certs renew all

或者更推荐的方式:

apiVersion: kubeadm.k8s.io/v1beta2 kind: ClusterConfiguration controllerManager: extraArgs: feature-gates: RotateKubeletServerCertificate=true cluster-signing-duration: 87600h

5.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 <KEY>

5.3 存储方案选型

本地存储方案推荐:

yum install -y nfs-utils mkdir -p /data/k8s-storage

PV配置示例:

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_count=262144 fs.file-max=2097152

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询