返回

不可思议!原来 Kubernetes 24 个最佳实践,可以这样做!

后端

Kubernetes 实用指南:掌握 24 个技巧,成为 Kubernetes 大师

1. 资源配额与限制:

优化资源分配,避免资源浪费和争用。设置配额和限制以控制容器资源使用量。

apiVersion: v1
kind: LimitRange
metadata:
  name: my-limits
spec:
  limits:
    - type: Container
      default:
        cpu: "100m"
        memory: "256Mi"
      defaultRequest:
        cpu: "50m"
        memory: "128Mi"
      max:
        cpu: "200m"
        memory: "512Mi"
      min:
        cpu: "20m"
        memory: "64Mi"

2. 实时监控:

使用 ReadinessProbe 和 LivenessProbe 实时监控容器运行状况。及时检测异常并采取行动,确保服务稳定性。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: my-image
      readinessProbe:
        httpGet:
          path: /healthz
          port: 8080
      livenessProbe:
        httpGet:
          path: /healthz
          port: 8080

3. 监测容器日志:

追踪应用程序运行状态,实时监测容器日志。及时发现并解决问题。

kubectl logs <pod-name> -f

4. 选择合适的存储卷类型:

根据不同容器存储需求选择合适的存储卷类型。提高存储效率并满足应用程序需求。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  volumes:
    - name: my-data
      persistentVolumeClaim:
        claimName: my-pvc

5. 保护关键业务 Pod:

使用 Pod Disruption Budgets 保护关键业务 Pod。即使在节点维护或升级期间,也能保证关键业务不受影响。

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: my-pdb
spec:
  selector:
    matchLabels:
      role: critical
  minAvailable: 1

6. 精确设置资源请求与限制:

优化资源利用率,设置准确的资源请求和限制。合理分配资源,避免资源不足或浪费。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: my-image
      resources:
        requests:
          cpu: "100m"
          memory: "256Mi"
        limits:
          cpu: "200m"
          memory: "512Mi"

7. 滚动更新策略:

逐步替换旧版本容器,实现系统平滑升级。滚动更新策略可降低服务中断风险。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%

8. 动态调整容器数量:

使用 Horizontal Pod Autoscaler(HPA)动态调整容器数量。根据负载和资源利用率,优化资源使用率。

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

9. 安全地存储敏感数据:

使用 Kubernetes Secrets 安全地存储和管理敏感数据,例如密码、密钥和证书。提高系统安全性。

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  password: YmFzZTY0

10. 资源隔离与访问控制:

使用 Kubernetes Namespaces 实现资源隔离和访问控制。让不同应用程序互不干扰,增强安全性。

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace

11. 简化对外服务暴露:

使用 Kubernetes Ingress 简化对外暴露服务的配置和管理。让流量顺畅流向目的地。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
    - host: my-domain.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80

12. 灵活的资源筛选与管理:

为资源添加标签,使用 Kubernetes Label 灵活筛选和管理资源。简化资源管理和组织。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  labels:
    app: my-app
    env: production

13. 控制 Pod 与节点亲和性:

使用 Kubernetes Taints 和 Tolerations 控制 Pod 与节点的亲和性。让 Pod 始终与理想的节点为伍,优化资源利用率。

apiVersion: v1
kind: Node
metadata:
  name: my-node
spec:
  taints:
    - key: node-role.kubernetes.io/master
      value: ""
      effect: NoSchedule

14. 轻松管理 TLS 证书:

部署 Certificate Manager 轻松管理 TLS 证书。增强服务通信安全性,提高用户信任度。

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: my-certificate
spec:
  secretName: my-certificate-secret
  issuerRef:
    name: selfsigned-issuer
  commonName: my-domain.com

15. 定期滚动更新:

定期进行滚动更新,确保系统始终运行最新版本。提高系统稳定性和安全性。

kubectl set image deployment/my-deployment my-container=my-image:latest

16. 容器数据持久化存储:

使用 Kubernetes Persistent Volumes 实现容器数据持久化存储。数据永不丢失,保障业务连续性。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain

17. 实时监测系统指标:

实时监测系统指标,例如 CPU 使用率、内存使用量、网络流量。及早发现系统瓶颈,优化资源利用率。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: my-service-monitor
spec:
  endpoints:
    - port: http
      interval: 10s
      scrapeTimeout: 10s

18. 定期进行系统备份:

定期进行系统备份,以便在系统出现故障时,能够快速恢复数据。最大程度减少损失,确保业务连续性。

kubectl backup create my-backup --from-api --storage-location gs://my-bucket/backups

19. 防止资源过度消耗:

设置合理的资源限制,防止单个容器过度消耗资源。确保系统整体稳定运行,避免资源争用。

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: my-image
      resources:
        limits:
          cpu: "200m"
          memory: "512Mi"

20. 实时监测 Kubernetes 集群状态:

部署监控工具,例如 Prometheus 或 Grafana。实时监测 Kubernetes 集群状态,全面了解系统运行情况。

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: prometheus-instance
spec:
  serviceAccountName: prometheus

21. 深入分析系统日志:

利用日志记录和监控工具深入分析系统日志。快速定位系统问题,及时采取补救措施。

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-logging-config
data:
  fluentd-config.yaml: |
    <match fluent.*