AwsLinker/docs/zh-CN/kubernetes-container-management.md
2025-09-16 17:19:58 +08:00

12 KiB
Raw Permalink Blame History

title description excerpt category tags author date image locale slug featured
Kubernetes容器管理实战从入门到企业级应用 Kubernetes作为容器编排的标准正在重塑现代应用的部署和管理方式。本文深入解析Kubernetes的核心概念、架构设计和企业级应用实践。 Kubernetes作为容器编排的标准正在重塑现代应用的部署和管理方式... tech
Kubernetes
容器化
微服务
DevOps
云原生
合肥懂云运维团队 2024-01-22 /images/news/kubernetes-container-management.webp zh-CN kubernetes-container-management false

Kubernetes容器管理实战从入门到企业级应用

Kubernetes已经成为容器编排领域的事实标准为现代应用提供了强大的部署、扩缩容和管理能力。本文将带您深入了解Kubernetes的核心概念和企业级应用实践。

Kubernetes概述

Kubernetes简称K8s是一个开源的容器编排平台由Google开发并捐献给CNCF基金会。它提供了容器化应用的自动化部署、扩缩容和管理功能。

核心价值

  • 自动化部署:自动化容器的部署和更新流程
  • 弹性扩缩容:根据负载自动调整应用实例数量
  • 自我修复:自动重启失败的容器,替换不健康的节点
  • 服务发现:内置的负载均衡和服务发现机制
  • 存储编排:自动挂载存储系统
  • 密钥管理:安全地管理敏感信息

核心架构组件

控制平面Control Plane

API Server

  • 集群的API网关和前端接口
  • 处理所有REST操作
  • 身份验证和授权
  • 数据验证和序列化

etcd

  • 分布式键值存储
  • 保存集群的所有配置数据
  • 服务发现和配置共享
  • 强一致性保证

Controller Manager

  • 运行控制器进程
  • 节点控制器、复制控制器
  • 端点控制器、服务账户控制器
  • 监控集群状态并执行修复操作

Scheduler

  • Pod调度器
  • 根据资源需求选择合适的节点
  • 考虑约束条件和亲和性规则
  • 负载均衡和资源优化

工作节点Worker Nodes

kubelet

  • 节点代理
  • 与API Server通信
  • 管理Pod生命周期
  • 容器健康检查

kube-proxy

  • 网络代理
  • 实现服务的负载均衡
  • 维护网络规则
  • 处理集群内外的网络通信

Container Runtime

  • 容器运行时
  • Docker、containerd、CRI-O
  • 拉取镜像和运行容器
  • 容器生命周期管理

核心资源对象

Pod

Pod是Kubernetes中最小的部署单元

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.20
    ports:
    - containerPort: 80

特点:

  • 一个或多个紧密耦合的容器
  • 共享网络和存储
  • 原子性的部署和调度单位

Deployment

声明式的应用部署和更新:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.20
        ports:
        - containerPort: 80

功能:

  • 滚动更新和回滚
  • 副本数量管理
  • 应用版本控制

Service

服务发现和负载均衡:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
  type: LoadBalancer

类型:

  • ClusterIP集群内部访问
  • NodePort节点端口暴露
  • LoadBalancer外部负载均衡器
  • ExternalNameDNS CNAME记录

ConfigMap和Secret

配置和密钥管理:

# ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  database_url: "mysql://db:3306/app"
  debug: "true"

---
# Secret
apiVersion: v1
kind: Secret
metadata:
  name: app-secret
type: Opaque
data:
  username: YWRtaW4=  # base64编码
  password: cGFzc3dvcmQ=

存储管理

持久卷PV和持久卷声明PVC

# PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-storage
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: fast-ssd
  hostPath:
    path: /data

---
# PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-storage
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: fast-ssd

存储类StorageClass

动态存储供应:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
  zones: us-west-2a, us-west-2b

网络管理

网络模型

Kubernetes采用扁平网络模型

  • 每个Pod都有唯一的IP地址
  • Pod之间可以直接通信
  • 不需要NAT转换
  • 支持跨节点通信

网络插件CNI

常用的CNI插件

  • Calico:性能优秀,支持网络策略
  • Flannel:简单易用,适合小型集群
  • Weave:加密通信,适合安全要求高的环境
  • Cilium基于eBPF性能和安全性俱佳

Ingress

HTTP/HTTPS流量路由

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app-service
            port:
              number: 80

安全管理

RBAC基于角色的访问控制

# Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]

---
# RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
subjects:
- kind: User
  name: jane
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

网络策略

控制Pod间的网络通信

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all
spec:
  podSelector: {}
  policyTypes:
  - Ingress
  - Egress

Pod安全标准

apiVersion: v1
kind: Pod
metadata:
  name: secure-pod
