1.deployment:適用于無狀態服務
1.功能
????????(1)創建高可用pod
? ? ? (2)滾動升級/回滾
? ? ? (3)平滑擴容和縮容
2.操作命令
(1)回滾
# 回滾到上一個版本
kubectl rollout undo deployment/my-app# 回滾到特定版本(先查看歷史)
kubectl rollout history deployment/my-app
kubectl rollout undo deployment/my-app --to-revision=2
(2)平滑擴容和縮容
????????手動擴縮容
# 擴容到 5 個副本
kubectl scale deployment/my-app --replicas=5# 縮容到 2 個副本
kubectl scale deployment/my-app --replicas=2
????????自動擴縮容(HPA)
# 創建 HPA(CPU 使用率超過 50% 時擴容,最多 10 個 Pod)
kubectl autoscale deployment/my-app --min=2 --max=10 --cpu-percent=50
3.滾動升級/回滾圖解(先創建出新的,然后用新的逐步替換出舊的)
、
4.滾動升級/回滾示例
apiVersion: apps/v1
kind: Deployment
metadata:name: my-httpd # Deployment 名稱labels:app: httpd # 標簽(用于 Service 選擇器匹配)
spec:replicas: 3 # Pod 副本數(高可用)revisionHistoryLimit: 5 # 保留的歷史版本數(用于回滾)strategy:type: RollingUpdate # 滾動升級策略rollingUpdate:maxSurge: 1 # 升級時最多臨時超出的 Pod 數量maxUnavailable: 0 # 升級時允許不可用的 Pod 數量(0 表示全量可用)selector:matchLabels:app: httpd # 匹配 Pod 的標簽(必須與 template 一致)template:metadata:labels:app: httpd # Pod 標簽(Service 通過此選擇器關聯)spec:affinity: # 反親和性:將 Pod 分散到不同節點podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchLabels:app: httpdtopologyKey: kubernetes.io/hostnamecontainers:- name: httpdimage: httpd:alpine # 容器鏡像ports:- containerPort: 80 # 容器監聽的端口(targetPort)resources:requests:cpu: "100m" # 最小資源請求(HPA 自動擴縮容依據)memory: "128Mi"limits:cpu: "200m" # 資源上限memory: "256Mi"livenessProbe: # 健康檢查httpGet:path: /port: 80initialDelaySeconds: 5periodSeconds: 10
5.hpa擴縮容示例
五.HPA彈性控制器:監控控制器,實現集群的自動擴縮容設置控制器:---kind: DeploymentapiVersion: apps/v1metadata:name: mydeployspec:replicas: 1selector:matchLabels:app: deploy-httpdtemplate:metadata:labels:app: deploy-httpdspec:containers:- name: webimage: myos:httpdresources: # 為該資源設置配額requests: # HPA 控制器會根據配額使用情況伸縮集群cpu: 300m # CPU 配額---kind: Service #負載均衡apiVersion: v1metadata:name: websvcspec:type: ClusterIPclusterIP: 10.245.1.80selector:app: deploy-httpdports:- protocol: TCPport: 80targetPort: 80HPA 控制器:---kind: HorizontalPodAutoscalerapiVersion: autoscaling/v2metadata:name: myhpaspec:behavior: # 窗口穩定期,這個期間的資源變化scaleDown:stabilizationWindowSeconds: 60scaleTargetRef: # 指定控制器kind: DeploymentapiVersion: apps/v1name: mydeployminReplicas: 1 # 副本數量 maxReplicas: 3metrics: # 擴縮容設置 - type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50 #百分比,節點超過設置的cpu資源的百分之50,則擴容節點,平均資源小于值,縮容
2.statefulset:有狀態的服務,(redis,mysql等)
? ? ? ? 通過headless無頭服務,暴露每個pod的唯一dns地址
????????訪問方式 :redis-0.redis-service.default.svc.cluster.local(0個-服務名.----)
(1) Headless Service 配置# service-headless.yaml
apiVersion: v1
kind: Service
metadata:name: redis-service # 名稱需與 StatefulSet 的 serviceName 一致
spec:clusterIP: None # Headless Service 的關鍵配置selector:app: redis # 匹配 StatefulSet 的 Pod 標簽ports:- protocol: TCPport: 6379 # Service 端口,集群內部的訪問端口,nodeport集群外部的訪問端口targetPort: 6379 # Pod 端口,用于service,后端服務的端口(2) StatefulSet 配置
# statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis
spec:serviceName: "redis-service" # 必須與 Headless Service 名稱一致replicas: 3selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:containers:- name: redisimage: redis:alpineports:- containerPort: 6379 容器里面的端口volumeClaimTemplates: # 每個 Pod 獨立存儲- metadata:name: dataspec:storageClassName: "ssd"resources:requests:storage: 10Gi
3.daemonset:守護進程,保證每個node上都運行一個容器(Prometheus日志,elk監控等)
# DaemonSet 示例:Fluentd 日志收集
apiVersion: apps/v1
kind: DaemonSet
metadata:name: fluentd
spec:selector:matchLabels:name: fluentdtemplate:metadata:labels:name: fluentdspec:containers:- name: fluentdimage: fluent/fluentdvolumeMounts:- name: varlogmountPath: /var/logvolumes:- name: varloghostPath:path: /var/log
4.job和cronjob:定時任務的pod,數據備份,定時器清理等(執行完后pod銷毀)
5.HPA彈性控制器:自動擴縮容
# nginx-deployment.yamlapiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploy # 此名稱必須與HPA中的scaleTargetRef.name一致
spec:replicas: 3template:spec:containers:- name: nginximage: nginxresources:requests:cpu: "100m"# HPAapiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: nginx-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginx-deploy # 必須與集群中Deployment名稱一致minReplicas: 2maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50 # CPU使用率目標50%behavior: # 擴縮容行為控制(Kubernetes 1.18+)scaleDown: # 縮容配置stabilizationWindowSeconds: 300 # 縮容冷卻時間5分鐘(默認300秒)policies:- type: Percent # 按百分比縮容value: 10 # 每次最多縮容10%的PodperiodSeconds: 60 # 每60秒評估一次- type: Pods # 按固定數量縮容(與Percent二選一)value: 1 # 每次最多縮容1個PodscaleUp: # 擴容配置stabilizationWindowSeconds: 60 # 擴容冷卻時間1分鐘(默認0秒)policies:- type: Percentvalue: 100 # 允許瞬間擴容100%的Pod(緊急情況下)periodSeconds: 15- type: Podsvalue: 4 # 每次最多擴容4個Pod