1. HOME
  2. ブログ
  3. BLOG
  4. kubernetesのworkloadsリソースの概要

BLOG

BLOG

kubernetesのworkloadsリソースの概要

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

Deamonset

Deamonsetは、ReplicaSetの特殊な形のリソースになります。Replicasetは、各Nodeに均等に配置されるものではないが、Deamonsetは各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 )

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

関連記事