文章目錄
- 前言
- k8s 增量更新 po
- 1. 導出要新建po 的控制器配置
- 2. 配置詳解
- 3. 重新生效
前言
??如果您覺得有用的話,記得給博主點個贊,評論,收藏一鍵三連啊,寫作不易啊^ _ ^。
??而且聽說點贊的人每天的運氣都不會太差,實在白嫖的話,那歡迎常來啊!!!
k8s 增量更新 po
1. 導出要新建po 的控制器配置
為了方便,直接導出現有的控制器配置。
查詢配置:
kubectl get deploy -n <命名空間> | grep <過濾字符串>
導出 干凈的“可 apply”版本命令:
kubectl get deploy <my-deploy> -n <命名空間> -o yaml \| sed -e '/^ uid:/d' \-e '/^ resourceVersion:/d' \-e '/^ creationTimestamp:/d' \-e '/^ generation:/d' \-e '/^status:$/,/^[^ ]/d' \> deploy_20250905.yaml
額外清理:
- 刪掉 managedFields 整塊(這是冗余的操作記錄,API 會自己維護)。
- 刪掉 fieldsType / fieldsV1 / manager / operation / time(都屬于 managedFields 的子字段)。
2. 配置詳解
脫敏詳細配置:
apiVersion: apps/v1
kind: Deployment
metadata:annotations:deployment.kubernetes.io/revision: "7"meta.helm.sh/release-name:demo-service-bjmeta.helm.sh/release-namespace: demo-bjlabels:app:demo-service-bj-taskapp.kubernetes.io/instance:demo-service-bjapp.kubernetes.io/managed-by: Helmapp.kubernetes.io/name: demo-serviceapp.kubernetes.io/version: "2.0"helm.sh/chart: demo-service-0.1.1name:demo-service-bj-tasknamespace: magic2-bj
spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 10selector:matchLabels:app:demo-service-bj-taskstrategy:rollingUpdate:maxSurge: 50%maxUnavailable: 50%type: RollingUpdatetemplate:metadata:annotations:kubectl.kubernetes.io/restartedAt: "2025-05-22T09:58:54+08:00"creationTimestamp: nulllabels:app:demo-service-bj-taskspec:containers:- command:- /bin/sh- -c- 'java -Xms1024M -Xmx2024M demo.jar 'env:- name: NACOSURLvalue: yzy:8848image: 鏡像imagePullPolicy: IfNotPresentlivenessProbe:exec:command:- /bin/sh- -c- /usr/bin/curl -X GET -s '存活接口(存活探針,檢查容器是否健康運行,不健康會被重啟)'| grep instanceIdfailureThreshold: 5initialDelaySeconds: 60periodSeconds: 20successThreshold: 1timeoutSeconds: 3name: appports:- containerPort: 8080protocol: TCPreadinessProbe:exec:command:- /bin/sh- -c- /usr/bin/curl -X GET -s '請求接口(就緒探針,檢查容器是否可對外服務)'| grep instanceIdfailureThreshold: 3periodSeconds: 10successThreshold: 1timeoutSeconds: 1resources:limits:cpu: "2"memory: 4000Mirequests:cpu: 100mmemory: 500MiterminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- mountPath: /etc/localtimename: host-timereadOnly: true- mountPath: /home/app/jarsname: yzydnsPolicy: ClusterFirstnodeSelector:kubernetes.io/hostname: <ip>restartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}serviceAccount:demo-service-bjserviceAccountName:demo-service-bjterminationGracePeriodSeconds: 30volumes:- hostPath:path: /etc/localtimetype: ""name: host-time- hostPath:path: /data/demo/jarstype: Directoryname: yzy
配置塊 | 說明(通用講解) |
---|---|
apiVersion / kind | 定義資源類型,這里是 Deployment。 |
metadata | 元數據:名稱、命名空間、標簽、注解(一般用于標識應用、Helm 信息、運維追蹤)。 |
spec.replicas | 副本數量,決定 Pod 的數量。 |
spec.selector | 選擇器,Deployment 根據標簽找到自己要管理的 Pod。 |
spec.strategy | 更新策略,常見是 RollingUpdate(滾動更新),可配置 maxSurge / maxUnavailable。 |
template.metadata.labels | Pod 模板里的標簽,要和 selector 匹配。 |
containers.image | 容器鏡像地址,定義運行環境和應用內容。 |
containers.command | 容器啟動命令,一般用來啟動主程序(如 java -jar xxx.jar)。 |
containers.env | 環境變量:可以是固定值(配置中心地址),也可以是動態值(如 Pod 名稱)。 |
containers.ports | 容器對外暴露的端口。 |
livenessProbe | 存活探針,檢查容器是否健康運行,不健康會被重啟。 |
readinessProbe | 就緒探針,檢查容器是否可對外服務,失敗則不會接收流量。 |
resources.requests | 最低資源需求(CPU/內存)。 |
resources.limits | 資源上限,防止容器無限占用。 |
volumeMounts | 容器內掛載點,通常用于掛載配置文件、日志目錄、本地時間等。 |
volumes | Pod 使用的存儲卷定義(如宿主機目錄、ConfigMap、Secret)。 |
nodeSelector | 節點選擇器,強制 Pod 調度到某些節點上。 |
serviceAccountName | Pod 使用的 ServiceAccount,用于 RBAC 權限控制。 |
restartPolicy | 重啟策略,Deployment 下通常是 Always。 |
terminationGracePeriodSeconds | 優雅關閉等待時間,默認 30 秒。 |
3. 重新生效
kubectl apply -f deploy_20250905.yaml -n <命名空間>
注:對象存在就 增量更新,不存在就 新建;Deployment 更新會 觸發滾動發布。