如何在CentOS 8上配置并优化Docker与Kubernetes结合的容器集群,提升微服务部署效率?

A5IDC从实战角度出发,深入讲解在 CentOS 8 环境下配置并优化 Docker 与 Kubernetes 容器集群的完整流程,兼顾参数配置、系统调优、网络与存储插件选择、性能评估、硬件配置建议等内容,帮助你构建高效、稳定、可观测的微服务部署平台。


一、环境准备与集群目标

1. 环境规划

角色 IP CPU 内存 存储 系统
Master-1 192.168.10.11 8 核 16 GB 500 GB NVMe CentOS 8.5
Worker-1 192.168.10.21 8 核 16 GB 500 GB NVMe CentOS 8.5
Worker-2 192.168.10.22 8 核 16 GB 500 GB NVMe CentOS 8.5
网络交换机 --- --- --- --- VLAN, LACP

目标集群规模 :1 个控制平面 + 2 个工作节点
容器运行时 :Docker CE 24.x / containerd
Kubernetes版本:v1.28.x

2. 服务器硬件www.a5idc.com与网络要求

  • CPU 虚拟化支持(VT-x / AMD‑V)
  • 至少 1 Gbps 网络连通性
  • 时间同步:Chrony
  • 必要端口开放
服务 端口
Kubernetes API 6443
etcd 2379-2380
Kubelet 10250
NodePort 30000-32767

二、基础系统配置

1. 关闭防火墙与SELinux

bash 复制代码
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
sudo setenforce 0

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 = 10

应用参数:

bash 复制代码
sudo sysctl --system

3. 安装 Chrony 时间同步

bash 复制代码
sudo dnf install -y chrony
sudo systemctl enable --now chrony
chronyc sources

三、Docker CE 与 containerd 安装与优化

Kubernetes 从 v1.24 起默认推荐 containerd,Docker 通过 dockerd-shim 提供兼容。本文采用 Docker CE 作为容器运行时,并调整 storage 与 cgroups。

1. 安装依赖与添加 Docker 仓库

bash 复制代码
sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2

2. 安装 Docker CE

bash 复制代码
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3. Docker 配置优化

编辑 /etc/docker/daemon.json

json 复制代码
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  },
  "storage-driver": "overlay2",
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

说明:

  • cgroupdriver=systemd:与 kubelet 保持一致,避免资源冲突
  • overlay2:高性能存储驱动
  • 日志限制:避免节点磁盘被容器日志耗尽

启动并验证:

bash 复制代码
sudo systemctl enable --now docker
docker info | grep -E "Cgroup|Storage"

四、Kubernetes 安装与初始化

1. 添加 Kubernetes 仓库

创建 /etc/yum.repos.d/kubernetes.repo

复制代码
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0

2. 安装 kubeadm, kubelet, kubectl

bash 复制代码
sudo dnf install -y kubelet-1.28.2 kubeadm-1.28.2 kubectl-1.28.2
sudo systemctl enable --now kubelet

3. 初始化控制平面

bash 复制代码
sudo kubeadm init \
  --apiserver-advertise-address=192.168.10.11 \
  --pod-network-cidr=192.168.0.0/16 \
  --control-plane-endpoint="k8s-cluster.local"

保存输出的 kubeadm join 命令,用于 Worker 加入。

设置 kubectl 访问:

bash 复制代码
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

五、网络插件与存储插件部署

1. Calico 网络插件

Calico 支持 BGP、Network Policy,是生产环境常用选择:

bash 复制代码
kubectl apply -f https://docs.projectcalico.org/v3.26/manifests/calico.yaml

2. 动态存储:Longhorn

bash 复制代码
kubectl create namespace longhorn-system
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.4.1/deploy/longhorn.yaml

六、Worker 节点加入集群

在每个 Worker 节点执行 kubeadm join 命令,例如:

bash 复制代码
sudo kubeadm join 192.168.10.11:6443 --token xxxxxx \
  --discovery-token-ca-cert-hash sha256:xxxxxxxx

验证节点状态:

bash 复制代码
kubectl get nodes -o wide

七、调度与资源优化

1. CPU / 内存调度策略

设置 QoS:

  • Guaranteed:Limits 与 Requests 相同
  • Burstable:Limits > Requests
  • BestEffort:未设置

推荐微服务设置:

yaml 复制代码
resources:
  requests:
    cpu: "250m"
    memory: "512Mi"
  limits:
    cpu: "500m"
    memory: "1Gi"

2. 节点亲和性与污点/容忍度

控制组件专用:

bash 复制代码
kubectl taint nodes master-1 node-role.kubernetes.io/master:NoSchedule

应用 workload 时设置 tolerations。


八、监控与日志方案

1. Prometheus + Grafana

部署方式:使用 kube-prometheus-stack

bash 复制代码
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install monitoring prometheus-community/kube-prometheus-stack

2. 集中日志:EFK

  • Elasticsearch:索引日志
  • Fluentd:收集容器日志
  • Kibana:可视化分析

九、性能评估与优化对比

1. 测试工具与指标

工具 指标
kubectl top nodes 节点资源利用率
kubectl top pods Pod CPU/Memory
wrk HTTP 请求性能
iperf3 网络带宽

2. 优化前后对比(示例)

项目 优化前 优化后
平均 API 响应延迟 120 ms 55 ms
Node 内存利用率 75% 60%
Pod 启动时间 4.2 s 2.8 s
网络吞吐(worker-worker) 850 Mbps 950 Mbps

说明:

  • 调整 cgroups 与 kubelet 参数显著提升调度效率
  • Calico 网络优化减少跨节点延迟

十、常见问题与解决方法

1. kubelet CrashLoop

检查 cgroupDriver 不匹配:

bash 复制代码
docker info | grep Cgroup
cat /var/lib/kubelet/config.yaml | grep cgroupDriver

确保两者均为 systemd

2. Pod 网络未就绪

检查 Calico CNI:

bash 复制代码
kubectl get pods -n kube-system | grep calico
kubectl logs -n kube-system <calico-pod>

十一、结语

通过A5IDC上述过程,你已经在 CentOS 8 系统上完成了一个高效、可监控、可扩展的 Kubernetes + Docker 容器集群。我们不仅覆盖了安装步骤,还着重进行了性能优化、资源调度、网络与存储插件实战,以及监控日志完整方案,适用于微服务部署的生产环境。

相关推荐
杨云龙UP1 天前
Linux LVM 在线扩容标准操作流程_20260102
linux·运维·服务器·centos·ux
可爱又迷人的反派角色“yang”1 天前
k8s(一)
linux·运维·网络·云原生·容器·kubernetes
可爱又迷人的反派角色“yang”1 天前
CICD持续集成Ruo-Yi项目
linux·运维·网络·ci/cd·docker·容器
星环处相逢1 天前
K8s 网络插件选型:Flannel vs Calico 深度对比
网络·容器·kubernetes
Zsr10231 天前
K8s网络方案深度解析:Flannel vs Calico 怎么选?
网络·容器·kubernetes·flannel·calico
白驹过隙^^1 天前
windows通过docker compose部署oktopus服务
linux·windows·tcp/ip·docker·容器·开源
凯子坚持 c1 天前
0基础如何搭建个人博客?GMSSH可视化运维工具配合WordPress部署全流程教学
运维·docker·gmssh
kabcko1 天前
CentOS安装Mysql
mysql·adb·centos
m0_485614671 天前
K8s基础与安装
云原生·容器·kubernetes