!VPSでkubernetesを頑張る

僕が使っているのは海外VPSのvultr
紹介コードを介すると僕が幸せになるのでお願いします
こちらから登録! ->  http://www.vultr.com/?ref=7020612

さて、vultrでマシンを作るところは省略。
ubuntuでメモリ1GB 1CPU Coreのマシンを作る。 これでだいたい月$5のプランのようだ。


!swapを設定しないと大変なことになった。
黙って設定しておく。

https://www.vultr.com/docs/setup-swap-file-on-linux


>>
# dd if=/dev/zero of=/swapfile count=2048 bs=1M
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile
<<

!kubeadmでクラスタを作る
必要なパッケージをインストールする。
>>
# apt-get update && apt-get install -y apt-transport-https
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
 deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt-get update
# apt-get install -y docker.io
# apt-get install -y kubelet kubeadm kubectl kubernetes-cni
<<

kubernetesクラスタの構築
>>
# kubeadm init
(略 結構待つ)

(1台で全部やりたいので、workerにもPodを配置するように設定)
# kubectl taint nodes --all dedicated-


(ネットワークの設定)
# kubectl delete -f https://git.io/weave-kube

(kube-dnsが動かないので無理やり設定を変える)
# kubectl edit deployment kube-dns --namespace=kube-system
(Resourceの制限をすべて消す)

# kubectl get pods --namespace=kube-system
(すべてのpodがRunningになるまで待つ)
<<

これで一応kubernetesができたはず


試しにkubernetes-dashboardをデプロイしてみる
>>
# kubectl create -f https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml

<<

kubernetes-dashboardにアクセスするには、まずNodePortを確認する。
>>
# kubectl get svc --namespace=kube-system
NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
kube-dns               10.96.0.10       <none>        53/UDP,53/TCP   2h
kubernetes-dashboard   10.106.150.108   <nodes>       80:31982/TCP    27m
<<
ここに出ている31982というのがそれ。

>>
http://VPSのIPアドレス:31982
<<
これでアクセスできる。(31982は環境によって違うはずです)



!手元のマシンからkubectlを実行する
いちいちVPSにログインしてkubectlを実行するのもだるい。
幸いkubectlは各OSごとにバイナリが提供されているので、例えばWindowsのノートパソコンから利用できる。

手元からkubernetesクラスタへアクセスするためには向き先や認証情報を取得する必要がある。
そのために
!!/etc/admin.confを手元のマシンにSCPか何かで持ってくる。
好きなやり方でどうぞ

!!kubectlのインストール
手元のマシンの環境に合ったkubectlをインストール(といってもバイナリを落としてくるだけ)
参考: https://kubernetes.io/docs/tasks/kubectl/install/

!!kubectl proxyを実行
>>
$ kubectl --kubeconfig=admin.conf proxy --port=8080
<<

これで、手元のマシンにkubernetesのapiserverへの認証済みのプロキシが作られた。

!!kubectlの使い方
あとは、手元のマシンから

>>
$ kubectl get pods
<<

などと、kubectlコマンドを実行できる。
ここまでできればkubernetesのホストにログインする必要はなくなる。


!注意
kubeadmはまだ開発中のプロダクトのようです。また、master、workerを1台でやるのもセキュリティ上推奨されていないので、あくまでこのやり方はお試し、ということで



!(おまけ)nginx ingress controllerを作ってみる。
URLや、パスでServiceにアクセスさせるためにはingressを使うのが良い。そのためにnginx ingress controllerを使うことにする。

まずはDNSを登録しておく必要がある(もちろんアクセスするマシンの/etc/hostsを編集しても同じことはできますが、外からアクセスできなくてつまらない)
無料で使えるtkドメインはこちら http://www.dot.tk/ja/index.html
柔軟に設定したい場合、SSLを設定したい場合はcloudflareを組み合わせて使うのが良い https://www.cloudflare.com/

- https://github.com/kubernetes/contrib/blob/master/ingress/controllers/nginx/examples/default/rc-default.yaml
-- これをnamespace=kube-systemにデプロイ
- https://github.com/kubernetes/contrib/blob/master/ingress/controllers/nginx/examples/default-backend.yaml
-- これをnamespace=kube-systemにデプロイ

default-http-backend に対応するServiceを作る。

>>
# kubectl expose deployment default-http-backend --port=80 --target-port=8080 --name=default-http-backend --namespace=kube-system
<<

こんなリソースを作る
>>
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kubedash
  namespace: kube-system
spec:
  rules:
  - host: <ドメイン>
    http:
      paths:
      - path: /
        backend:
          serviceName: kubernetes-dashboard
          servicePort: 80
<<

ここまでやると、設定したドメインでkubernetes-dashbordにアクセスできるようになった。
サブドメインを増やして、ingressも増やせば、これでいくつもサービスっぽいものを作ることができる。


!(おまけ)メトリクスをとる

http://qiita.com/kkohtaka/items/59007f0ada56d9f9a8f4
ここを参考に


>>
prometheusを束ねるserviceを作成
$ kubectl create -f https://raw.githubusercontent.com/kkohtaka/kubernetes-metrics/master/prometheus/service.yml

prometheusを作成
$  kubectl create -f https://raw.githubusercontent.com/kkohtaka/kubernetes-metrics/master/prometheus/deployment.yml

prometheusの設定を作成
$ kubectl create -f https://raw.githubusercontent.com/kkohtaka/kubernetes-metrics/master/prometheus/configmap.yml
<<


prometheusのUIを確認してみる
>>
$ kubectl get svc prometheus
NAME         CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
prometheus   10.103.242.223   <nodes>       9090:30090/TCP   1m
<<

PORTSのところの30090に注目

>>
http://VPSのIPアドレス:30090
<<

にアクセス
prometheusの画面がでた!



CPUやメモリの様子が見たいのでnode-exporterを入れる

>>
$ kubectl create -f https://raw.githubusercontent.com/kkohtaka/kubernetes-metrics/master/node-exporter/daemonset.yml
<<



grafanaもほしいな。。
https://github.com/kkohtaka/kubernetes-metrics/blob/master/grafana/deployment.yml
これを借りてくる (きっと準備はしたけど記事にはしていないパターンだろう)


>>
$ kubectl create -f https://github.com/kkohtaka/kubernetes-metrics/raw/master/grafana/deployment.yml
$ kubectl create -f https://github.com/kkohtaka/kubernetes-metrics/raw/master/grafana/service.yml
<<

>>
$ kubectl get svc grafana
NAME      CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
grafana   10.103.143.142   <nodes>       3000:30000/TCP   8s
<<



てきとーにgrafanaを設定したら、メトリクスが見えるようになった。

kubernetes-dashboardの参照だけできるような奴がほしいな。
5643382
wiki
1491129676