文章目录

Docker 部署:Docker Swarm 与 Kubernetes

发布于 2026-04-07 01:21:24 · 浏览 14 次 · 评论 0 条

Docker 部署:Docker Swarm 与 Kubernetes

1. 核心差异与选型判断

在容器编排领域,Swarm 与 Kubernetes 定位不同。使用下表对比 核心指标,快速确定方案。

评估维度 Docker Swarm Kubernetes
学习成本 极低,原生集成 Docker CLI 较高,概念繁多(Pod/Deployment/Service)
部署复杂度 3 条命令完成集群搭建 需独立安装组件、配置网络与证书
资源调度 基础过滤与亲和性规则 高级调度算法,支持自定义策略
适用场景 中小型团队、单体或微服务少、追求上线速度 大型企业、高可用要求、云原生生态集成

根据业务规模选择 目标方案后,严格按后续步骤执行环境配置与部署。


2. 统一环境准备

两套方案均需基于干净的 Linux 环境操作。准备至少两台服务器(1 台主节点,1 台工作节点)。

  1. 更新 系统软件源并安装 基础工具。执行 sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common(Ubuntu/Debian 系统)或对应系统的 yum update 命令(CentOS/RHEL 系统)。
  2. 配置 容器依赖内核参数。运行 sudo modprobe overlaysudo modprobe br_netfilter 加载 模块。
  3. 写入 网络转发配置。使用文本编辑器 sudo nano /etc/sysctl.d/99-kubernetes.conf 创建 配置文件,粘贴以下两行:
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
  4. 应用 内核配置。执行 sudo sysctl --system 生效 参数。
  5. 安装 标准 Docker 引擎。运行官方安装脚本 curl -fsSL https://get.docker.com | sudo sh避免 手动下载版本冲突。
  6. 启动设置 开机自启。执行 sudo systemctl enable docker --now 确保服务运行。

3. 部署 Docker Swarm

Swarm 模式已内置于 Docker 引擎中,无需额外安装软件包。按顺序完成节点互联与服务发布。

  1. 切换 至主节点终端。确认当前用户具备 sudo 权限或位于 docker 用户组中。
  2. 初始化 Swarm 集群。执行命令 docker swarm init --advertise-addr <主节点内网IP>。将 <主节点内网IP> 替换 为服务器的实际局域网地址,例如 192.168.1.100
  3. 记录 返回的 Join 令牌。终端会打印一条 docker swarm join --token SWMTKN-... <IP>:2377 命令。复制 该整行命令备用。
  4. 登录 工作节点终端。确保网络与主节点互通。
  5. 执行 刚才复制的 Join 命令。粘贴回车,终端返回 This node joined a swarm as a worker. 表示成功。
  6. 验证 集群拓扑。回到主节点,运行 docker node ls 查看 节点列表。LEADER 状态显示主节点,READY 显示工作节点。
  7. 创建 覆盖网络。执行 docker network create -d overlay app_net构建 跨节点通信通道。
  8. 部署 测试服务。运行 docker service create --name web --replicas 2 --network app_net -p 8080:80 nginx:alpine 拉起 两个副本的 Web 服务。
  9. 检查 服务状态。执行 docker service ls 确认 REPLICAS 显示 2/2
  10. 访问 测试接口。在任意节点终端执行 curl http://localhost:8080返回 HTML 页面即表示负载均衡生效。

4. 部署 Kubernetes

Kubernetes 采用声明式架构。以下步骤基于轻量级发行版 k3s 编写,该版本移除了非必要组件,保持与标准 Kubernetes API 完全兼容,大幅降低部署门槛。

  1. 下载 主节点安装脚本。在主节点终端执行 curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable traefik --write-kubeconfig-mode 644" sh -。该命令自动下载二进制文件并初始化控制平面。
  2. 等待 初始化完成。屏幕滚动日志停止后,运行 kubectl cluster-info 验证 服务状态。输出 Kubernetes control plane is running 即为就绪。
  3. 获取 工作节点加入凭证。执行 sudo cat /var/lib/rancher/k3s/server/node-token 读取 密钥。终端输出格式为 K10...::server:...
  4. 配置 工作节点环境变量。在工作节点终端执行 export K3S_URL=https://<主节点IP>:6443 设定 控制平面地址,接着执行 export K3S_TOKEN=<上一步获取的密钥> 设定 认证信息。
  5. 安装 工作节点代理。运行 curl -sfL https://get.k3s.io | sh -。脚本根据环境变量自动拉取配置并加入集群。
  6. 验证 节点连通性。返回主节点,执行 sudo k3s kubectl get nodesSTATUS 列显示 Ready 代表两台主机均已注册。
  7. 部署 基础应用。创建清单文件 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
  8. 应用 资源清单。执行 sudo k3s kubectl apply -f app.yaml 提交 配置至集群。
  9. 监控 调度进度。运行 sudo k3s kubectl get pods -o wide 观察 Pod 状态。STATUS 变为 Running 且分布在至少两个节点上时,确认 调度完成。
  10. 验证 外部访问。执行 curl http://<任意节点IP>:30080返回 标准 Nginx 欢迎页面内容即证明 Service 端口映射与负载均衡功能正常。

5. 生产级配置建议

基础部署完成后,需按实际业务调整关键参数以保障稳定性。

  1. 调整 资源限制。为 Docker Swarm 的 docker service create 命令追加 --limit-memory 512m --limit-cpu 0.5 参数,或为 Kubernetes YAML 添加 resources: { requests: { cpu: "250m", memory: "128Mi" } } 约束 容器上限。
  2. 配置 数据持久化。Swarm 使用 docker volume create data_vol 创建 卷后挂载至服务。Kubernetes 需在 YAML 中定义 PersistentVolumeClaim 并在 volumeMounts 中关联目录,避免 容器重启导致数据丢失。
  3. 启用 自动伸缩。Kubernetes 执行 sudo k3s kubectl autoscale deployment nginx-deploy --min=2 --max=10 --cpu-percent=80 开启 HPA。Swarm 需配合外部监控与自动化脚本实现动态扩缩容。
  4. 设置 健康检查。在 Docker 服务定义或 K8s Pod 规范中插入 livenessProbereadinessProbe 配置块,指定 探测路径 /healthz 与超时阈值 timeoutSeconds: 3
  5. 备份 集群状态。Swarm 的元数据存储在 /var/lib/docker/swarm/ 目录下,定期执行 目录压缩备份。Kubernetes 需定期运行 etcdctl snapshot save 导出 键值数据库,防止控制平面故障导致配置清空。

完成上述步骤后,集群已具备承载生产流量的基础能力。根据实际压测结果微调副本数与资源配额,确保系统响应时间维持在预期范围内。根据监控面板的 CPU 使用率曲线,若峰值持续超过 85% 超过五分钟,触发 扩容流程或优化代码逻辑。

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文