Help us understand the problem. What is going on with this article?

GKEでConcourseを使うには

More than 1 year has passed since last update.

概要

ConcourseをGKEで動かすには注意すべき点があります。
インストール自体はhelmのchartsを使用すると、コマンド一つで完了しとても簡単です。
しかしResourseを登録しJobを動かすと、さまざまなエラーが立ちはだかります。

これまで私が踏んできたGKEでConcourseを使うためのハマリポイントについて説明します。

環境

  • Kubernetes(GKE): v1.9.2
  • Concourse: v3.9.0
  • COS: v4.4.86+

ハマリポイント

NodePoolのイメージ選択

必須ではないですがイメージタイプは標準のCOSではなくUbuntuが使用することがベターです(2018-02-22時点)。
このIssueで報告されていますが、overlaybrtfsがCOSでは使用できないためです。

concourse.baggageclaimDriverの選択

イメージタイプの選択により設定が変わります。
Ubuntuであればnaivebtrfsoverlayが動作します。
2018-02-21時点ではoverlayがデフォルト値となっており、とりあえず試すにはoverlayで問題ありません。

ただしv3.9.0ではbtrfsの動作がfixされているため、今後はbtrfsがデフォルト値に戻る可能性があります。

COSで使用できるのはnaiveで、その他を選択するとエラーが発生します。

エラー内容の例

{"error":"failed to create btrfs filesystem: exit status 32"}}
runc run: exit status 1:
container_linux.go:348: starting container process caused
process_linux.go:402: container init caused
rootfs_linux.go:58: mounting "/concourse-work-dir/3.9.0/assets/bin/init" to rootfs "/concourse-work-dir/volumes/live/{id}/volume/rootfs" at "/concourse-work-dir/volumes/live/{id}/volume/rootfs/tmp/garden-init" caused
"open /concourse-work-dir/volumes/live/{id}/volume/rootfs/tmp/garden-init: permission denied"

MTUの設定を変更する

変更しなくても基本的な動作はするので、一番ハマった場所です。

Concourseのコンテナにはgardenが使用されており、MTUのデフォルト値は1500になっています。
しかしGCPのMTUは1440であるため、そのまま起動するとネットワーク遅延、パケットロスが生じます。
GKEではない場合もConcourseの処理が遅いと感じたら、MTUの設定を確認すると良いと思います。

試してみる(おまけ)

helmchartsを使った検証手順です。

事前にインストールしておくもの

  • gcloud
  • kubectl
  • helm
  • fly
# クラスター作成
local$ gcloud beta container --project "xxx" \
  clusters create "devops-cluster" \
  --zone "asia-northeast1-a" \
  --image-type "UBUNTU" \
  --username "admin" \
  --cluster-version "1.9.2-gke.1" \
  --machine-type "n1-highcpu-8" \
  --disk-size "100" \
  --scopes "https://www.googleapis.com/auth/cloud-platform" \
  --num-nodes "1" \
  --network "default"

# kubectlの操作クラスターを設定
local$ gcloud container clusters get-credentials devops-cluster --project "xxx"

# Concourse用のRBAC設定作成
local$ cat > tiller.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: tiller-clusterrolebinding
subjects:
- kind: ServiceAccount
  name: tiller
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: ""

# RBAC適用
local$ kubectl apply -f tiller.yaml

# helm初期化
local$ helm init --service-account tiller

# インストール完了しているか確認
local$ helm version

# マニフェストをダウンロード
local$ helm fetch --untar stable/concourse

# パッチ作成
local$ cat > mtu.patch
--- concourse/templates/worker-statefulset.yaml.bk  2018-02-22 11:14:39.000000000 +0900
+++ concourse/templates/worker-statefulset.yaml 2018-02-22 11:13:23.000000000 +0900
@@ -57,6 +57,8 @@
                   - "-c"
                   - "concourse retire-worker --name=${HOSTNAME}"
           env:
+            - name: CONCOURSE_GARDEN_MTU
+              value: "1440"
             - name: CONCOURSE_TSA_HOST
               valueFrom:
                 configMapKeyRef:

# パッチ適用
local patch -p0 < mtu.patch

# Concourseインストール
local$ helm install \
  --set=imageTag=3.9.0,concourse.baggageclaimDriver=overlay,web.service.type=LoadBalancer,worker.replicas=1 \
  --name concourse \
  ./concourse

# EXTERNAL-IPが配布されるまで待つ
local$ kubectl get svc concourse-web -w
NAME            TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
concourse-web   ClusterIP   10.3.245.140   xxx.xxx.xxx.xxx        8080/TCP,2222/TCP   34s

# ログインする
# ipass=concourse:concourse
local$ fly -t test login --concourse-url http://xxx.xxx.xxx.xxx:8080

# タスクを作成
local$ cat > run.yaml
platform: linux
image_resource:
  type: docker-image
  source: {repository: busybox}
run:
  path: sh
  args:
  - -ec
  - |
    echo Welcome concourse!!

# タスクを実行
local$ fly -t test execute -c run.yaml

最後に

GKEに関連したConcourseのハマリポイントは以上です。
インストールしたけど、動作しないのでとりあえず放置……という方の助けになれば!

その他にもJOB定義や運用していく際のハマリポイントをまとめたのでどぞ!

watawuwu
Rust、Scala、Golang、PHPでアプリ開発、GCPを活用したインフラ構築、ConcourseCIを使ったDevOps、Kubernetes!!
https://www.3bi.tech
zlab
技術で新しい世界へシフトする。
https://zlab.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away