容器编排实战:Docker与Kubernetes对比选型与落地实践

容器编排实战:Docker与Kubernetes对比选型与落地实践

大家好,我是迪哥。容器编排是云原生时代的核心技术,从 Docker Compose 到 Kubernetes,从 Swarm 到 K3s,我们经历了多种方案的演进。今天就聊聊容器编排的选型和落地经验。

容器编排方案对比

方案 适用场景 特点
Docker Compose 开发测试环境 简单易用,单机部署
Docker Swarm 小型生产环境 Docker原生,轻量级
Kubernetes 中大型生产环境 功能完善,生态成熟
K3s 边缘计算/轻量环境 轻量K8s,资源占用低

Docker Compose 实战

docker-compose.yml

yaml 复制代码
version: '3.8'
services:
  web:
    build: .
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=prod
      - DB_URL=jdbc:mysql://db:3306/example
    depends_on:
      - db
    restart: always

  db:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=example
    volumes:
      - mysql-data:/var/lib/mysql
    restart: always

  redis:
    image: redis:7.0
    volumes:
      - redis-data:/data
    restart: always

volumes:
  mysql-data:
  redis-data:

常用命令

bash 复制代码
# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose down

# 重启服务
docker-compose restart

Kubernetes 实战

Pod 配置

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: app-pod
  labels:
    app: myapp
spec:
  containers:
    - name: app
      image: registry.example.com/app:latest
      ports:
        - containerPort: 8080
      env:
        - name: DB_URL
          value: "jdbc:mysql://mysql-service:3306/example"
      resources:
        requests:
          cpu: "250m"
          memory: "512Mi"
        limits:
          cpu: "1000m"
          memory: "1Gi"

Service 配置

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

Deployment 配置

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: app
          image: registry.example.com/app:latest
          ports:
            - containerPort: 8080
          livenessProbe:
            httpGet:
              path: /actuator/health
              port: 8080
            initialDelaySeconds: 30
            periodSeconds: 10
          readinessProbe:
            httpGet:
              path: /actuator/health
              port: 8080
            initialDelaySeconds: 10
            periodSeconds: 5

K3s 轻量部署

安装 K3s

bash 复制代码
# 安装服务端
curl -sfL https://get.k3s.io | sh -

# 安装客户端
curl -sfL https://get.k3s.io | K3S_URL=https://server-ip:6443 K3S_TOKEN=token sh -

部署应用

bash 复制代码
# 使用 kubectl 部署
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml

最佳实践清单

维度 最佳实践
开发环境 使用 Docker Compose
小型生产 使用 K3s
中大型生产 使用标准 K8s
资源限制 配置合理的资源请求和限制
健康检查 配置 liveness 和 readiness probe
监控 集成 Prometheus + Grafana

说到容器编排,我家那只叫 Docker 的哈士奇最近学会了"容器管理"------把自己的玩具按类型分类放在不同的箱子里,说是这样找起来方便,这编排能力比我们的 K8s 还强 😂

我是迪哥,我们下期再见!

相关推荐
用户298698530147 小时前
Java 实现 Word 文档加密与权限解除
java·后端
Yeats_Liao8 小时前
14:Servlet中的页面跳转-Java Web
java·后端·架构
未秃头的程序猿8 小时前
告别"if-else地狱"!Java 21模式匹配,代码优雅了10倍
java·后端·面试
鹤望兰6758 小时前
字节跳动国际支付-后端开发-三面面经
java
Flittly8 小时前
【AgentScope Java新手村系列】(14)人机交互
java·spring boot·spring
RainCity8 小时前
Java Swing 自定义组件库分享(十二)
java·笔记·后端
吃饱了得干活1 天前
Spring Cloud Gateway 微服务网关:路由、断言、过滤器
java·spring cloud
lwx572801 天前
探秘InnoDB:搞懂它的内存、线程、磁盘与日志刷盘策略
java·后端
Flynt1 天前
从Spring Boot 4.0升到4.1,我在Maven和gRPC上栽了跟头
java·spring boot·后端
plainGeekDev1 天前
Activity 间传值 → Navigation 参数
android·java·kotlin