[英]Kustomize patch with target namespace
我正在嘗試根據 target:namespace 有選擇地應用補丁,但它不起作用。
# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
patches:
- path: deployment-imagepullpolicy-prod.json
target:
kind: Deployment
namespace: prod
# base/kustomization.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: app
spec:
template:
spec:
containers:
- name: app
imagePullPolicy: Always
# base/deployment-imagepullpolicy-prod.json
[
{
"op": "replace",
"path": "/spec/template/spec/containers/0/imagePullPolicy",
"value": "IfNotPresent"
}
]
# app/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../base
namespace: prod
當我生成資源( kubectl kustomize app
)時,補丁不存在。 如果刪除了 target:namespace 限制,那么它就可以工作。
根據@larks 的回答,我做了一些測試。
首先,我的用例:我有一堆應用程序覆蓋,里面有環境覆蓋,我們默認使用Always
圖像拉取策略,但我們需要該產品環境使用ifNotPresent
策略。 今天我們使用patchesStrategicMerge
做到這一點,但是這種方法會受到人為失敗的影響,因此將選擇性補丁應用於創建的任何新應用程序,無需人工交互,會很棒。
現在,測試:
當您在base
中運行kustomize
時,您的base
目錄中的任何補丁都需要正確運行。 因為您沒有在base
中設置namespace: prod
,所以該補丁將永遠無法工作。
即使您將補丁移動到您的app
覆蓋中,它也不會像您當前使用的那樣工作,因為補丁是在您的kustomization.yaml
中的namespace
指令之前應用的,因此namespace: prod
條件永遠不會匹配。
但是,我認為這種安排沒有意義:只需為不同的命名空間使用不同的覆蓋。
在這種情況下,我認為解決方案是將補丁移動到app
覆蓋並刪除namespace: prod
條件,以便您擁有這樣的布局:
.
├── app
│ ├── deployment-imagepullpolicy-prod.json
│ └── kustomization.yaml
└── base
├── deployment.yaml
└── kustomization.yaml
app/kustomization.yaml
看起來像:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../base
namespace: prod
patches:
- path: deployment-imagepullpolicy-prod.json
target:
kind: Deployment
namespace: prod
更新
Kustomize 創建一個管道。 當你寫這樣的東西時:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../base
namespace: prod
這意味着,有效地:
../base
中運行kustomize
因此,當您在base
目錄中運行kustomize
時,需要應用base
目錄中的任何補丁。 正如您當前編寫的那樣,您的補丁不適用於base
中的任何資源,因此它實際上是無操作的。
應用該補丁的唯一方法是將其移動到app
覆蓋中並刪除namespace
條件。 因為您要在app/kustomization.yaml
中設置namespace: prod
,所以在補丁上使用namespace
條件沒有任何意義:您的所有資源都將具有namespace: prod
,因此該條件沒有意義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.