Skip to content

Pod

pod

Podとは

1つ以上のコンテナグループのことPodと呼びます。

Kubernetesはコンテナを直接管理するのではなく、Podを介してコンテナを管理します。

実際にPodを動かしてみる

nginxイメージをKubernetes上で動かしてみましょう。
以下のコマンドでmynginxという名前をつけたnginxコンテナを実行します。

$ kubectl run mynginx --image nginx --restart Never
pod/mynginx created

podが起動されたか確認してみましょう。
kubectl get pod と実行することで現在起動しているpodの一覧を見ることができます。

$ kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
mynginx   1/1     Running   0          17s

"mynginx"というpodが動いているのが見えましたね。

動作確認

nginxが動作しているかアクセスして確認してみましょう。
同様にポートフォワードを行ってローカルから確認を行います。

$ kubectl port-forward pod/mynginx 8080:80
Forwarding from 127.0.0.1:8080 -> 80

次にCloudShellのwebプレビュー機能でnginxのトップページが確認できれば成功です。

確認できたらポートフォワードを Ctrl + c で終了しましょう。

ログの確認

Kubernetesはコンテナの標準出力を閲覧する事が可能です。
先程アクセスしたnginxの標準出力を確認してみましょう、アクセスログが見えるはずです。

$ kubectl logs pod/mynginx
127.0.0.1 - - [12/Jul/2019:07:04:16 +0000] "GET /?authuser=0 HTTP/1.1" 200 612 "https://console.cloud.google.com/cloudshell/environment/view?project=be-ogi-yusuke" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "111.108.92.1, 172.217.26.52"
127.0.0.1 - - [12/Jul/2019:07:04:17 +0000] "GET /robots.txt HTTP/1.1" 404 555 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "111.108.92.1, 172.217.26.52"
2019/07/12 07:04:17 [error] 6#6: *2 open() "/usr/share/nginx/html/robots.txt" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /robots.txt HTTP/1.1", host: "127.0.0.1:8080"
127.0.0.1 - - [12/Jul/2019:07:04:17 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "https://8080-dot-3725049-dot-devshell.appspot.com/?authuser=0" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "111.108.92.1, 172.217.26.52"
2019/07/12 07:04:17 [error] 6#6: *3 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 127.0.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "127.0.0.1:8080", referrer: "https://8080-dot-3725049-dot-devshell.appspot.com/?authuser=0"

より詳細な情報を知るには

kubectl get pods で現在起動されているpodを確認することがわかりましたが、
どんなコンテナがどんな設定で動いているのかの情報がこれだけだと少ないですね。

$ kubectl get pods
NAME      READY   STATUS    RESTARTS   AGE
mynginx   1/1     Running   0          28m

詳細な情報を知りたい場合は kubectl describe コマンドを使うと良いでしょう。
以下のように現在起動しているコンテナのIPやイメージID、Events(いつ起動したか・異常終了した場合はその理由)を表示することができます。

$ kubectl describe pod mynginx
Name:               mynginx
Namespace:          default
Priority:           0
PriorityClassName:  <none>
Node:               gke-standard-cluster-1-default-pool-0423aa15-rbfv/10.146.0.18
Start Time:         Fri, 12 Jul 2019 15:37:34 +0900
Labels:             run=mynginx
Annotations:        kubernetes.io/limit-ranger: LimitRanger plugin set: cpu request for container mynginx
Status:             Running
IP:                 10.0.2.7
Containers:
  mynginx:
    Container ID:   docker://d77f313b33bff623d59f3f8c86869c1797ed9b8f28c7e54bd953e583cd204e54
    Image:          nginx
    Image ID:       docker-pullable://nginx@sha256:00be67d6ba53d5318cd91c57771530f5251cfbe028b7be2c4b70526f988cfc9f
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Fri, 12 Jul 2019 15:37:35 +0900
    Ready:          True
    Restart Count:  0
    Requests:
      cpu:        100m
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-mcw4s (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:
  default-token-mcw4s:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-mcw4s
    Optional:    false
QoS Class:       Burstable
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
  ----    ------     ----  ----                                                        -------
  Normal  Scheduled  32m   default-scheduler                                           Successfully assigned default/mynginx to gke-standard-cluster-1-default-pool-0423aa15-rbfv
  Normal  Pulling    32m   kubelet, gke-standard-cluster-1-default-pool-0423aa15-rbfv  pulling image "nginx"
  Normal  Pulled     32m   kubelet, gke-standard-cluster-1-default-pool-0423aa15-rbfv  Successfully pulled image "nginx"
  Normal  Created    32m   kubelet, gke-standard-cluster-1-default-pool-0423aa15-rbfv  Created container
  Normal  Started    32m   kubelet, gke-standard-cluster-1-default-pool-0423aa15-rbfv  Started container

現在起動しているPodをyamlで表示することも可能です。

$ kubectl get pods mynginx -o yaml
apiVersion: v1
kind: Pod
metadata:
  annotations:
    kubernetes.io/limit-ranger: 'LimitRanger plugin set: cpu request for container
      mynginx'
  creationTimestamp: 2019-07-12T06:37:34Z
  labels:
    run: mynginx
  name: mynginx
  namespace: default
  :

お片付け

$ kubectl delete pod mynginx

参照