Kubernetes on AWS with kopsの話(初心者)

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

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

はいk8s初心者です。

Kubernetes on AWS

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

Kubernetes Operations (kops)

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

特徴は以下。

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

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

NSレコード設定

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

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さんも使ってるとのこと。

youtu.be

Ubuntu16でElasticsearch5を構築

以前すでに構築されたものを運用したことはあるけど設計や構築の細か所とか見てなかったので何回かに分けてGetting Started的なものをやってみる。

Vagrantでささっと触れる環境を作る。

bento/ubuntu-16.04 がなければ以下で入る(はず)

$ vagrant box add bento/ubuntu-16.04 --provider virtualbox

./Vagrant ファイル

Vagrant.configure(2) do |config|
  config.vm.box = "bento/ubuntu-16.04"
  config.vm.network "private_network", ip: "192.168.99.11"
  # root権限で ./provision.sh を実行する
  config.vm.provision :shell, :path => "./provision.sh", :privileged => true
end
続きを読む