CentOS上Kubernetes的容器编排技巧
导读:CentOS 上 Kubernetes 容器编排实用技巧 一 环境准备与内核优化 基础要求:建议至少准备3台服务器(1个 Master + 2个 Node),每台至少2 CPU、2GB 内存、30GB 磁盘,并确保节点间网络互通与外网访问...
CentOS 上 Kubernetes 容器编排实用技巧
一 环境准备与内核优化
- 基础要求:建议至少准备3台服务器(1个 Master + 2个 Node),每台至少2 CPU、2GB 内存、30GB 磁盘,并确保节点间网络互通与外网访问(拉取镜像、节点注册)。
- 系统初始化:
- 关闭 SELinux:
sudo setenforce 0并修改/etc/selinux/config为SELINUX=disabled。 - 关闭 Swap:
sudo swapoff -a并在/etc/fstab注释 swap 行。 - 可选:关闭 firewalld 或按需放行端口(生产环境建议精细放行)。
- 时间同步:安装并启用 chrony 或 ntp,保证节点时间一致。
- 关闭 SELinux:
- 内核与网络参数:
- 启用桥接转发:
sudo modprobe br_netfilter - 开启桥接到 iptables:
echo '1' | sudo tee /proc/sys/net/bridge/bridge-nf-call-iptables与...ip6tables - 开启转发:
echo 'net.ipv4.ip_forward=1' | sudo tee -a /etc/sysctl.d/k8s.conf - 应用:
sudo sysctl --system
- 启用桥接转发:
- 容器运行时(推荐 Containerd):
- 安装:
sudo yum install -y yum-utils & & sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo & & sudo yum install -y containerd.io - 配置:
sudo mkdir -p /etc/containerd & & containerd config default | sudo tee /etc/containerd/config.toml - 修改
SystemdCgroup = true并重启:sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml & & sudo systemctl enable --now containerd
- 安装:
- 安装 kubeadm/kubelet/kubectl:
- 添加仓库(国内可用镜像源):
cat < < EOF | sudo tee /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
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
- 安装与开机:
sudo yum install -y kubelet kubeadm kubectl & & sudo systemctl enable --now kubelet
以上步骤覆盖系统、内核、容器运行时与组件安装的关键环节,是后续编排稳定运行的底座。
- 添加仓库(国内可用镜像源):
二 集群初始化与网络插件
- 初始化控制平面:
- 选择 Pod 网段(与所选 CNI 匹配),如 Flannel 常用 10.244.0.0/16:
sudo kubeadm init --apiserver-advertise-address < MASTER_IP> --pod-network-cidr=10.244.0.0/16
- 配置 kubectl:
mkdir -p $HOME/.kube & & sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config & & sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 选择 Pod 网段(与所选 CNI 匹配),如 Flannel 常用 10.244.0.0/16:
- 安装 CNI 网络插件(二选一):
- Flannel:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml - Calico:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- Flannel:
- 加入工作节点:
- 在 Master 获取加入命令:
kubeadm token create --print-join-command - 在 Node 执行:
sudo kubeadm join < MASTER_IP> :6443 --token < TOKEN> --discovery-token-ca-cert-hash sha256:< HASH>
- 在 Master 获取加入命令:
- 验证:
kubectl get nodes与kubectl get pods -A,确保 Ready 与 Running。
以上流程覆盖初始化、网络与节点加入的高频操作,适合快速落地与验证。
三 编排常用操作与自动化
- 快速部署应用(以 Nginx 为例):
- Deployment:
kubectl create deployment nginx --image=nginx:latest --replicas=3
- Service(NodePort):
kubectl expose deployment nginx --port=80 --type=NodePort
- Deployment:
- 配置与密钥管理:
- ConfigMap:
kubectl create configmap myapp-config --from-literal=key=value - Secret:
kubectl create secret generic db-secret --from-literal=password=xxx
- ConfigMap:
- 自动扩缩容(HPA):
- 指标准备:为 Deployment 添加资源请求(如
resources.requests.cpu)。 - 创建 HPA:
kubectl autoscale deployment nginx --cpu-percent=50 --min=1 --max=10
- 指标准备:为 Deployment 添加资源请求(如
- 滚动升级与回滚:
- 升级镜像:
kubectl set image deployment/nginx nginx=nginx:1.25 - 查看与回滚:
kubectl rollout status deployment/nginx与kubectl rollout undo deployment/nginx
- 升级镜像:
- 健康检查与自愈:
- 在容器 spec 中配置 livenessProbe/readinessProbe,提升故障自愈与流量切换效率。
以上操作覆盖日常编排的高频动作,适合在无状态服务与通用中间件场景中快速复用。
- 在容器 spec 中配置 livenessProbe/readinessProbe,提升故障自愈与流量切换效率。
四 高可用与访问控制
- 控制平面高可用(推荐 Keepalived + Nginx Ingress 或 HAProxy):
- 在 3台 Master 上部署 Keepalived 生成 VIP,并部署 Nginx 反向代理到各 Master 的 6443;初始化与 kubeconfig 均指向 VIP。
- 任一 Master 故障时,VIP 漂移到健康节点,Nginx 自动剔除异常后端,实现 APIServer 无感切换。
- 外部访问与权限:
- 若外部工具通过负载均衡器访问 API,需为其创建 ServiceAccount + RBAC ClusterRoleBinding(如授予 cluster-admin)以进行只读或管理操作。
- 生产建议:
- 结合 Pod 反亲和 与 污点/容忍 将系统组件与工作负载隔离;为关键业务配置 拓扑分散 与 就绪/存活探针。
该方案已在多 Master 场景中广泛验证,具备简洁、可靠、可维护的优势。
- 结合 Pod 反亲和 与 污点/容忍 将系统组件与工作负载隔离;为关键业务配置 拓扑分散 与 就绪/存活探针。
五 排错与性能优化清单
- 快速诊断:
- 节点与系统:
kubectl get nodes -o wide、kubectl describe node < node>、journalctl -u kubelet -xe - Pod 与事件:
kubectl get pods -A -o wide、kubectl describe pod < pod> -n < ns>、kubectl logs < pod> -n < ns>
- 节点与系统:
- 常见根因:
- CNI 未就绪(Pod 一直 Pending)→ 检查
kube-flannel.yml/calico.yaml是否成功、Pod 网段是否冲突。 - kubelet 未就绪 → 确认 Containerd 运行、
SystemdCgroup=true、镜像拉取无阻塞。 - 节点 NotReady → 检查内核参数、网络转发、时间同步与防火墙策略。
- CNI 未就绪(Pod 一直 Pending)→ 检查
- 性能与安全优化:
- 内核与网络:合理提升 文件描述符限制、网络缓冲区,开启 ip_forward 与桥接转发。
- 安全:启用 RBAC、Pod Security、NetworkPolicy,最小化容器权限与镜像来源。
- 可观测性:部署 metrics-server 与 kube-state-metrics,为 HPA 与告警提供数据。
以上清单覆盖从节点到 Pod 的排查路径与常见优化点,有助于缩短 MTTR 并提升稳定性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS上Kubernetes的容器编排技巧
本文地址: https://pptw.com/jishu/754305.html
