全部文章

容器编排入门

Docker Swarm 与 Kubernetes 基础概念、常用命令与本地开发环境

目录 18 节

容器编排入门

这页适合作为“从单机容器走向多实例部署”的入门入口。容器编排真正要解决的,不只是把多个容器启动起来,而是统一调度、滚动更新、服务发现、配置管理和故障恢复。

什么时候该上编排

下面这些情况往往值得开始考虑编排:

  • 服务实例不止一个
  • 需要滚动更新和回滚
  • 需要把配置、密钥和服务发现统一管理
  • 需要更稳定地扩缩容

如果你现在只有一台机器、几项服务,先把 docker compose 用顺往往更划算,不必一开始就上 Kubernetes。

Docker Swarm

Docker 内置的编排工具,适合小规模部署。

初始化

docker swarm init

部署服务

# 创建服务
docker service create --name web --replicas 3 -p 80:80 nginx:alpine

# 查看服务
docker service ls
docker service ps web

# 扩缩容
docker service scale web=5

# 更新镜像
docker service update --image nginx:latest web

# 删除服务
docker service rm web

Stack 部署

# stack.yml
version: "3.8"
services:
  web:
    image: nginx:alpine
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    ports:
      - "80:80"

  api:
    image: myapp:latest
    deploy:
      replicas: 2
    environment:
      - NODE_ENV=production
docker stack deploy -c stack.yml myapp
docker stack ls
docker stack services myapp
docker stack rm myapp

推荐学习顺序

建议按这个顺序理解:

  1. 先会用 docker compose
  2. 再理解服务、实例、网络、卷和配置
  3. 再看 Swarm 这类较轻量的编排
  4. 最后再上 Kubernetes 的 Deployment、Service、ConfigMap、Secret

先把容器基础概念理顺,再学编排会轻松很多。

Kubernetes 基础

本地环境

# minikube
scoop install minikube
minikube start

# 或使用 Docker Desktop 内置 K8s
# Settings → Kubernetes → Enable

kubectl 常用命令

# 集群信息
kubectl cluster-info
kubectl get nodes

# Pod 操作
kubectl get pods
kubectl get pods -A                    # 所有命名空间
kubectl describe pod <name>
kubectl logs <pod-name>
kubectl logs <pod-name> -f             # 实时日志
kubectl exec -it <pod-name> -- sh      # 进入容器

# 部署
kubectl apply -f deployment.yaml
kubectl get deployments
kubectl rollout status deployment/web
kubectl rollout undo deployment/web    # 回滚

# 服务
kubectl get services
kubectl expose deployment web --port=80 --type=LoadBalancer

# 删除
kubectl delete -f deployment.yaml

Deployment 示例

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: web
          image: nginx:alpine
          ports:
            - containerPort: 80
          resources:
            limits:
              memory: "128Mi"
              cpu: "250m"
---
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  selector:
    app: web
  ports:
    - port: 80
      targetPort: 80
  type: ClusterIP

ConfigMap 与 Secret

# ConfigMap
kubectl create configmap app-config --from-literal=ENV=production
kubectl create configmap app-config --from-file=config.yaml

# Secret
kubectl create secret generic db-creds \
  --from-literal=username=admin \
  --from-literal=password=secret
# 在 Pod 中使用
env:
  - name: ENV
    valueFrom:
      configMapKeyRef:
        name: app-config
        key: ENV
  - name: DB_PASSWORD
    valueFrom:
      secretKeyRef:
        name: db-creds
        key: password

常见问题

Docker Compose 用得好好的,为什么还要上编排

当你开始需要:

  • 多副本
  • 滚动更新
  • 自动恢复
  • 更清晰的集群资源管理

编排的价值就会越来越明显。

Kubernetes 太复杂,值不值得学

如果你会长期接触云原生、团队交付或多服务系统,值得;如果只是个人项目和小型部署,先掌握 Compose 和基础容器运维更实用。

一开始该选 Swarm 还是 Kubernetes

  • 小规模、学习成本优先:Swarm
  • 生态、通用性、长期能力优先:Kubernetes

风险提醒

  • 不要为了“技术先进”强行上复杂编排
  • 配置和 Secret 进入集群前要先规划权限边界
  • 集群问题通常比单机问题更隐蔽,监控和日志必须跟上

延伸阅读

参考链接

阅读建议
  • - 先读标题和摘要,再结合目录决定从哪个章节开始精读。
  • - 看到具体命令、配置或步骤时,尽量在自己的环境里同步验证。
  • - 如果你只是快速查资料,可先看目录和相关文档,再决定是否深入全文。
适合谁看
  • - 希望把零散经验整理成长期可复用工作流的人
  • - 想先建立认知,再决定是否深入实践的人
  • - 希望阅读时顺手建立自己的操作清单或收藏体系的人
执行前检查
  • - 先浏览标题、摘要和目录,带着问题阅读会更高效
  • - 顺手记录真正对你有用的命令、链接和注意事项,避免重复搜索
  • - 如果页面里提到相关文档,尽量一起打开对照,效果通常更完整
同类内容
← 上一篇监控与日志