Edited at

Kubernetes勉強 その2(Pod)

引き続き「Kubernetes完全ガイド」読んでお勉強。


Pod と ReplicaSet と Deployment

Pod はリソースの最小単位であり、ReplicaSetPod を管理するリソース。 ReplicaSetPod が停止すると自動的に再起動したりする。

Deployment は、 Pod に含まれるコンテナをバージョンアップする際に、古いコンテナを徐々に減らし、新しいコンテナを徐々に増やすなどの管理をする。


Pod


  • Podはリソースの最小単位。

  • Podは1つ以上のコンテナから構成される(2つや3つの場合もある)。

  • 同じPodに含まれる複数のコンテナはIPアドレスを共有している。


    • 従って、同じPodに含まれるコンテナ同士で同じポート番号を使用することはできない。




Podの作成

こんな感じで設定ファイルを用意する。


sample-pod.yml

apiVersion: v1

kind: Pod
metadata:
name: sample-pod
spec:
containers:
- name: nginx-container
image: nginx:1.12

起動する。

$ kubectl apply -f sample-pod.yml

pod "sample-pod" created

状態を確認

$ kubectl get pods

NAME READY STATUS RESTARTS AGE
sample-pod 1/1 Running 0 8s

Podを削除する

$ kubectl delete -f sample-pod.yml

pod "sample-pod" deleted


複数のコンテナを内包するPodの作成

設定ファイルを作る


sample-2pod.yml

piVersion: v1

kind: Pod
metadata:
name: sample-2pod
spec:
containers:
- name: nginx-container
image: nginx:1.12
- name: redis-container
image: redis:3.2

起動する。

$ kubectl apply -f sample-2pod.yml 

pod "sample-2pod" created

状態を確認。2つ走ってる。

$ kubectl get pods

NAME READY STATUS RESTARTS AGE
sample-2pod 2/2 Running 0 1m

停止する。

$ kubectl delete -f sample-2pod.yml 

pod "sample-2pod" deleted

複数のコンテナを起動する場合、同じポートを使うコンテナを複数起動することはできない。

コンテナにログインしてコマンド実行

$ kubectl exec -it sample-2pod /bin/bash

Defaulting container name to nginx-container.
Use 'kubectl describe pod/sample-2pod -n default' to see all of the containers in this pod.

root@sample-2pod:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

root@sample-2pod:/# cd home/
root@sample-2pod:/home# ls

root@sample-2pod:/home# ls /usr/
bin games include lib local sbin share src

実際には擬似端末を生成しており、ログインしているわけではないですがSSHでログインしているように操作できるらしい。