!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