Day-to-day the memorandum

やったことのメモ書きです。

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を変えました。

おわりに

ちゃんとドキュメントを読みましょうね!!!!!!!!!!!!!!!