Shohhei1126's Blog

Kubernetes on AWS with kopsの話

半年ほどAndroidに出稼ぎにいってたけど一段落したのでサーバに戻ってきた。

もろもろあってここ数週間 Kubernetes を触っております。

はいk8s初心者です。

Kubernetes on AWS

Running Kubernetes on AWS EC2のSupported Production Grade Toolsを見ると本番で使える選択肢が3つあるがうち2つはCoreOS関連(正直よく知らない)。プロジェクトではずっとUbuntuを使ってるのでKubernetes Operationsで進める。

Kubernetes Operations (kops)

Installing Kubernetes on AWS with kopsによるとopinionated provisioning systemとのこと。ニュアンスは Opinionated software って何?を参照。

特徴は以下。

  • 完全自動インストール
  • DNSでクラスタ識別
  • すべてAuto-Scaling Groupsで実行
  • 限られたOSサポート ※ Ubuntuも入ってる
  • High-Availabilityサポート ※ 重要
  • 直接プロビジョニング、もしくはterraformマニフェストを生成 ※ 便利かも

ドキュメントは https://github.com/kubernetes/kops/tree/master/docs が一番よさそう。

NSレコード設定

具体的な手順はさっきあげた Installing Kubernetes on AWS with kops を参照。

Route53にクラスタ用のホストゾーンを作ってNSレコードを引けるようにするのが特徴的なところ。

shohhei1126.jpドメインはお名前.comで取得してるのでそちらにRoute53で払い出されたNSレコードを設定する。

Route53

お名前.com

$ dig NS k8s003.shohhei1126.jp
...
;; ANSWER SECTION:
k8s003.shohhei1126.jp.	15560	IN	NS	ns-702.awsdns-23.net.
k8s003.shohhei1126.jp.	15560	IN	NS	ns-1273.awsdns-31.org.
k8s003.shohhei1126.jp.	15560	IN	NS	ns-1555.awsdns-02.co.uk.
k8s003.shohhei1126.jp.	15560	IN	NS	ns-167.awsdns-20.com.
...

kops create cluster

kops create clusterを実行。ケチって小さいインスタンスタイプを設定してる。

$ kops version
Version 1.6.2 (git-98ae12a)

$ kops create cluster \
    --zones=ap-northeast-1a \
    --node-size t2.micro \
    --master-size t2.micro \
    cluster01.k8s003.shohhei1126.jp

この時点ではまだクラスタが作成されるわけではないがステートを保持するS3バケットにはいくつかファイルが作成される。

コマンド実行時に出力された Will create resources: を眺めるとVPCやSubnet、AutoscalingGroupなど作成されるAWSのリソースが分かる。

実際にクラスタを作成

kops update clusterに–yesオプションを付けると実際に作られる(ちょっと分かりづらい)。

$ kops update cluster cluster01.k8s003.shohhei1126.jp --yes

実行後、AWSコンソールを覗くとVPC, Subnet, EC2インスタンスなど作成されてるのが確認できる。

面白いのがRoute53で最初は仮のIPが当てられて

EC2インスタンスにIPが払い出されたらそれに差し替えられる。

パブリックドメイン api.cluster01.k8s003.shohhei1126.jp にGIPが当たったら kops validate cluster コマンドが叩けるようになる。

$ kops validate cluster cluster01.k8s003.shohhei1126.jp
Validating cluster cluster01.k8s003.shohhei1126.jp

INSTANCE GROUPS
NAME			ROLE	MACHINETYPE	MIN	MAX	SUBNETS
master-ap-northeast-1a	Master	t2.micro	1	1	ap-northeast-1a
nodes			Node	t2.micro	2	2	ap-northeast-1a

NODE STATUS
NAME							ROLE	READY
ip-172-20-37-166.ap-northeast-1.compute.internal	master	True
ip-172-20-44-97.ap-northeast-1.compute.internal		node	True
ip-172-20-54-181.ap-northeast-1.compute.internal	node	True

Your cluster cluster01.k8s003.shohhei1126.jp is ready

クラスタできた 👏

この時点でkopsによってkubernetesのコンテキストが追加されている。

$ kubectl config current-context
cluster01.k8s003.shohhei1126.jp

$ kubectl get node
NAME                                               STATUS         AGE       VERSION
ip-172-20-37-166.ap-northeast-1.compute.internal   Ready,master   11m       v1.6.2
ip-172-20-44-97.ap-northeast-1.compute.internal    Ready,node     9m        v1.6.2
ip-172-20-54-181.ap-northeast-1.compute.internal   Ready,node     9m        v1.6.2

雑感

レールに乗れば楽にkubernetesクラスタを作成できるので新規プロジェクトであればさくっと入れれそう。既存のプロジェクトに入れる場合は既存のVPCやSubnetに追加する必要があるので次回はカスタマイズ方法をみていく。

追伸

wantedlyさんも使ってるとのこと。

https://youtu.be/pgmAw5nUSGA?t=48m22s