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

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

相关推荐
evans在进步11 小时前
Tomcat NIO 工作原理详解:从 Acceptor、Poller 到容器处理链
java·tomcat·nio
渡我白衣12 小时前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
电商API_1800790524712 小时前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
zzzll111112 小时前
深度剖析:HashMap 并发死循环与 ConcurrentHashMap 两代演进全解
java·开发语言
秋名RG12 小时前
2026/5/27 生产事故复盘与整改方案
java
血小板要健康13 小时前
链表 阶段算法总结
java·数据结构·笔记·算法·leetcode·链表
坐吃山猪13 小时前
【多线程】CompletableFuture使用
java·开发语言·多线程
m0_5873830013 小时前
点餐预约核销系统的架构脉络
java·架构·系统架构·需求分析
代码方舟14 小时前
O2O二手车交易平台B端车商管理后台:基于天远车信盟出险构建自动化车况评估网关
java·运维·人工智能·自动化
爱学堂IT分享14 小时前
图灵Java互联网架构师六期
java·开发语言