手動で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