Docker Swarm + K8s 集群部署完整指南

一、先搞懂三者关系

  • Docker 单机:跑单个容器
  • Docker Swarm:Docker 官方轻量集群,简单够用
  • K8s(Kubernetes):工业级容器编排,功能最全、企业标配

二、第一阶段:Docker Swarm 集群部署

1. 架构

  • 1 个 Manager 节点(管理)
  • N 个 Worker 节点(干活)
  • 服务自动调度、故障自愈、负载均衡、滚动更新

2. 初始化集群(Manager 节点)

bash 复制代码
docker swarm init --advertise-addr 192.168.1.100

执行后会输出一行 join 命令,拿去 Worker 节点执行即可加入集群。

3. 工作节点加入

bash 复制代码
docker swarm join --token xxx 192.168.1.100:2377

4. 查看节点

bash 复制代码
docker node ls

5. 使用 docker-compose.yml 部署集群服务

创建 docker-compose.yml

yaml 复制代码
version: '3.8'

services:
  app:
    image: myapp:latest
    ports:
      - "8080:8080"
    deploy:
      replicas: 3      # 3 个副本
      restart_policy:
        condition: on-failure
    environment:
      - DB_HOST=mysql
      - REDIS_HOST=redis

  mysql:
    image: mysql:8.0
    volumes:
      - mysql-data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=appdb

volumes:
  mysql-data:

6. 一键部署到 Swarm 集群

bash 复制代码
docker stack deploy -c docker-compose.yml myapp

7. 常用 Swarm 命令

bash 复制代码
docker stack ls                  # 查看应用
docker service ls                # 查看服务
docker service ps myapp_app      # 查看副本
docker service scale myapp_app=5 # 扩缩容
docker stack rm myapp           # 删除

8. Swarm 特点

  • 简单、零学习成本
  • 适合中小团队、中小项目
  • 自带负载均衡、自愈、滚动更新
  • 缺点:功能不如 K8s 强大

三、第二阶段:K8s (Kubernetes) 集群部署

1. K8s 架构

  • Master:API Server / Controller / Scheduler / etcd
  • Node:kubelet / kube-proxy / 容器运行时

2. 最小化集群安装(kubeadm 方式)

(所有节点执行)

bash 复制代码
# 关闭交换分区
swapoff -a

# 加载内核模块
modprobe overlay
modprobe br_netfilter

# 安装 containerd
...(省略标准安装步骤)

# 安装 kubeadm、kubelet、kubectl

Master 节点初始化

bash 复制代码
kubeadm init --apiserver-advertise-address=192.168.1.100 --pod-network-cidr=10.244.0.0/16

Node 加入

bash 复制代码
kubeadm join 192.168.1.100:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx

安装网络插件(Calico/Flannel)

bash 复制代码
kubectl apply -f https://docs.projectcalico.org/v3.25/manifests/calico.yaml

查看节点

bash 复制代码
kubectl get nodes

四、K8s 部署微服务(实战)

1. 编写 Deployment(应用)

app-deploy.yaml

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: myapp:latest
        env:
        - name: DB_HOST
          value: "mysql"
        - name: REDIS_HOST
          value: "redis"
        ports:
        - containerPort: 8080

2. 编写 Service(暴露服务)

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: app
spec:
  selector:
    app: myapp
  ports:
  - port: 80
    targetPort: 8080
  type: NodePort

3. 部署 MySQL(用 ConfigMap + Secret + PVC)

yaml 复制代码
# Secret 存密码
apiVersion: v1
kind: Secret
metadata:
  name: mysql-secret
type: Opaque
data:
  password: cm9vdA==  # root base64
---
# PVC 持久化
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
# StatefulSet 部署 MySQL
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: mysql
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8.0
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: password
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
      volumes:
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql-pvc

4. 一键部署

bash 复制代码
kubectl apply -f .

5. 常用 K8s 命令

bash 复制代码
kubectl get pods
kubectl get svc
kubectl get nodes
kubectl scale deploy app --replicas=5
kubectl logs -f pod名
kubectl exec -it pod名 -- bash

五、Swarm vs K8s 对比

特性 Docker Swarm K8s
难度 极低
架构 简单 完备
自愈、扩缩容
配置管理 环境变量 ConfigMap/Secret
存储管理 简单 PVC/PV/StorageClass
网关、Ingress 强大
生态 巨大(监控、日志、中间件)
企业生产 中小项目 几乎全部大厂

六、从单机到分布式的完整路径

  1. 单机 Docker:学习镜像、容器、数据卷、网络
  2. Docker Compose:单机编排多个服务
  3. Docker Swarm:轻量集群,快速落地
  4. Kubernetes:企业级生产集群
  5. K8s 生态:Prometheus + Grafana + ELK + Jenkins + GitLab

这就是云原生工程师标准成长路线


相关推荐
石像鬼₧魂石2 小时前
ARL(资产灯塔)从 Docker 安装到部署启动 完整详细流程(复习专用)
运维·docker·容器
小江的记录本2 小时前
【Docker】Docker系统性知识体系与命令大全(镜像、容器、数据卷、网络、仓库)
java·网络·spring boot·spring·docker·容器·eureka
wuxingge2 小时前
docker部署私人影音库Plex
docker·容器
yuanlaile3 小时前
Linux Docker、Swarm、K8s分布式部署全集解析
linux·docker·kubernetes·k8s实战
小江的记录本3 小时前
【Docker】 Docker 全平台部署(Linux / Windows / MacOS)与 前后端分离项目 容器化方案
java·linux·windows·http·macos·docker·容器
小江的记录本4 小时前
【Docker】《 Docker 高频常用命令速查表 》
java·前端·后端·http·docker·容器·eureka
观测云4 小时前
Python 应用实现 APM 自动注入(Kubernetes 篇)
开发语言·python·kubernetes
杜子不疼.5 小时前
2026 年 Python AI 大模型部署全攻略:本地运行 + API 服务 + Docker 封装
人工智能·python·docker
真心喜欢你吖5 小时前
Ubuntu服务器安装部署OpenClaw完整教程(生产环境+systemd服务配置)
java·linux·服务器·ubuntu·docker·大模型·openclaw