不可思议!原来 Kubernetes 24 个最佳实践,可以这样做!
2023-08-05 20:10:21
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.*