容器编排实战: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 还强 😂

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

相关推荐
Java成神之路-3 小时前
Java String 为什么不可变?和 HashMap 到底有什么关系?
java
paopaokaka_luck3 小时前
基于springboot+vue的益暖微光公益服务平台(DeepSeek公益助手、善款信息追溯、志愿服务积分闭环、ECharts运营分析、活动状态自动流转)
java·前端·javascript·spring boot·mysql·架构·echarts
文丑颜不良啊4 小时前
LeetCode1401~1420题目解析
java·leetcode
Nuanyt4 小时前
LeetCode Hot 100 链表专题2 3 题 (Java)
java·笔记·算法·leetcode·链表
文丑颜不良啊4 小时前
LeetCode1341~1360题目解析
java·leetcode
QianhangQianping4 小时前
撤销重做不是「存快照」:一个可视化编辑器的Operation 设计
java·前端·数据库·typescript·编辑器·前端架构·撤销重做
海绵宝宝转agent4 小时前
LeetCodehot100题解
java·笔记·学习·算法·leetcode·深度优先
SunnyDays10114 小时前
Java 操作 Word 脚注和尾注:添加、读取与删除
java·word
SunnyDays10114 小时前
Java 为 Word 添加页码:隐藏封面页码、从指定页开始编号、奇偶页页码设置等
java·word·页码
开源推荐官4 小时前
多门店 O2O 商城选型复盘:从开发视角对比主流开源系统
java·架构·开源·php