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 容器集群。我们不仅覆盖了安装步骤,还着重进行了性能优化、资源调度、网络与存储插件实战,以及监控日志完整方案,适用于微服务部署的生产环境。