Docker 部署:Docker Swarm 与 Kubernetes
1. 核心差异与选型判断
在容器编排领域,Swarm 与 Kubernetes 定位不同。使用下表对比 核心指标,快速确定方案。
| 评估维度 | Docker Swarm | Kubernetes |
|---|---|---|
| 学习成本 | 极低,原生集成 Docker CLI | 较高,概念繁多(Pod/Deployment/Service) |
| 部署复杂度 | 3 条命令完成集群搭建 | 需独立安装组件、配置网络与证书 |
| 资源调度 | 基础过滤与亲和性规则 | 高级调度算法,支持自定义策略 |
| 适用场景 | 中小型团队、单体或微服务少、追求上线速度 | 大型企业、高可用要求、云原生生态集成 |
根据业务规模选择 目标方案后,严格按后续步骤执行环境配置与部署。
2. 统一环境准备
两套方案均需基于干净的 Linux 环境操作。准备至少两台服务器(1 台主节点,1 台工作节点)。
- 更新 系统软件源并安装 基础工具。执行
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common(Ubuntu/Debian 系统)或对应系统的yum update命令(CentOS/RHEL 系统)。 - 配置 容器依赖内核参数。运行
sudo modprobe overlay与sudo modprobe br_netfilter加载 模块。 - 写入 网络转发配置。使用文本编辑器
sudo nano /etc/sysctl.d/99-kubernetes.conf创建 配置文件,粘贴以下两行:net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 - 应用 内核配置。执行
sudo sysctl --system生效 参数。 - 安装 标准 Docker 引擎。运行官方安装脚本
curl -fsSL https://get.docker.com | sudo sh,避免 手动下载版本冲突。 - 启动 并设置 开机自启。执行
sudo systemctl enable docker --now确保服务运行。
3. 部署 Docker Swarm
Swarm 模式已内置于 Docker 引擎中,无需额外安装软件包。按顺序完成节点互联与服务发布。
- 切换 至主节点终端。确认当前用户具备
sudo权限或位于docker用户组中。 - 初始化 Swarm 集群。执行命令
docker swarm init --advertise-addr <主节点内网IP>。将<主节点内网IP>替换 为服务器的实际局域网地址,例如192.168.1.100。 - 记录 返回的 Join 令牌。终端会打印一条
docker swarm join --token SWMTKN-... <IP>:2377命令。复制 该整行命令备用。 - 登录 工作节点终端。确保网络与主节点互通。
- 执行 刚才复制的 Join 命令。粘贴 并回车,终端返回
This node joined a swarm as a worker.表示成功。 - 验证 集群拓扑。回到主节点,运行
docker node ls查看 节点列表。LEADER状态显示主节点,READY显示工作节点。 - 创建 覆盖网络。执行
docker network create -d overlay app_net,构建 跨节点通信通道。 - 部署 测试服务。运行
docker service create --name web --replicas 2 --network app_net -p 8080:80 nginx:alpine拉起 两个副本的 Web 服务。 - 检查 服务状态。执行
docker service ls确认REPLICAS显示2/2。 - 访问 测试接口。在任意节点终端执行
curl http://localhost:8080,返回 HTML 页面即表示负载均衡生效。
4. 部署 Kubernetes
Kubernetes 采用声明式架构。以下步骤基于轻量级发行版 k3s 编写,该版本移除了非必要组件,保持与标准 Kubernetes API 完全兼容,大幅降低部署门槛。
- 下载 主节点安装脚本。在主节点终端执行
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik --write-kubeconfig-mode 644" sh -。该命令自动下载二进制文件并初始化控制平面。 - 等待 初始化完成。屏幕滚动日志停止后,运行
kubectl cluster-info验证 服务状态。输出Kubernetes control plane is running即为就绪。 - 获取 工作节点加入凭证。执行
sudo cat /var/lib/rancher/k3s/server/node-token读取 密钥。终端输出格式为K10...::server:...。 - 配置 工作节点环境变量。在工作节点终端执行
export K3S_URL=https://<主节点IP>:6443设定 控制平面地址,接着执行export K3S_TOKEN=<上一步获取的密钥>设定 认证信息。 - 安装 工作节点代理。运行
curl -sfL https://get.k3s.io | sh -。脚本根据环境变量自动拉取配置并加入集群。 - 验证 节点连通性。返回主节点,执行
sudo k3s kubectl get nodes。STATUS列显示Ready代表两台主机均已注册。 - 部署 基础应用。创建清单文件
sudo nano app.yaml,填入 以下 YAML 配置:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:alpine ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-svc spec: selector: app: nginx type: NodePort ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30080 - 应用 资源清单。执行
sudo k3s kubectl apply -f app.yaml提交 配置至集群。 - 监控 调度进度。运行
sudo k3s kubectl get pods -o wide观察 Pod 状态。STATUS变为Running且分布在至少两个节点上时,确认 调度完成。 - 验证 外部访问。执行
curl http://<任意节点IP>:30080。返回标准 Nginx 欢迎页面内容即证明 Service 端口映射与负载均衡功能正常。
5. 生产级配置建议
基础部署完成后,需按实际业务调整关键参数以保障稳定性。
- 调整 资源限制。为 Docker Swarm 的
docker service create命令追加--limit-memory 512m --limit-cpu 0.5参数,或为 Kubernetes YAML 添加resources: { requests: { cpu: "250m", memory: "128Mi" } }约束 容器上限。 - 配置 数据持久化。Swarm 使用
docker volume create data_vol创建 卷后挂载至服务。Kubernetes 需在 YAML 中定义PersistentVolumeClaim并在volumeMounts中关联目录,避免 容器重启导致数据丢失。 - 启用 自动伸缩。Kubernetes 执行
sudo k3s kubectl autoscale deployment nginx-deploy --min=2 --max=10 --cpu-percent=80开启 HPA。Swarm 需配合外部监控与自动化脚本实现动态扩缩容。 - 设置 健康检查。在 Docker 服务定义或 K8s Pod 规范中插入
livenessProbe与readinessProbe配置块,指定 探测路径/healthz与超时阈值timeoutSeconds: 3。 - 备份 集群状态。Swarm 的元数据存储在
/var/lib/docker/swarm/目录下,定期执行 目录压缩备份。Kubernetes 需定期运行etcdctl snapshot save导出 键值数据库,防止控制平面故障导致配置清空。
完成上述步骤后,集群已具备承载生产流量的基础能力。根据实际压测结果微调副本数与资源配额,确保系统响应时间维持在预期范围内。根据监控面板的 CPU 使用率曲线,若峰值持续超过 85% 超过五分钟,触发 扩容流程或优化代码逻辑。

暂无评论,快来抢沙发吧!