🕌

kubernetesのいろんなポッドの起動形式

2021/02/21に公開

はじめに

くーばねてすをやっつけるために新たなステージに上がるためについにdockerさんに会いに行くことにした。dockerさんと仲良くなることでコンテナシステムの仕組みの理解とくーばねてすを倒すための調査をする。今回はkubernetesでポッドを起動する。

概要

■kubernetesでポッドを起動する
■いろんなポッドの起動形式

をまとめた(>_<)

■kubernetesでポッドを起動する

ポッドはkubernetesクラスタの各ノードのなかにあるコンテナの実行環境である。
kubernetesのポッドでコンテナを実行するするにはkubectl runコマンドを使う。

$ kubectl run helloworld --image=hello-world   -it --restart=Never

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

もしエラーとして

$ kubectl run helloworld --image=hello-world -it --restart=Never
Error from server (AlreadyExists): pods "helloworld" already exists

とでてきたら、すでに同じ名前のポッドがすでに存在しているので確認する。
ポッドの一覧を表示する

$ kubectl get pod
NAME          READY   STATUS         RESTARTS   AGE
hello-world   0/1     Completed      0          3d22h

終了したポッドを削除する

$ kubectl delete pod ポッド名 

名前がかぶっていたので起動できなかった。もう一度ポッドを起動すると起動できた。

ポッドの起動記述形式例

$ kubectl run ポッドの名前 --image=イメージ名 --restart=ポッドの起動形式

dockerコマンドとkubernetesのkubectlコマンドはよく似ていてkubectlコマンドで実行するとノードにイメージがない場合はdockerhubなどのリモートレジストリからイメージがダウンロードされノードでコンテナが実行される。

■いろんなポッドの起動形式

■ポッドを直接起動する
ポッドの起動はいくつか異なる起動方法がある。
ポッドだけで起動し、ポッドが停止したときに再スタートする必要がないときは
--restart=Neverで起動する。

$ kubectl run ポッド名 --image=イメージ名 --restart=Never

直接起動したときの特徴
・異常終了しても再起動しない
・コンテナ終了後削除が必要
・水平スケール(コンテナを増やす処理)ができない
■デプロイメントコントローラー制御下で起動する
ポッド停止後にポッドを必ず再スタートするときはコントローラーの制御下で実行する。
デプロイメントコントローラーの制御下で実行するときは --restart=Alwaysで起動する。

$ kubectl run ポッド名 --image=イメージ名 --restart=Always

--restart=Alwaysは省略することが可能で、指定しなければデフォルトで--restart=Alwaysでポッドは起動する。またポッドはバックグラウンドで起動するのでデプロイメントコントローラー制御下で起動するときは「--it」は使用できできない。
デプロイメントコントローラーで起動したときの特徴
・要求を待ち続け終了しない
・水平スケールできる
・異常終了したら再起動する
■ジョブでポッドを起動する
kubernetesのコントローラーである「ジョブ」の制御下でポッドを起動すると、起動失敗したとき所定の回数に達するまでポッドの起動を再試行する。
「ジョブ」の制御下でポッドを起動するのは --restart=OnFailureで起動する。

$ kubectl run ポッド名 --image=イメージ名 --restart=OnFailure

ジョブでポッドを起動したときの特徴
・正常終了したときは完了
・処理が失敗したら再起動リトライ
・平行処理を設定することができる

まとめ

スケジューリングを管理するコントローラー制御下で起動するとポッドの再起動をしてくれるんだなと思った(>_<)

Discussion