引き続き「Kubernetes完全ガイド」読んでお勉強。
Pod と ReplicaSet と Deployment
Pod
はリソースの最小単位であり、ReplicaSet
は Pod
を管理するリソース。 ReplicaSet
は Pod
が停止すると自動的に再起動したりする。
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でログインしているように操作できるらしい。