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

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


相关推荐
雨辰AI6 小时前
K8s 国产数据库慢 SQL 自动监控|Prometheus+Grafana 可视化全落地
数据库·sql·安全·容器·kubernetes·grafana·prometheus
GGG7666 小时前
k8s的 Node and Cluster实战
容器·kubernetes
半支烟隐 pzishuo7 小时前
Kubernetes Gateway API 完全指南
容器·kubernetes·gateway
兵bing7 小时前
Docker Compose 配置文件归纳总结-千问
运维·docker·容器
蓝田~7 小时前
Java镜像1.2GB→200MB的瘦身之路:Docker多阶段构建+K8s Pod OOMKilled(137)排查,后端部署避坑指南
java·docker·kubernetes
TechWJ8 小时前
Excel报表越做越乱?用Metabase搭建可更新的数据仪表盘
docker·数据分析·excel·metabase·报表工具
运维大师9 小时前
【K8S 运维实战】37-金融企业多集群落地
运维·金融·kubernetes
凌虚(失业了求个工作)10 小时前
Kubernetes 编年史:从 Borg 到云原生操作系统
云原生·容器·kubernetes
SLD_Allen10 小时前
从Cloud Native到AI Native:K8s DRA与Agent协议栈
人工智能·云原生·kubernetes·cloud native·ai native
冰封之寂10 小时前
Kubernetes Pod 管理完全指南:从基础命令到高级调度
云原生·容器·kubernetes