久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

kubernetes中如何使用PodPreset

135次閱讀
沒有評論

共計 3651 個字符,預計需要花費 10 分鐘才能閱讀完成。

這篇文章主要介紹了 kubernetes 中如何使用 PodPreset,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

一:簡介

    PodPreset 資源對象只有 kubernetes 1.8 以上版本才支持。Preset 就是預設,有時候想要讓一批容器在啟動的時候就注入一些信息,比如 secret、volume、volume mount 和環境變量,而又不想一個一個的改這些 Pod 的 tmeplate,這時候就可以用到 PodPreset 這個資源對象了。該對象用來在 Pod 創建的時候向 Pod 中注入某些特定信息。該信息可以包括 secret、volume、volume mount 和環境變量。

    Pod Preset 是用來在 Pod 被創建的時候向其中注入額外的運行時需求的 API 資源。可以使用 label selector 來指定為哪些 Pod 應用 Pod Preset。使用 Pod Preset 使得 pod 模板的作者可以不必為每個 Pod 明確提供所有信息。這樣一來,pod 模板的作者就不需要知道關于該服務的所有細節。

二:開啟 PodPreset

1. 開啟 API:在 apiserver 配置文件中增加 –runtime-config=settings.k8s.io/v1alpha1/podpreset
2. 開啟準入控制器:在 apiserver 配置文件中增加 –admission-control=PodPreset

三:PodPreset 工作機制

當有 Pod 創建請求發生時,系統將執行以下操作:
1. 檢索所有可用的 PodPresets。
2. 檢查 PodPreset 標簽選擇器上的標簽,看看其是否能夠匹配正在創建的 Pod 上的標簽。
3. 嘗試將由 PodPreset 定義的各種資源合并到正在創建的 Pod 中。
4. 出現錯誤時,在該 Pod 上引發記錄合并錯誤的事件,PodPreset 不會注入任何資源到創建的 Pod 中。
5. 注釋剛生成的修改過的 Pod spec,以表明它已被 PodPreset 修改過。注釋的格式為 podpreset.admission.kubernetes.io/podpreset- pod-preset name : resource version。

    每個 Pod 可以匹配零個或多個 Pod Prestet;并且每個 PodPreset 可以應用于零個或多個 Pod。PodPreset 應用于一個或多個 Pod 時,Kubernetes 會修改 Pod Spec。對于 Env、EnvFrom 和 VolumeMounts 的更改,Kubernetes 修改 Pod 中所有容器的容器 spec;對于 Volume 的更改,Kubernetes 修改 Pod Spec。

四:示例

1. 增加環境變量和存儲卷的 PodPreset
PodPreset

kind: PodPreset

apiVersion: settings.k8s.io/v1alpha1

metadata:

 name: allow-database

 namespace: myns

spec:

 selector:

 matchLabels:

 role: frontend

 env:

 – name: DB_PORT

 value: 6379

 volumeMounts:

 – mountPath: /cache

 name: cache-volume

 volumes:

 – name: cache-volume

 emptyDir: {}

用戶提交的 Pod

apiVersion: v1

kind: Pod

metadata:

 name: website

 labels:

 app: website

 role: frontend

spec:

 containers:

 – name: website

 image: ecorp/website

 ports:

 – containerPort: 80

經過準入控制 PodPreset 后,Pod 會自動增加環境變量和存儲卷

apiVersion: v1

kind: Pod

metadata:

 name: website

 labels:

 app: website

 role: frontend

 annotations:

 podpreset.admission.kubernetes.io/allow-database: resource version

spec:

 containers:

 – name: website

 image: ecorp/website

 volumeMounts:

 – mountPath: /cache

 name: cache-volume

 ports:

 – containerPort: 80

 env:

 – name: DB_PORT

 value: 6379

 volumes:

 – name: cache-volume

 emptyDir: {}

2.ConfigMap 示例

apiVersion: v1

kind: ConfigMap

metadata:

 name: etcd-env-config

data:

 number_of_members: 1

 initial_cluster_state: new

 initial_cluster_token: DUMMY_ETCD_INITIAL_CLUSTER_TOKEN

 discovery_token: DUMMY_ETCD_DISCOVERY_TOKEN

 discovery_url: http://etcd_discovery:2379

 etcdctl_peers: http://etcd:2379

 duplicate_key: FROM_CONFIG_MAP

 REPLACE_ME: a value

kind: PodPreset

apiVersion: settings.k8s.io/v1alpha1

metadata:

 name: allow-database

 namespace: myns

spec:

 selector:

 matchLabels:

 role: frontend

 env:

 – name: DB_PORT

 value: 6379

 – name: duplicate_key

 value: FROM_ENV

 – name: expansion

 value: $(REPLACE_ME)

 envFrom:

 – configMapRef:

 name: etcd-env-config

 volumeMounts:

 – mountPath: /cache

 name: cache-volume

 – mountPath: /etc/app/config.json

 readOnly: true

 name: secret-volume

 volumes:

 – name: cache-volume

 emptyDir: {}

 – name: secret-volume

 secretName: config-details

用戶提交的 Pod

apiVersion: v1

kind: Pod

metadata:

 name: website

 labels:

 app: website

 role: frontend

spec:

 containers:

 – name: website

 image: ecorp/website

 ports:

 – containerPort: 80

經過準入控制 PodPreset 后,Pod 會自動增加 ConfigMap 環境變量

apiVersion: v1

kind: Pod

metadata:

 name: website

 labels:

 app: website

 role: frontend

 annotations:

 podpreset.admission.kubernetes.io/allow-database: resource version

spec:

 containers:

 – name: website

 image: ecorp/website

 volumeMounts:

 – mountPath: /cache

 name: cache-volume

 – mountPath: /etc/app/config.json

 readOnly: true

 name: secret-volume

 ports:

 – containerPort: 80

 env:

 – name: DB_PORT

 value: 6379

 – name: duplicate_key

 value: FROM_ENV

 – name: expansion

 value: $(REPLACE_ME)

 envFrom:

 – configMapRef:

 name: etcd-env-config

 volumes:

 – name: cache-volume

 emptyDir: {}

 – name: secret-volume

 secretName: config-details

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“kubernetes 中如何使用 PodPreset”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計3651字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 吉首市| 临猗县| 连山| 茂名市| 简阳市| 天气| 榆社县| 平原县| 武安市| 凤山县| 西华县| 炎陵县| 诸暨市| 易门县| 垣曲县| 定陶县| 图木舒克市| 长宁县| 裕民县| 大丰市| 郯城县| 田林县| 金平| 怀安县| 句容市| 武陟县| 闽清县| 和龙市| 五常市| 治多县| 银川市| 东兴市| 远安县| 寿宁县| 哈尔滨市| 广灵县| 石阡县| 襄汾县| 梁河县| 定陶县| 三穗县|