k8sでDroneを動かそうとしたらポートをバインドできなかった
GKEにDroneを構築していて、以下のようなログが出て起動できませんでした。
原因を探るのに手こずったので、戒めのためにメモを残しておきます。
{"port":"tcp://10.209.3.136:80","host":"hoge.hoge.jp","proto":"https","msg":"starting the http server","url":"http://hoge.hoge.jp","level":"info","acme":false}
バージョン
Drone:1.0.0
GKE :1.12.6-gke.7
Manifest file
DeploymentとServiceを以下のように書いていました。
--- apiVersion: apps/v1 kind: Deployment metadata: name: drone-server labels: app: drone-server spec: replicas: 1 selector: matchLabels: app: drone-server template: metadata: labels: app: drone-server spec: containers: - name: drone image: drone/drone:1.0.0 env: - name: DRONE_KUBERNETES_ENABLED value: true - name: DRONE_GITHUB_SERVER value: https://github.com - name: DRONE_GITHUB_CLIENT_ID value: xxxxxxxxxxxxxxxx - name: DRONE_GITHUB_CLIENT_SECRET value: xxxxxxxxxxxxxxxxx - name: DRONE_RPC_SECRET value: xxxxxxxxxxxxxxxx - name: DRONE_SERVER_HOST value: hoge.hoge.jp - name: DRONE_SERVER_PROTO value: http ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: drone-server spec: selector: app: drone-server ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancer ---
原因
Droneの環境変数にDRONE_SERVER_PORT
というのがあります。
DRONE_SERVER_PORT
その名の通りDroneのPortを設定する環境変数です。
そしてKubernetesのServiceのドキュメントを見てみます。
Services - Kubernetes
Serviceを見つける手段としてServiceの情報をPodの環境変数にセットします。
この中に{SVCNAME}_PORT
があります。
つまりdrone-server
というNameのServiceを作ったことによりDRONE_SERVER_PORT
という環境変数をDroneのPodの環境変数にセットしまい、Droneはそれを読み込んで起動しようとして失敗したのでした。
対処
ServiceのNameを変えました。
おわりに
ちゃんとドキュメントを読みましょうね!!!!!!!!!!!!!!!