Kubernetesの公式チュートリアルをやってみる その3 では Deployment を作成して自動的にアプリが起動するところまでを取り扱いました。
この記事のチュートリアルでは Pod
と Node
について取り扱います。
Google Cloud Nextに参加したりその他雑用で記事が止まっていたのは見なかったことに。
注意 && disclaimer
翻訳・意訳が主目的ではないのでいろいろ端折ったりすることがあります。
明らかな間違いはしないつもりですが、何かあれば優しくツッコんであげてください。
→記事のまとめは Kubernetesの公式チュートリアルをやってみる その1 にあります。
本記事の取り扱う範囲
Viewing Pods and Nodes の内容を扱います。
Viewing Pods and Nodes
その3 で扱った Pod
と その2 で扱った Node
関連の内容
Pod
-
Pod
とは、『コンテナ化アプリをホストするための仮想領域』を指す。 -
Pod
内には複数のコンテナ化アプリを配置することができ、同一Pod
内のコンテナは以下を共有する。- ボリューム
- クラスタ内でのIPアドレス
- イメージのバージョンや利用ポートなどの起動方法に関する情報
-
Pod
内の各コンテナは常に同じNode
上に配置され、同じスケジューリングの対象になる。- コンテナの開始~破棄まで同時に行われる。
- WebApp と WebServer のように密関係になるコンテナを同一
Pod
内に配置するのが望ましい。
Node
-
Pod
を実行するためのワーカーマシンを指す。- 物理マシン・仮想マシンいずれで構築されてもよい。
-
Node
上では複数のPod
を実行することができる。 - master はクラスタ内にある
Node
のリソース状況を確認して適宜Pod
の配置をスケジューリングする。 -
Node
内では最低限以下のものが実行されている。- kubelet : master を通信してPodやコンテナを管理するエージェントプロセス
- Docker や rkt などのコンテナランタイム
Troubleshooting with kubectl
- コンテナを運用するにあたって利用できるkubectlでのサブコマンドの説明。
-
kubectl get
- Kubernetes上の指定リソース一覧を表示
-
kubectl get node
:Node
一覧を表示
-
kubectl describe
- 指定リソースの詳細情報を表示
- get では1リソース1行だが descdibe では複数行で細かく表示する。
-
kubectl describe pod
:Pod
の詳細を表示1
- 指定リソースの詳細情報を表示
-
kubectl logs
- 指定
Pod
内で稼働するコンテナのログを表示する。
- 指定
-
kubectl exec
- 指定
Pod
内の指定コンテナ上でコマンドを実行する。
- 指定
Interactive Tutorial
Estimate Time: 10分
-
kubectl get pod
-
その3 でも扱った
Pod
をリストするコマンド。
-
その3 でも扱った
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-5c69669756-nxf8c 1/1 Running 0 2m
-
kubectl describe pod
-
Pod
の詳細情報を表示するコマンド。 - describe は人が目視するために表示を整形しているため、スクリプト解析などには適さない。
- スクリプトへ渡すのであれば
kubectl get
に-o json
や-o yaml
を渡すと詳細情報を指定フォーマットで表示してくれる。2
- スクリプトへ渡すのであれば
-
$ kubectl describe pod
Name: kubernetes-bootcamp-5c69669756-nxf8c
Namespace: default
Node: minikube/172.17.0.38
Start Time: Tue, 25 Sep 2018 16:48:29 +0000
Labels: pod-template-hash=1725225312
run=kubernetes-bootcamp
Annotations: <none>
Status: Running
IP: 172.18.0.2
Controlled By: ReplicaSet/kubernetes-bootcamp-5c69669756
Containers:
kubernetes-bootcamp:
Container ID: docker://a22ae83236c0ee74b041bf895de6174a5fadc46146006e48af78959cffae8c6b
Image: gcr.io/google-samples/kubernetes-bootcamp:v1
Image ID: docker-pullable://gcr.io/google-samples/kubernetes-bootcamp@sha256:0d6b8ee63bb57c5f5b6156f446b3bc3b3c143d233037f3a2f00e279c8fcc64af
Port: 8080/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 25 Sep 2018 16:48:30 +0000
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-pnchw (ro)
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
Volumes:
default-token-pnchw:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-pnchw
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 3m (x4 over 3m) default-scheduler 0/1 nodes are available: 1 node(s) were not ready.
Normal Scheduled 3m default-scheduler Successfully assigned kubernetes-bootcamp-5c69669756-nxf8c to minikube
Normal SuccessfulMountVolume 3m kubelet, minikube MountVolume.SetUp succeeded for volume "default-token-pnchw"
Normal Pulled 3m kubelet, minikube Container image "gcr.io/google-samples/kubernetes-bootcamp:v1" already present on machine
Normal Created 3m kubelet, minikube Created container
Normal Started 3m kubelet, minikube Started container
-
kubectl logs [pod name]
3-
Pod
内でstdoutに出力されたログを表示する。
-
# Pod名を kubectl get pod から取得している、出力フォーマットを go-template で指定
$ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
$ kubectl logs $POD_NAME
Kubernetes Bootcamp App Started At: 2018-09-25T16:48:30.778Z | Running On: kubernetes-bootcamp-5c69669756-nxf8c
Running On: kubernetes-bootcamp-5c69669756-nxf8c | Total Requests: 1 | App Uptime: 481.762 seconds | Log Time: 2018-09-25T16:56:32.541Z
Running On: kubernetes-bootcamp-5c69669756-nxf8c | Total Requests: 2 | App Uptime: 1265.705 seconds | Log Time: 2018-09-25T17:09:36.483Z
-
kubectl [pod name] [cmd]
3-
Pod
内のコンテナでコマンドを実行する。 - bash を指定するとインタラクティブシェルへアクセスすることができる。
-
exit
or Ctrl+D で抜ける。
-
-
$ kubectl exec $POD_NAME env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=kubernetes-bootcamp-5c69669756-nxf8c
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
NPM_CONFIG_LOGLEVEL=info
NODE_VERSION=6.3.1
HOME=/root
$ kubectl exec -ti $POD_NAME bash
root@kubernetes-bootcamp-5c69669756-nxf8c:/# ls
bin core etc lib media opt root sbin srv tmp var
boot dev home lib64 mnt proc run server.js sys usr