この記事はOpenSaaS Studio Advent Calendar 2019の10日目の記事。完全に穴埋めなのでたいしたネタではない。
CI中のみに必要なクラスタ
マニフェストのCIをしたい欲求と、大阪でCircleCI ユーザーコミュニティミートアップ#2で喋る必要が生じたので、最近使ってなかったCircleCIを使って、CI時の揮発的なKubernetesクラスタを作りたかった。
ちなみに昨日のLTのスライドはこちら。
.circleci/config.yml
のスニペットは次のような感じ。
version: 2
jobs:
kind:
machine:
image: circleci/classic:201808-01
steps:
- checkout
- run:
name: Install kubectl
command: |
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.16.3/bin/linux/amd64/kubectl
chmod +x kubectl
sudo mv kubectl /usr/local/bin
- run:
name: Install kubernetes cluster with kind
command: |
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.6.1/kind-linux-amd64
chmod +x kind
sudo mv kind /usr/local/bin
- run:
name: Start cluster
command: |
kind create cluster --name test-cluster --image kindest/node:v1.14.9
- run:
name: Waiting for ready
command: |
READY=""
while [ "$READY" != "True" ]
do
sleep 2
READY=`kubectl get node -o=jsonpath='{range .items[*]}{range @.status.conditions[?(@.type == "Ready")]}{@.status}{end}{end}'`
done
echo "Node is ready"
echo "Current running pods are the follows:"
kubectl get --all-namespaces pod
まあLT用に作ったネタということもあり、実用に耐えれるかという検証は十分になされていない。というか、現状は無理だと思う。クラスタの起動に1m30s、そこからReadyまでにさらに1mだし、さらにアプリケーションをデプロイしてという感じだとさらに数分かかる。
あとは大きなアプリケーションだとCircleCIのリソース上乗り切らないし、さらにcurl打ってもなんかやけに重い感じがした。
現状は普通に外部のクラスタにリモートでつないで、揮発的なNamespace切ってという感じが関の山な感はする。できればクラスタレベルでやりたいというのはあるので、現時点でのベストプラクティスあったら教えてほしいくらいである。