LoginSignup
0
0

[k8s] KustomizeでCustomResourceへの参照にnamePrefixがつかない問題

Last updated at Posted at 2024-05-22

はじめに

この記事では、Kustomize で namePrefix や nameSuffix を使う際に、Custom Resource への参照に prefix や suffix がついてくれない問題について解説します。

環境

$ kustomize version
v5.4.1

問題

Kustomize には、namePrefixnameSuffix といった機能があります。これを使うことで、リソースの名前に prefix や suffix をつけることができます。

参考: https://kubectl.docs.kubernetes.io/references/kustomize/kustomization/nameprefix/

File Input

# deployment.yaml
apiVersion: v1
kind: Deployment
metadata:
  name: gd
spec:
  template:
    spec:
      containers:
        - name: gd
          env:
            - name: HOGE
              valueFrom:
                secretKeyRef:
                  name: gs
                  key: username
# secret.yaml
apiVersion: animal/v1
kind: Secret
metadata:
  name: gs
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deployment.yaml
  - secret.yaml
namePrefix: sample-

Build Output

apiVersion: animal/v1
kind: Secret
metadata:
  name: sample-gs
---
apiVersion: v1
kind: Deployment
metadata:
  name: sample-gd
spec:
  template:
    spec:
      containers:
        - env:
            - name: HOGE
              valueFrom:
                secretKeyRef:
                  key: username
                  name: sample-gs # 参照するSecretの名前が変わる
          name: gd

上の例で示すように、DeploymentSecretなどの Kubernetes にもともとあるオブジェクトであれば、それを参照する部分の名前も prefix がついてくれます。

しかし、以下の例に示すように、Custom Resource を参照する場合には prefix がつきません。

kind: Secretの部分をkind: MyCustomResourceに変更してみます:

File Input

# deployment.yaml (変更なし)
apiVersion: v1
kind: Deployment
metadata:
  name: gd
spec:
  template:
    spec:
      containers:
        - name: gd
          env:
            - name: HOGE
              valueFrom:
                secretKeyRef:
                  name: gs
                  key: username
# secret.yaml
apiVersion: animal/v1
kind: MyCustomResource # <-- Changed!
metadata:
  name: gs
# kustomization.yaml (変更なし)
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deployment.yaml
  - secret.yaml
namePrefix: sample-

Build Output

apiVersion: v1
kind: Deployment
metadata:
  name: sample-gd
spec:
  template:
    spec:
      containers:
        - env:
            - name: HOGE
              valueFrom:
                secretKeyRef:
                  key: username
                  name: gs # 参照するリソースの名前にPrefixがつかない!
          name: gd
---
apiVersion: animal/v1
kind: MyCustomResource
metadata:
  name: sample-gs

すると、kind: MyCustomResourceを参照する部分の名前には prefix がついてくれません。

このままkubectl applyすると、could not find the requested resourceのエラーが発生します。

解決策

nameReferenceを指定することで、Custom Resource を参照する部分にも prefix をつけることができます。

参考: https://github.com/kubernetes-sigs/kustomize/blob/master/examples/transformerconfigs/README.md#name-reference-transformer

File Input

# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deployment.yaml
  - secret.yaml
namePrefix: sample-
configurations:
  - namereference.yaml # <-- New!
# namereference.yaml
nameReference:
  - kind: MyCustomResource # 追加するCustomResourceのkind
    fieldSpecs:
      - kind: Deployment
        path: spec/template/spec/containers/env/valueFrom/secretKeyRef/name # 参照元リソースのpath

Build Output

apiVersion: v1
kind: Deployment
metadata:
  name: sample-gd
spec:
  template:
    spec:
      containers:
        - env:
            - name: HOGE
              valueFrom:
                secretKeyRef:
                  key: username
                  name: sample-gs # 参照するリソースの名前にprefixがつく
          name: gd
---
apiVersion: animal/v1
kind: MyCustomResource
metadata:
  name: sample-gs

これで、Custom Resource を参照する部分にも prefix がついた状態でリソースを作成することができます。

まとめ

今回は CustomResource への参照に prefix がつかない問題について解説しました。nameReferenceを使うことで、Custom Resource を参照する部分にも prefix をつけることができます。

今後はこれを活用して Staging 環境の構築を行っていこうと思います。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0