フラミナル

考え方や調べたことを書き殴ります。IT技術系記事多め

Podにannotationやlabel情報をマウントして環境ごとに振る舞いを変えられるようにする

Kubernetes

ユースケースとしてマルチクラスタのKubernetesなどを利用している場合、同じPodであってもロケーションや役割によってびみょーにやりたいことや振る舞いを変えたいケースがあります。かといって少しづつ変更するのは面倒…。

たいていのケースの場合、マルチクラスタ管理する側で対象のNodeの属性などをlabelannotationとしてpodに情報を追加してくれています。ですのでこれによって振る舞いを変えてみましょう。

全体像

sidecarやinit-container、振る舞いをかえるappについては省略します。。。(そんなに難しい話でもないので)

annotations/labelをマウントするmanifest

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      annotations:
        zone: zone-A
        role: test-role-A
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        volumeMounts:
          - name: podinfo
            mountPath: /etc/podinfo
      volumes:
        - name: podinfo
          downwardAPI:
            items:
              - path: "annotations"
                fieldRef:
                  fieldPath: metadata.annotations
              - path: "labels"
                fieldRef:
                  fieldPath: metadata.labels