Kops で起動した Kubernetes クラスタを stop させる

Posted on

Kops を使って AWS 上に Kubernetes クラスタを立ててみましたが、スキマ時間にしか触らないので使わないときはクラスタを stop させたくなりました。

kops delete cluster だと VPC なども含めてクラスタを丸ごと削除します。課金対象の EC2 インスタンスだけ stop する方法を探していると、同じような issue がすでにありました。

やり方は単純で Master と Node を 0 台に設定するだけです。すると Auto Scaling Group によって稼働中のインスタンスが Terminate されます。というわけで、実際に試してみました。

ちなみに、この手順は Kubernetes 上で動いている Docker コンテナのことは一切考慮していません。永続化したいデータがある場合は気はつけてください。

Master と Node の台数を変更する

Master が 1 台、Node が 2 台起動しているクラスタがあります。今回はこれを stop してみます。

$ kops get ig
NAME                    ROLE    MACHINETYPE     MIN     MAX     SUBNETS
master-ap-northeast-1a  Master  m3.medium       1       1       ap-northeast-1a
nodes                   Node    t2.medium       2       2       ap-northeast-1a,ap-northeast-1c

kops edit igmaxSizeminSize を 0 にします。

$ kops edit ig nodes
apiVersion: kops/v1alpha2
kind: InstanceGroup
metadata:
  creationTimestamp: 2017-10-12T08:37:46Z
  labels:
    kops.k8s.io/cluster: k8s.manabusakai.com
  name: nodes
spec:
  image: kope.io/k8s-1.7-debian-jessie-amd64-hvm-ebs-2017-07-28
  machineType: t2.medium
  maxSize: 0
  minSize: 0
  role: Node
  subnets:
  - ap-northeast-1a
  - ap-northeast-1c
$ kops edit ig master-ap-northeast-1a
apiVersion: kops/v1alpha2
kind: InstanceGroup
metadata:
  creationTimestamp: 2017-10-12T08:37:46Z
  labels:
    kops.k8s.io/cluster: k8s.manabusakai.com
  name: master-ap-northeast-1a
spec:
  image: kope.io/k8s-1.7-debian-jessie-amd64-hvm-ebs-2017-07-28
  machineType: m3.medium
  maxSize: 0
  minSize: 0
  role: Master
  subnets:
  - ap-northeast-1a

まだ変更しただけで適用されていないので kops update cluster で適用します。適用すると Node, Master の順に Auto Scaling Group の Desired が 0 台になります。

$ kops update cluster k8s.manabusakai.com --yes
I1016 17:58:31.205177   78958 executor.go:91] Tasks: 0 done / 65 total; 34 can run
I1016 17:58:32.110052   78958 executor.go:91] Tasks: 34 done / 65 total; 13 can run
I1016 17:58:32.687242   78958 executor.go:91] Tasks: 47 done / 65 total; 16 can run
I1016 17:58:33.211014   78958 executor.go:91] Tasks: 63 done / 65 total; 2 can run
I1016 17:58:33.380093   78958 executor.go:91] Tasks: 65 done / 65 total; 0 can run
I1016 17:58:33.380194   78958 dns.go:152] Pre-creating DNS records
I1016 17:58:33.985463   78958 update_cluster.go:247] Exporting kubecfg for cluster
Kops has set your kubectl context to k8s.manabusakai.com

Cluster changes have been applied to the cloud.

Changes may require instances to restart: kops rolling-update cluster

次に起動したいときは、逆の手順で maxSizeminSize を増やせば元に戻ります。

まとめ

少々雑な感じもしますが、検証環境であればこのやり方でも大丈夫でしょう。土日や夜間などは Kubernetes クラスタを stop させてコストを抑えたいですね。