0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

kubernetesのworkloadsリソースの概要

Last updated at Posted at 2019-07-03

Workloadsリソースとは

クラスタ上にコンテナを起動するために利用するリソース

Pod

Workloadsリソースの最小単位。
同じPodに含まれるコンテナ同士はネットワーク的に隔離されていないので、IPアドレスを共有している。
つまり、同じPodにあるコンテナ同士は、同一IPを持つことになるので、localhostで通信が可能になります。
※基本的には1つのPodに1つのコンテナを内包することになります。

sample-pod.yaml
apiVersion: v1
kind: Pod # リソースの種類
metadata:
  name: sample-pod # Podの名前
spec:
  containers: # containerの定義
    - name: nginx-container # container名
      image: nginx:1.12 # containerのimage

ReplicaSet

複数のPodのレプリカをセットで作成する機能で、レプリカ数が不足している場合はTemplateからPodを作成して、レプリカ数が過剰な場合はラベルに一致するPodのうち1つを削除します。

rs-sample.yaml
apiVersion: apps/v1
kind: Replicaset # リソースの種類
metadata:
  name: sample-rs # Replicasetの名前
spec:
  replicas: 3 # レプリカ数
  selector:
    matchLabels:
      app: sample-app # 起動するPod名
  template: # 複製すべきPodの定義
    metadata:
      labels:
        app: sample-app #Pod名
    spec:
      containers: # containerの定義
        - name: nginx-container # container名
          image: nginx:1.12 # containerのimage
          ports:
            - containerPort: 80 # containerのPort

Deployment

Replicasetを管理することで、ローリングアップデートやロールバックを実現するリソース。
DeploymentがReplicasetを管理し、ReplicaSetがPodを管理する3層の親子関係になります。
※kubernetesで最も推奨されているコンテナの起動方法

・関係性
Deployment >> Replicaset >> Pod

sample-deployment.yaml
apiVersion: apps/v1
kind: Deployment # リソースの種類
metadata:
  name: sample-deployment # Deploymentの名前
spec:
  replicas: 3 # レプリカ数
  selector:
    matchLabels:
      app: sample-app # 起動するPod名
  template: # 複製すべきPodの定義
    metadata:
      labels:
        app: sample-app #Pod名
    spec:
      containers: # containerの定義
        - name: nginx-container # container名
          image: nginx:1.12 # containerのimage
          ports:
            - containerPort: 80 # containerのPort

DaemonSet

DaemonSetは、ReplicaSetの特殊な形のリソースになります。Replicasetは、各Nodeに均等に配置されるものではないが、DaemonSetは各Nodeに確実に1つずつPodを配置します。
そのため、レプリカ数の指定はできなく、1つのNodeに2つのPodを配置することもできません。
但し、Podを配置したくないNodeに配置できなくするこをは可能です。
ログの収集など、全Node上で必ず動作させたいプロセスのために利用することが多い。

sample-ds.yaml
apiVersion: apps/v1
kind: DaemonSet # リソースの種類
metadata:
  name: sample-ds # DaemonSetの名前
spec:
  selector:
    matchLabels:
      app: sample-app # 起動するPod名
  template: # 起動するPodの定義
    metadata:
      labels:
        app: sample-app #Pod名
    spec:
      containers: # containerの定義
        - name: nginx-container # container名
          image: nginx:1.12 # containerのimage

Job

コンテナを利用して一度限りの処理を実行させるためのリソース。
起動するPodが停止することを前提にして作られているため、バッチなどの処理の場合にJobを使用します。

sample-job.yaml
apiVersion: batch/v1
kind: Job # リソースの種類
metadata:
  name: sample-job # Jobの名前
spec:
  completions: 1 # 正常終了する回数
  parallelism: 1 # Jobで同時にPodを実行できる並列数
  backoffLimit: 10 # 失敗したJobのリトライ回数
  template: # 起動するPodの定義
    spec:
      containers: # containerの定義
        - name: sleep-container # container名
          image: cenos:6 # containerのimage
          command: ["sleep"] # sleepコマンドの実行
          args: ["60"] # 60秒間
          restartPolicy: Never # PodがErrorになった際にはJobが新しいPodを作成

CronJob

Jobを管理するリソースで、CronjobがJobを管理し、JobがPodを管理するような親子関係になります。

・関係性
CronJob >> Job >> Pod

sample-cronjob.yaml
apiVersion: batch/v1beta1
kind: CronJob # リソースの種類
metadata:
  name: sample-cronjob # cronJobの名前
spec:
  schedule: "*/1 * * * *" # 1分毎に実行
  concurrencyPolicy: Allow # Jobの並列実行Policyで制限を行わない
  startingDeadlineSeconds: 30 # CronJob で何かしら実行されなかった時にいつまで実行可能かの期限
  successfulJobsHistoryLimit: 5 # 正常終了したJobの履歴保有数
  failedJobsHistoryLimit: 3 # 異常終了したJobの履歴保有数
  suspend: false # CronJobのスケジューリングの対象とする
  JobTemplate:
    spec:
      completions: 1 # 正常終了する回数
      parallelism: 1 # Jobで同時にPodを実行できる並列数
      backoffLimit: 1 # 失敗したJobのリトライ回数
      template: # 起動するPodの定義
        spec:
          containers: # containerの定義
            - name: sleep-container # container名
              image: cenos:6 # containerのimage
              command:
              - "sh"
              - "-c"
              args:
              - "sleep 40; date + '%N' | cut -c 9 | egrep '[1|3|5|7|9]'" # 約50%の確率で成功するコマンド
            restartPolicy: Never # PodがErrorになった際にはJobが新しいPodを作成

次回は各kubernetesのDiscovery&LBリソースの概要です

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?