第3章:集群部署实战:环境准备、容器化部署(Docker/K8s)、配置管理工具(Ansible)入门

说实话,很多人在集群部署上栽跟头,不是因为技术多难,而是环境准备没做好。我见过太多人一上来就装K8s,结果网络不通、证书过期、镜像拉不下来……折腾两天,心态崩了。

这一章,咱们就踏踏实实把地基打牢。我会把我在生产环境里踩过的坑、总结的经验,一股脑儿倒给你。

3.1 环境准备:别小看这一步

环境准备,说白了就是给你的集群找个「家」。这个家要是没搭好,后面所有工作都是白费。

3.1.1 硬件与操作系统选型

我个人习惯,生产环境首选CentOS 7.9或Ubuntu 20.04 LTS。为什么?稳定,社区活跃,踩坑了有人帮你。

角色 CPU 内存 磁盘 数量
Master节点 4核 8G 100G SSD 3(高可用)
Worker节点 8核 16G 200G SSD ≥3
存储节点 4核 8G 1T HDD ≥2
⚠️ 注意: 千万别用虚拟机跑生产集群!我曾经有个客户,用VMware开了6台虚拟机搭K8s,结果网络性能差到令人发指。物理机或云主机才是正道。

3.1.2 网络与基础服务配置

集群节点之间,网络必须互通。我建议把所有节点放在同一个二层网络里,延迟最低。

基础服务方面,这几样是必须的:

  • NTP时间同步——集群里时间不一致,证书验证会出问题。我遇到过K8s组件因为时间差3秒,直接罢工。
  • DNS解析——内部DNS或者直接改/etc/hosts。别偷懒,后面你会感谢我的。
  • SSH免密登录——Ansible部署时,这是刚需。
# 时间同步(所有节点执行)
yum install -y chrony
systemctl enable chronyd --now
chronyc sources -v

# 配置hosts(所有节点)
cat >> /etc/hosts <

3.2 容器化部署:Docker与K8s的「相爱相杀」

容器化部署,现在基本就是Docker + K8s的组合。但这里有个坑——Docker和K8s的关系,很多人搞混了。

Docker是容器运行时,负责把应用「打包」成镜像、跑起来。K8s是容器编排平台,负责管理这些容器怎么分布、怎么伸缩、怎么通信。

你想想看,Docker就像一个个独立的集装箱,K8s就是那个港口调度系统。

3.2.1 Docker安装与配置

安装Docker,我推荐用官方脚本,省心。

# 安装Docker
curl -fsSL https://get.docker.com | bash -s docker

# 配置镜像加速(国内必备)
cat > /etc/docker/daemon.json <
💡 小技巧: cgroupdriver一定要用systemd,不然K8s会报警告。我刚开始用cgroupfs,结果K8s 1.24版本直接不给启动,折腾了一下午。

3.2.2 K8s集群部署(kubeadm方式)

部署K8s,我推荐用kubeadm。它帮你把最复杂的证书、组件配置都自动化了。

核心步骤就三步:

  1. 安装kubeadm、kubelet、kubectl
  2. 初始化Master节点
  3. Worker节点加入集群
# 1. 安装K8s组件(所有节点)
cat < /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.28.0 kubeadm-1.28.0 kubectl-1.28.0
systemctl enable kubelet --now

# 2. 初始化Master(仅在master01执行)
kubeadm init \
  --apiserver-advertise-address=192.168.1.10 \
  --pod-network-cidr=10.244.0.0/16 \
  --service-cidr=10.96.0.0/12

# 3. 配置kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

# 4. 安装网络插件(Calico)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
⚠️ 注意: pod-network-cidr不能和宿主机网段冲突。我见过有人设成192.168.0.0/16,结果和公司内网冲突,所有Pod都连不上数据库。

3.3 配置管理工具:Ansible入门

集群节点多了,手动配置就是噩梦。你想想看,10台机器,每台都要装Docker、配镜像加速、改内核参数……手动搞一遍,手都酸了。

Ansible就是来解决这个问题的。它不需要在客户端装agent,只要控制节点有Python就行。

3.3.1 Ansible安装与基础配置

# 控制节点安装Ansible
yum install -y epel-release
yum install -y ansible

# 配置主机清单
cat > /etc/ansible/hosts <

3.3.2 第一个Playbook:批量部署Docker

写Playbook,说白了就是把你要执行的命令,用YAML格式组织起来。Ansible会帮你推到所有目标机器上执行。

---
- name: 部署Docker环境
  hosts: all
  tasks:
    - name: 安装依赖包
      yum:
        name:
          - yum-utils
          - device-mapper-persistent-data
          - lvm2
        state: present

    - name: 添加Docker仓库
      yum_repository:
        name: docker-ce
        description: Docker CE Repository
        baseurl: https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/
        gpgcheck: no

    - name: 安装Docker
      yum:
        name: docker-ce
        state: present

    - name: 配置daemon.json
      copy:
        dest: /etc/docker/daemon.json
        content: |
          {
            "registry-mirrors": ["https://你的加速地址.mirror.aliyuncs.com"],
            "exec-opts": ["native.cgroupdriver=systemd"]
          }

    - name: 启动Docker
      systemd:
        name: docker
        state: started
        enabled: yes
💡 小技巧: 第一次写Playbook,建议用 ansible-playbook --syntax-check 检查语法。YAML对缩进敏感,少个空格都可能报错。

3.4 本章知识体系

下面这张图,是我梳理的本章核心逻辑。你看一遍,心里就有谱了。

集群部署实战知识体系 环境准备 硬件选型 操作系统配置 网络基础服务 容器化部署 配置管理工具 Docker安装 K8s部署 Ansible安装 Playbook编写 从环境准备 → 容器化部署 → 配置管理,层层递进

3.5 避坑指南

最后,分享几个我亲身踩过的坑,你遇到了能少走弯路:

  • Swap必须关——K8s要求所有节点关闭Swap。我刚开始忘了关,kubelet一直报错,查了半天才发现。
  • 内核参数要调——特别是net.bridge.bridge-nf-call-iptables,不设为1,Pod网络会出问题。
  • 镜像版本要锁定——别用latest标签。生产环境里,镜像版本一变,集群可能就崩了。
📌 核心要点:
  • 环境准备是基础,别图快
  • Docker + K8s是黄金组合,但要注意版本兼容
  • Ansible能帮你从「手动运维」升级到「自动化运维」

好了,这一章的内容就到这儿。你把这些练熟了,集群部署这块就算入门了。下一章,咱们聊聊集群监控和日志管理——那又是另一片天地。

可可精品资料库