GAミント至上主義

Web Monomaniacal Developer.

Cloud BuildでGKEにデプロイするときに「Error: secret "key-name" not found」で死ぬ

手動でkubectlコマンドでデプロイは問題ないのに下記を参考にCloud BuildでGKEのデプロイをしたら「CreateContainerConfigError」でなかなかビルドが終了しなかった。

podの状態をみると下記のような感じ

$ kubectl get po 
NAME                                READY   STATUS                       RESTARTS   AGE
airflow-flower-6849d5d5f6-zkj68     1/1     Running                      0          97s
airflow-scheduler-cc87fcbdc-q8s8g   0/1     CreateContainerConfigError   0          96s
airflow-webserver-bb449df68-zrbn4   0/1     CreateContainerConfigError   0          94s
airflow-worker-84f59d9557-rvtqm     0/1     CreateContainerConfigError   0          91s
postgres-68cb748b6-6pfmp            1/1     Running                      0          3h36m
redis-57dd9fcc46-wphnj              1/1     Running                      0          3h36m


詳細を確認するとsecretが見つからないと出てた。

$ kubectl describe pod
# 省略
Warning  Failed     6s (x12 over 2m23s)  kubelet, gke-airflow-10-default-pool-73510068-2vnc  Error: secret "fernet-key" not found

権限まわりを確認したが問題なさそう。

secretsを確認してみるとnameにハッシュがついていた。

$ kc get secrets
NAME                       TYPE                                  DATA   AGE
default-token-922k6        kubernetes.io/service-account-token   3      5h14m
fernet-key-5tkdf8mdgd      Opaque                                1      5h10m


そういえばsecretsはkustomization.yamlで作成してたのでデフォルトでハッシュをつけるようになっており、Cloud Build側ではそれが動いてないのが原因っぽい。

応急処置となるがハッシュを付けないオプションがあったので、それで対応した。

secretGenerator:
- name: postgres-pass
  literals:
  - password=***
- name: fernet-key
  literals:
  - key=****
generatorOptions:
  disableNameSuffixHash: true
resources:
  - airflow.yaml
  - postgres.yaml
  - redis.yaml
  - ingress.yaml
  - certificate.yaml