第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 |
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 <
3.2.2 K8s集群部署(kubeadm方式)
部署K8s,我推荐用kubeadm。它帮你把最复杂的证书、组件配置都自动化了。
核心步骤就三步:
- 安装kubeadm、kubelet、kubectl
- 初始化Master节点
- 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
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
ansible-playbook --syntax-check 检查语法。YAML对缩进敏感,少个空格都可能报错。
3.4 本章知识体系
下面这张图,是我梳理的本章核心逻辑。你看一遍,心里就有谱了。
3.5 避坑指南
最后,分享几个我亲身踩过的坑,你遇到了能少走弯路:
- Swap必须关——K8s要求所有节点关闭Swap。我刚开始忘了关,kubelet一直报错,查了半天才发现。
- 内核参数要调——特别是net.bridge.bridge-nf-call-iptables,不设为1,Pod网络会出问题。
- 镜像版本要锁定——别用latest标签。生产环境里,镜像版本一变,集群可能就崩了。
- 环境准备是基础,别图快
- Docker + K8s是黄金组合,但要注意版本兼容
- Ansible能帮你从「手动运维」升级到「自动化运维」
好了,这一章的内容就到这儿。你把这些练熟了,集群部署这块就算入门了。下一章,咱们聊聊集群监控和日志管理——那又是另一片天地。