spec:
  securityContext:
    runAsNonRoot: true
    runAsUser: 1000
    fsGroup: 2000
  containers:
  - name: app
    image: nginx
    securityContext:
      allowPrivilegeEscalation: false
      readOnlyRootFilesystem: true
      capabilities:
        drop:
        - ALL

应用部署策略

滚动更新

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-deployment
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  replicas: 5
  template:
    spec:
      containers:
      - name: app
        image: app:v2.0

蓝绿部署

通过Service切换实现零停机部署

# 部署绿色版本
kubectl apply -f green-deployment.yaml

# 验证绿色版本
kubectl get pods -l version=green

# 切换流量到绿色版本
kubectl patch service app-service -p '{"spec":{"selector":{"version":"green"}}}'

# 清理蓝色版本
kubectl delete deployment blue-deployment

金丝雀发布

# 主版本90%流量)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-stable
spec:
  replicas: 9
  template:
    metadata:
      labels:
        app: myapp
        version: stable

---
# 金丝雀版本10%流量)
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-canary
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: myapp
        version: canary

监控和日志

监控体系

Prometheus监控栈

# ServiceMonitor
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: app-monitor
spec:
  selector:
    matchLabels:
      app: myapp
  endpoints:
  - port: metrics
    interval: 30s
    path: /metrics

关键指标

  • 集群级别节点资源使用率、API Server延迟
  • 节点级别CPU、内存、磁盘、网络使用率
  • Pod级别:容器资源使用、重启次数
  • 应用级别:请求量、响应时间、错误率

日志管理

ELK/EFK栈

# Fluentd DaemonSet
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
spec:
  selector:
    matchLabels:
      name: fluentd
  template:
    spec:
      containers:
      - name: fluentd
        image: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch
        env:
        - name: FLUENT_ELASTICSEARCH_HOST
          value: "elasticsearch.logging.svc.cluster.local"

日志最佳实践

  • 结构化日志格式JSON
  • 统一日志等级
  • 包含关键上下文信息
  • 避免敏感信息泄露

运维最佳实践

资源管理

资源请求和限制

resources:
  requests:
    memory: "64Mi"
    cpu: "250m"
  limits:
    memory: "128Mi"
    cpu: "500m"

水平Pod自动扩缩容HPA

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: app-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: app-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

健康检查

livenessProbe:
  httpGet:
    path: /health
    port: 8080
  initialDelaySeconds: 30
  periodSeconds: 10

readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 5

优雅关闭

lifecycle:
  preStop:
    exec:
      command: ["/bin/sh", "-c", "sleep 15"]

故障排查

常用调试命令

# 查看Pod状态
kubectl get pods -o wide

# 查看Pod详细信息
kubectl describe pod <pod-name>

# 查看Pod日志
kubectl logs <pod-name> -f

# 进入Pod容器
kubectl exec -it <pod-name> -- /bin/bash

# 查看事件
kubectl get events --sort-by=.metadata.creationTimestamp

# 查看资源使用情况
kubectl top nodes
kubectl top pods

常见问题和解决方案

Pod一直处于Pending状态

可能原因:

  • 资源不足
  • 节点选择器不匹配
  • 存储卷不可用

解决方法:

kubectl describe pod <pod-name>
kubectl get nodes
kubectl get pv,pvc

Pod频繁重启

可能原因:

  • 应用程序错误
  • 健康检查配置不当
  • 资源限制过低

解决方法:

kubectl logs <pod-name> --previous
kubectl describe pod <pod-name>

企业级应用场景

微服务架构

在微服务架构中Kubernetes提供

  • 服务注册与发现
  • 负载均衡
  • 配置管理
  • 服务间通信
  • 故障隔离

CI/CD集成

与DevOps工具链集成

  • Jenkins、GitLab CI、GitHub Actions
  • Helm图表管理
  • Kustomize配置管理
  • ArgoCD GitOps

多环境管理

  • 命名空间隔离
  • 环境特定配置
  • 资源配额管理
  • 网络策略

性能优化

集群优化

  • 节点规格选择
  • 网络插件优化
  • 存储性能调优
  • etcd性能优化

应用优化

  • 镜像大小优化
  • 多阶段构建
  • 资源配置优化
  • 启动时间优化

总结

Kubernetes作为云原生时代的基础设施标准为现代应用提供了强大的容器编排能力。成功应用Kubernetes需要

  1. 深入理解架构:掌握核心组件和工作原理
  2. 最佳实践应用:遵循安全、监控、资源管理最佳实践
  3. 持续学习优化:跟上技术发展,持续优化配置
  4. 团队技能建设:培养专业的运维和开发能力

通过合理的架构设计和运维实践Kubernetes能够为企业带来更高的部署效率、更好的资源利用率和更强的系统可靠性。

如需Kubernetes集群建设和应用迁移服务欢迎联系我们的专业团队。