Kubernetesのアプリケーション実行系のリソースについて(Pod / ReplicaSet / Deployment)

Kubernetesの基礎として何回かに分けて基本事項をまとめていきたいと思います。

今回はアプリケーション実行系のリソース「Pod / ReplicaSet / Deployment」についてです。

本記事は、Kubernetes公式のDeploymentをベースに書いております。

スポンサーリンク

はじめに

とりあえず、下のマニフェストファイルをコピーしてdeployment.yamlを作りましょう。解説は後ほどしていきます。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

はい、ファイルを作ったら以下のコマンドを打ってdeployment.yamlを適用させてみましょう。

% kubectl apply -f deployment.yaml 
---
deployment.apps/nginx-deployment created

次に少し経ってから以下のコマンドを打ってリソースの状態を確認しましょう。

上段、STATUSの項目がRunningになっていたらOKです。

% kubectl get pod,replicaset,deployment
---
NAME                                   READY   STATUS    RESTARTS   AGE
pod/nginx-deployment-585449566-dqc9t   1/1     Running   0          100m
pod/nginx-deployment-585449566-hqjtr   1/1     Running   0          100m
pod/nginx-deployment-585449566-t87f5   1/1     Running   0          100m

NAME                                         DESIRED   CURRENT   READY   AGE
replicaset.apps/nginx-deployment-585449566   3         3         3       100m

NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-deployment   3/3     3            3           100m

内容を確認すると、3つ項目が出てきました。

はい、前段が長くなってしまいましたが、

今回は、この3つ(これがPod / ReplicaSet / Deployment)について説明していきたいと思います。

スポンサーリンク

本題

なぜ、3つのリソースが出てきたか?

オレはdeploymentをデプロイしただけなのに、podreplicasetも・・・とリソースが3つもできたのかという話ですが、deploymentというのはreplicasetをまとめていて、replicasetpodをまとめています。

そのため、deploymentreplicasetを生成して、replicasetpodを生成しているます。

Kubernetesでは、xxxyyyを生成しているということが他のものあります(cronjobjobの関係とか)。

この感覚を覚えてください。この感覚がわかってくると、マニフェストファイルが読めるようになってきます。

なんとなく区切りが見えてきて、ここからここまでreplicasetについて記載しているんだな〜ってのがわかるようになるかと思います。

表示された3つのオブジェクトについて

では、本題ですね。

次に表示されたものそれぞれに説明していきます。

  • Pod
  • ReplicaSet
  • Deployment

とあります。

Pod

pod/nginx-deployment〜の項目がこれに相当します。

Podとは、複数のコンテナの集合体です。と言っても、YAMLファイルにコンテナが1個だけ定義されていても1Podですし、コンテナが100個定義されていても1Podです。

Kubernetes上の最小単位です。

今回は、同じPodが3つ立ち上がっています(この話は、ReplicaSet側でします)。

また、Podとコンテナは何が違うの?と混乱しがちですが、コンテナはDockerでビルドや起動できる単位のものです。

一方、PodはYAMLファイルに複数のコンテナを定義でき、コンテナ通しでデータボリューム領域を共有できたりするので、やはり、コンテナの集合体がPodであり違うものということがわかります。

ただ、1つのPodに1つのコンテナしか定義されていないことが多いので使い分けずに会話しても通じるかなという印象です。

ReplicaSet

replicaset.apps/nginx-deployment〜の項目がこれに相当します。

ReplicaSetとは、Podを何個複製するか?という定義になります。

今回は、3つと定義されているので「同じPodを3つ用意してくれ」という意味になります。

また、「何を」3つ?かというと、spec.selectorのラベルに定義されているappという値がnginxのものを3つです。

Pod側にもtemplate.metadataというラベルが定義されているますので、nginxのPodが3つ生成されました。

Deployment

deployment.apps/nginx-deploymentの項目がこれに相当します。

Deploymentは、ReplicaSetを管理してます。

つまり?となりますが、Deploymentは、ReplicaSetの世代を管理していたりします。

今回のマニフェストファイルだと、RelicaSetの世代管理くらいになってしまいますが、他にも、デプロイした時にどうやってPodを置き換えるか?を指定するstrategyや世代管理はどのくらいするか?を指定するrevisionHistoryLimitなどがあります。

最後に

以上、

Kubernetesの基本であるDeploymentをはじめとするアプリケーション実行系のリソースについて説明いたしました。

これからKubernetesについて始める人の参考になればと思います。

コメント

タイトルとURLをコピーしました