入門 Kubernetes を読んでいる。

- 作者:Kelsey Hightower,Brendan Burns,Joe Beda
- 発売日: 2018/03/22
- メディア: 単行本(ソフトカバー)
読みながら「ほほう」と思ったところについては、自分の趣味用に持っているk8s(GKE)クラスタを相手にコマンドを実行しながら・その結果や過程をメモしながら読み進めることで、理解を深める助けにしていきたいと思う。
Kubernetesクラスタを構成するコンポーネントについて
Kubernetesクラスタを構成するコンポーネント自体も、Kubernetesを使って各ノードにデプロイされている。面白い。これらのコンポーネントは、いずれも kube-system
namespace 内で稼働している。
Kubernetes proxy
- Kubernetes クラスタ内のロードバランスされたServiceに、ネットワークトラフィックをルーティングする役割を担う
- そのため、このコンポーネントはクラスタ内の各ノードで稼働している必要がある
- 各ノードで稼働させるために、DaemonSet が用いられている。
$ kubectl get daemonSets --namespace=kube-system NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE fluentd-gcp-v2.0.17 4 4 4 4 4 beta.kubernetes.io/fluentd-ds-ready=true 30d metadata-proxy-v0.1 0 0 0 0 0 beta.kubernetes.io/metadata-proxy-ready=true 30d nvidia-gpu-device-plugin 0 0 0 0 0 <none> 30d
Kubernetes DNS
- クラスタ内で定義されているServiceのネーミングとディスカバリをおこなうため、DNSサーバも持っている
- DNSサーバは、クラスタ内では、レプリケーションされたServiceとして動作している
- 1つ、もしくは複数のDNSサーバがクラスタ内で動作している
- 数はクラスタのサイズによる。
- DNSサーバは、KubernetesのDeploymentとして稼働している。
$ kubectl get deployments --namespace=kube-system kube-dns NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kube-dns 2 2 2 2 30d
- クラスタのサイズによって数をスケールさせるための Deployments が
kube-dns-autoscaler
。
$ kubectl get deployments --namespace=kube-system kube-dns-autoscaler NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kube-dns-autoscaler 1 1 1 1 30d
- このDNSサーバをロードバランスさせるための Kubernetes Service も動いている。
$ kubectl get services --namespace=kube-system kube-dns NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kube-dns ClusterIP 10.43.240.10 <none> 53/UDP,53/TCP 30d
- 上記のような結果をもつクラスタの場合、クラスタ内の各コンテナ内
/etc/resolv.conf
に10.43.240.10
が設定されている。
Kubernetes GUI
- Kubernetes GUI も Kubernetes コンポーネントを構成するもののひとつ。
- Deployment として管理されている。
$ kubectl get deployments --namespace=kube-system kubernetes-dashboard NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kubernetes-dashboard 1 1 1 1 30d
- GUI にも、ロードバランスのための Service がある。
$ kubectl get services --namespace=kube-system kubernetes-dashboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes-dashboard ClusterIP 10.43.247.50 <none> 443/TCP 30d
- GUIにアクセスするためには、
kubectl proxy
コマンドを用いる。- このコマンドにより、サーバを
localhost:8001
で起動する・http://localhost:8001/ui
から Kubernetes Web GUI が見られる。
- このコマンドにより、サーバを
http://localhost:8001/ui
は 1.10 で廃止予定、以降はhttp://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/
を使用する。- GKE の場合は事前に
gcloud container clusters get-credentials
を実施しておく必要がある。- GKE ダッシュボード | Kubernetes Engine ドキュメント | Google Cloud
- なおかつ、GKEの場合は Kubernetes GUI はサポート外。GKEの管理コンソールを見ることが推奨されている。