!もう一回やる

!vultr再インストール
Ubuntu 17.10 x64 に入れ替える

!master, worker setup

https://kubernetes.io/docs/setup/independent/install-kubeadm/

>> code bash
# apt-get update
# apt-get upgrade
# reboot
<<
カーネルがアップデートしたので再起動しておく。

>> code bash
# apt-get install -y docker.io
<<

>> code bash
# 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 kubelet kubeadm kubectl
<<

kubernetesでは推奨されていないがswapを有効にする。

>>
# dd if=/dev/zero of=/swapfile count=2048 bs=1M
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile
# echo "/swapfile   none    swap    sw    0   0" >> /etc/fstab
<<

! master setup
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

>> code bash
# kubeadm init --ignore-preflight-errors=Swap
<<

--ignore-preflight-errors=Swap はSwapの確認を飛ばしてセットアップをする。

なんかエラーが出て進まない。
>>
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10255/healthz' failed with error: Get http://localhost:10255/healthz: dial tcp [::1]:10255: getsockopt: connection refused.
<<

kubeletがswaponだと起動しないのでオプションを追加する

>> code bash
#  vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
<<

 --fail-swap-on=false を引数に追加する

>> code bash
# systemctl daemon-reload
# systemctl restart kubelet
# kubeadm reset
<<

やり直し。
>>  code bash
# kubeadm init --ignore-preflight-errors=Swap
<<

kubeadm join ..... を記録しておく。

! worker setup

kubeletがswaponだと起動しないのでオプションを追加する

>> code bash
#  vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
<<

 --fail-swap-on=false を引数に追加する

>> code bash
# systemctl daemon-reload
# systemctl restart kubelet
<<


記録しておいたkubeadm join .... の末尾に  --ignore-preflight-errors=Swapを追加して入力


!手元のPC
masterからadmin.confを持ってくる

こんなファイルをバックグラウンドで実行する

>>
kubectl --kubeconfig=admin.conf proxy  --port=8080 --disable-filter=true --accept-hosts='^*$' --reject-paths='^$'
<<

これでkubectlが実行できる

>>
$ kubectl get nodes
NAME         STATUS     ROLES     AGE       VERSION
kubernetes   NotReady   master    5m        v1.9.3
worker01     NotReady   <none>    2m        v1.9.3
<<

まだNotReadyだ。

weaveをCNIプラグインとしてデプロイする。

>> code bash
$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=1.9"
<<

>> code bash
$ kubectl get nodes
NAME         STATUS    ROLES     AGE       VERSION
kubernetes   Ready     master    7m        v1.9.3
worker01     Ready     <none>    3m        v1.9.3
<<

無事Readyとなった。

!!prometheusを入れる。

>>
$ kubectl apply -f monitoring/prometheus/
configmap "alertmanager-config" created
deployment "alertmanager" created
service "alertmanager" created
ingress "alertmanager" created
configmap "prometheus-config" created
deployment "prometheus" created
daemonset "node-exporter" created
service "prometheus" created
<<

少し待つと
http://masterサーバのIP:30090/targets
からprometheusが見える。

!!grafanaを入れる

>> code bash
$ kubectl apply -f monitoring/grafana/
deployment "monitoring-grafana" created
job "grafana-import-dashboards" created
service "monitoring-grafana" created
<<

prometheusの設定をする。

なぜかダッシュボードが追加できない。Podから外のDNSがひけないようだ。

!!kube-dns設定
期待としてはkubernetesの内部ドメインでなければホストのDNSを参照するのだと思っていたが、、

https://github.com/kubernetes/kubernetes/issues/45828 

これっぽい
ubuntuはdns解決に内部で起動しているdnsサーバに委譲するようなことをやってたが、その仕組みとバッティングするようだ。

下記ConfigMapを入れることでセカンダリとしてGoogleのDNSを引くようにする。

>>
apiVersion: v1
kind: ConfigMap
metadata:
  name: kube-dns
  namespace: kube-system
data:
  upstreamNameservers: |
    ["8.8.8.8", "8.8.4.4"]
<<

kube-dnsの設定は勝手に反映された。

!!prometheusのスクレイピングが実施されない
なぜだ・・?
RBACの設定がおかしかった。再設定して適用しなおし。

!!ingressをデプロイ

>> code bash
$ kubectl apply -f nghttpx-ingress
<<

5643382
wiki
1519802288