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

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

相关推荐
benpaodeDD2 小时前
视频10,11,12,13——java程序的加载与执行,安装jdk
java·开发语言
数字化顾问3 小时前
(122页PPT)数字化架构的演进和治理(附下载方式)
java·运维·架构
XiYang-DING3 小时前
【Java SE】JVM
java·开发语言·jvm
小陶来咯3 小时前
小智接入懒人说书MCP
java·开发语言
m0_470857643 小时前
PHP怎么实现工厂模式_Factory模式编写指南【指南】
jvm·数据库·python
Dicky-_-zhang3 小时前
日志管理实战:ELK与Loki对比选型与落地实践
java·jvm
nJI74egg13 小时前
JavaEE初阶---《JUC 并发编程完全指南:组件用法、原理剖析与面试应答》
java·面试·java-ee
刮风那天4 小时前
Android AMS创建进程不用Binder而用Socket?
android·java·binder
小王C语言4 小时前
【线程概念与控制】:线程封装
jvm·c++·算法