【Kubernetes】とりあえず動かしてみるDeploymentとReplicaSetとPod

2021.10.15
2024.03.24
Kubernetes
DeploymentPodReplicaSet

本ページはAmazonアフィリエイトのリンクを含みます。

はじめに

Kubernetesでは覚えることがたくさんありますが、今回は基本的なKubernetesオブジェクトであるDeployment/ReplicaSet/Podを動かしながらざっくり解説したいと思います。

DeploymentとReplicaSetとPod

  • Pod:1つ以上のコンテナからなる集合体(Kubernetes上でコンテナを管理する最小単位)
  • ReplicaSet:同じ仕様のPodを期待する数に維持するオブジェクト
  • Deployment:ReplicaSetを管理するオブジェクト(アプリケーションデプロイの基本単位)

それぞれの関係を図で表すと以下のようになります。

マニフェストとは

Kubernetesでは、オブジェクトの望ましい状態をYAML形式の「マニフェスト」で定義します。

以下のような形式で書くことができます。

1apiVersion: v1              # Kubernetes APIのバージョン
2kind: Pod                   # 対象オブジェクト
3metadata:                   # メタデータ
4  name: myapp
5  labels:
6    name: myapp
7spec:                       # オブジェクトの定義
8  containers:
9  - name: web-container
10    image: nginx
11    ports:
12      - containerPort: 80

Podを動かす

ここからそれぞれのオブジェクトのマニフェストを定義して、実際に動かしてみます。

以下のpod.ymlのようなnginxコンテナを含むPodをマニフェストで定義します。

1apiVersion: v1
2kind: Pod
3metadata:
4  name: myapp
5  labels:
6    name: myapp
7spec:
8  containers:
9  - name: web-container
10    image: nginx
11    ports:
12      - containerPort: 80

このマニフェストを反映するにはkubectl apply -fを利用します。

1❯ kubectl apply -f pod.yml
2pod/myapp created

確認するとPodが1つ稼働しているのがわかります。

1❯ kubectl get pod
2NAME    READY   STATUS    RESTARTS   AGE
3myapp   1/1     Running   0          6s

削除する場合は以下で削除します。

1❯ kubectl delete pod myapp

ReplicaSetを動かす

次にReplicaSetを作成してみます。ここではReplicaSetを作成してみますが、実際には単体で利用するケースは少なく、Deploymentなどから呼び出されることが多いです。

以下のようなレプリカ数が3のReplicaSetをreplicaset.ymlで定義します。レプリカ数が3ですので、3つのPodが常に稼働しているようになります。

1apiVersion: apps/v1
2kind: ReplicaSet
3metadata:
4  name: myapp
5spec:
6  replicas: 3
7  selector:
8    matchLabels:
9      app: myapp
10  template:
11    metadata:
12      labels:
13        app: myapp
14    spec:
15      containers:
16      - name: web-container
17        image: nginx
18        ports:
19          - containerPort: 80

マニフェストを反映してみます。

1❯ kubectl apply -f replicaset.yml
2replicaset.apps/myapp created

確認するとReplicaSetが作成されており、Podも3つ稼働していることがわかります。

1❯ kubectl get rs
2NAME    DESIRED   CURRENT   READY   AGE
3myapp   3         3         2       7s
4
5❯ kubectl get pod
6NAME          READY   STATUS    RESTARTS   AGE
7myapp-8t5zn   1/1     Running   0          10s
8myapp-sbbdf   1/1     Running   0          10s
9myapp-xdkd5   1/1     Running   0          10s

試しに1つのPodを削除してみると、削除されたものとは名前の異なるPodが起動し、3つのPodが稼働している状態が維持されているのがわかります。

1❯ kubectl delete pod myapp-sbbdf
2pod "myapp-sbbdf" deleted
3
4❯ kubectl get pod
5NAME          READY   STATUS    RESTARTS   AGE
6myapp-4xq2f   1/1     Running   0          5s
7myapp-8t5zn   1/1     Running   0          42s
8myapp-xdkd5   1/1     Running   0          42s

削除する場合は以下で削除します。

1❯ kubectl delete rs myapp

Deploymentを動かす

最後にDeploymentを作成してみます。

作成するDeploymentのマニフェストは以下になります。内容としてはReplicaSetで作成したものとほとんど変わりませんが、ReplicaSetを管理するオブジェクトとしてDeploymentが作成されます。

1apiVersion: apps/v1
2kind: Deployment
3metadata:
4  name: myapp
5spec:
6  replicas: 3
7  selector:
8    matchLabels:
9      app: myapp
10  template:
11    metadata:
12      labels:
13        app: myapp
14    spec:
15      containers:
16      - name: web-container
17        image: nginx
18        ports:
19          - containerPort: 80

マニフェストを反映してみます。

1❯ kubectl apply -f deployment.yml
2deployment.apps/myapp created

以下のようにDeployment、ReplicaSet、3つのPodが確認できます。

1~/Documents/handson/k8s-sample/deployment-replicaset-pod
2❯ kubectl get deployment
3NAME    READY   UP-TO-DATE   AVAILABLE   AGE
4myapp   2/3     3            2           7s
5
6~/Documents/handson/k8s-sample/deployment-replicaset-pod
7❯ kubectl get replicaset
8NAME               DESIRED   CURRENT   READY   AGE
9myapp-599c74f9fd   3         3         3       15s
10
11~/Documents/handson/k8s-sample/deployment-replicaset-pod
12❯ kubectl get pod
13NAME                     READY   STATUS    RESTARTS   AGE
14myapp-599c74f9fd-2b99c   1/1     Running   0          20s
15myapp-599c74f9fd-bkg9z   1/1     Running   0          20s
16myapp-599c74f9fd-sbxmt   1/1     Running   0          20s

削除する場合は以下で削除します。

1❯ kubectl delete deployment myapp

まとめ

DeploymentがReplicaSetを管理し、ReplicaSetがPodを理想の状態に維持する。

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee