vagrant
CoreOS
kubenetes

VagrantでKubernetesクラスタを立てる

More than 1 year has passed since last update.

http://kubernetes.io/v1.1/docs/getting-started-guides/vagrant.html

がVagrantの公式ドキュメントだが、OSがFedoraよりCoreOSの方が良かったり、ドキュメントがCoreOSの人がちゃんとメンテしていて読みやすかったりするので、CoreOSの公式ドキュメントの

http://kubernetes.io/v1.1/docs/getting-started-guides/coreos.html

のMulti-nodeを立てるドキュメント

https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant.html

を使う。

kubectl の設定

kubectlは既にgcloudのコマンドでインストール済み (cf. gcloudでのkubectlのインストール )

$ which kubectl
/Users/awakia/google-cloud-sdk/bin/kubect

1からのインストールではないので、kubectlが扱うクラスタ環境の切り替えを考えないといけない。

対象クラスタの変更

まずはkubectlした時にgcloudをいじる設定になっているのを変える。
とりあえず、現状確認:

$ kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: REDACTED
    server: https://104.155.208.215
  name: gke_kube-test-awakia_asia-east1-a_cluster-1
contexts:
- context:
    cluster: gke_kube-test-awakia_asia-east1-a_cluster-1
    user: gke_kube-test-awakia_asia-east1-a_cluster-1
  name: gke_kube-test-awakia_asia-east1-a_cluster-1
current-context: gke_kube-test-awakia_asia-east1-a_cluster-1
kind: Config
preferences: {}
users:
- name: gke_kube-test-awakia_asia-east1-a_cluster-1
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    password: CdsJ7IG1H1laOofO
    username: admin

ここから設定

$ kubectl config set-cluster vagrant --server=https://172.17.4.101:443 --certificate-authority=${PWD}/ssl/ca.pem
$ kubectl config set-credentials vagrant-admin --certificate-authority=${PWD}/ssl/ca.pem --client-key=${PWD}/ssl/admin-key.pem --client-certificate=${PWD}/ssl/admin.pem
$ kubectl config set-context vagrant --cluster=vagrant --user=vagrant-admin
$ kubectl config use-context vagrant

詳細は https://coreos.com/kubernetes/docs/latest/configure-kubectl.html 参照。
これを打ったあとkubectl config viewは以下のように変わる

kubctl_config_view
 apiVersion: v1
 clusters:
 - cluster:
     certificate-authority-data: REDACTED
     server: https://104.155.208.215
   name: gke_kube-test-awakia_asia-east1-a_cluster-1
+- cluster:
+    certificate-authority: /Users/awakia/src/github.com/coreos/coreos-kubernetes/multi-node/vagrant/ssl/ca.pem
+    server: https://172.17.4.101:443
+  name: vagrant
 contexts:
 - context:
     cluster: gke_kube-test-awakia_asia-east1-a_cluster-1
     user: gke_kube-test-awakia_asia-east1-a_cluster-1
   name: gke_kube-test-awakia_asia-east1-a_cluster-1
+- context:
+    cluster: vagrant
+    user: vagrant-admin
+  name: vagrant
-current-context: gke_kube-test-awakia_asia-east1-a_cluster-1
+current-context: vagrant
 kind: Config
 preferences: {}
 users:
 - name: gke_kube-test-awakia_asia-east1-a_cluster-1
   user:
     client-certificate-data: REDACTED
     client-key-data: REDACTED
     password: CdsJ7IG1H1laOofO
     username: admin
+- name: vagrant-admin
+  user:
+    client-certificate: /Users/awakia/src/github.com/coreos/coreos-kubernetes/multi-node/vagrant/ssl/admin.pem
+    client-key: /Users/awakia/src/github.com/coreos/coreos-kubernetes/multi-node/vagrant/ssl/admin-key.pem

シェルで打ったコマンドとの対応もわかりやすいDiffになっている。
つまり今後のGKEとの切り替えは、

$ kubectl config use-context gke_kube-test-awakia_asia-east1-a_cluster-1

だけで出来る。

CoreOS+Kubernetes の Vagrant を立てる

$ git clone https://github.com/coreos/coreos-kubernetes.git
$ cd coreos-kubernetes/multi-node/vagrant
$ vagrant up

で終わり。このgitリポジトリには他にも同じ設定でawsに立てるようのGoのプログラムも用意されていたりする。

クラスタの構成の変更は、基本的なものなら

$ cp config.rb.sample config.rb

して、できる以下のファイルをいじればOK。

config.rb
$update_channel="alpha"

$controller_count=1
$controller_vm_memory=512

$worker_count=1
$worker_vm_memory=512

$etcd_count=1
$etcd_vm_memory=512

設定できたか確認

kubectl get nodes
NAME           LABELS                                STATUS
172.17.4.201   kubernetes.io/hostname=172.17.4.201   Ready

vagrantの方のStateがきちんと見えていればOK。

クラスタ上に載せるもの

kubernetes で Go言語実装のGuestbookを立ててみるのとか良い

http://kubernetes.io/v1.1/examples/guestbook-go/README.html