LoginSignup
2

More than 5 years have passed since last update.

Kubernetesの公式チュートリアルをやってみる その4

Last updated at Posted at 2018-09-25

Kubernetesの公式チュートリアルをやってみる その3 では Deployment を作成して自動的にアプリが起動するところまでを取り扱いました。
この記事のチュートリアルでは PodNode について取り扱います。

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 をリストするコマンド。
$ 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

参考リンク


  1. 普段はリソース名(例ではPod名)を指定して個別の詳細を表示したほうが便利かも。 

  2. kubectl get の標準の1行書式は wide という書式で、-o wide と指定した場合と等価になる。 訂正、wide の方がデフォルトより情報多いです。 

  3. Pod 内でコンテナが複数ある場合は -c [container name] を指定する必要がある。 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2