Open9

k8s小ネタ集(殴り書き)

ymz_noteymz_note

kubectl get pod で表示される STATUS と意味

  • ContainerCreating
    イメージをダウンロード中、またはコンテナ起動進行中を表す。
    また、ConfigMap や Secret をマウントできず、コンテナ生成が保留された時にもこの値が表示される。
  • CrashLopBackOff
    ポッド内のコンテナが終了し、起動まで待機状態にある。
    2回以上コンテナが終了すると、CrashLoopBackOff 時間を取るようになる、
    これが表示されたら、コンテナ内のプロセスを見直する必要がある。
  • Pending
    ポッド生成の要求を受け取ったが、一つ以上のコンテナが作成されていない状態。
    リソース不足やポリシーの制約によってスケジュールできないケースも含まれる。
  • Running
    ノードに対応つけられ、すべてのコンテナが作成された。
    または、少なくとも一つのコンテナが実行中、開始中、または再起動中。
  • Terminating
    コンテナへ終了要求シグナルを送信後、コンテナが終了するまでの待機時間。
    猶予時間を過ぎてもコンテナが終了できない場合は、コンテナを強制終了する。
  • Succeeded
    ポッド内のすべてのコンテナが正常に終了した。
  • Completed
    ポッド内のコンテナが正常終了し、存在している状態。
    ポッドは削除されるまで存在し続け、ポッド名を指定してログやステータスを取得できる。
    ポッド内に複数のコンテナがある場合は、第一次コンテナが正常終了(exircode = 0)すると、ポッドは正常終了として扱われる。
  • Error
    コンテナが異常終了した。
    exitcode = 0以外の時に異常終了とみなされる。
    ポッド内に複数のコンテナがある場合は、第一コンテナが異常終了すると、ポッドは異常終了として扱われる。
  • Failed
    ポッド内の少なくとも一つのコンテナが異常終了した。
  • Unknown
    何らかの理由により、ポッドの状態を取得できない状態である。
    ノード障害内度で、マスターからノードの状態を取得できなくなった時にも、この表示内容となる。
ymz_noteymz_note

k8s の「サービス」の役割

  1. サービスは LB の夜話区割りを持ち、ポッドを代表数r IP アドレスを獲得しtえ、クライアントのリクエストを受ける。
  2. サービスはオブジェクト生成時に、サービス名と代表 IP アドレスを内部 DNS へ登録する。これによりクライアントは、サービス名からその代表 IP アドレスを名前解決することができる。
  3. サービスがリクエストを転送するべきポッドw選別するために、サービスのセレクターにセットされたラベルと一致するポッドを選び出し、その IP アドレスへリクエストを転送する。
  4. サービスのオブジェクト存在時に起動されるポッドのコンテナには、サービスへアクセスするための環境変数が自動的に設定されるようになる。
  5. サービスには4種類のサービスタイプがあり、クライアントの範囲を k8s クラスタの内部とどめるか、外部まで対象とするか、また反対に k8s クラスタ外部の IP アドレスへ転送するかを設定する。
ymz_noteymz_note

ラベルとは

ポッドやオブジェクトに付与されたキーバリューのペアのこと。

ymz_noteymz_note

k8s の「コントローラ」タイプ

  • Deployment
    対等な関係にある複数のポッドで水平クラスタを構成できる。
    ポッドの起動と停止を迅速に実行す両振る舞い、稼働中のポッドの順次置き換え、オートスケーラーとの連動、更に高可用性構成が可能という特徴があり、オールラウンドに適用できる
  • StatefulSet
    ポッドと永続ボリュームの組み合わせで制御を行い、永続ボリュームの保護を優先する。
    ポッドをシリアル番号で管理し、永続ボリュームとポッドの対応関係を維持し、起動と停止の順序を制御するなどの特徴があり、永続データの処理に適している
  • Job
    バッチ処理なコンテナが正常終了するまで再試行を繰り返すコントローラ。
    ポッドの実行回数、同時実行数、試行回数の上限を設定して実行/さくじょされるまでログを保持するといった特徴があり、科学計算などのバッチ処理に適している
  • CronJob
    時刻指定で定期的に前述の「Job」を生成する。
    UNIX の cron と同じ形式。定期的にじっこうしなければならないバッチ処理に適している
  • DaemonSet
    k8s クラスタの全ノードで、同じポッドを実行するためにある。
    例えば、ポッドネットワークを構成するデーモンセット管理下のポッドは、ノードを追加すると自動的に稼働を開始し、追加されたノードを利用できるようになる。システム運用の自動化に適している
  • ReplicaSet
    デプロイメントコントローラと連動して。ポッドのレプリカ数の管理を担当する。
    デプロイメント(Deployment)を通じて利用することが推奨されている
  • replicationController
    次世代のコントローラであるデプロイメントの利用が推奨されている
ymz_noteymz_note
ワークロードのタイプ コントローラのタイプ 対応するテーマ
フロントエンド処理 Deployment デプロイメント、オートスケール、イングレス、サービス
バックエンド処理 StatefulSet ステートフルセット、永続ボリューム、サービス
バッチ処理 Job, CronJob ジョブとクーロンジョブ
システム運用 DaemonSet ステートフルセット、クラスタの仮想化
ymz_noteymz_note

Docker コマンドチートシート

コンテナ環境の表示

#dockerクライアントとサーバのバージョン
docker version

#環境情報を表示
docker info

コンテナイメージのビルド

#カレントディレクトリのDockerfileからイメージをビルドする
docker image build -t <リポジトリ>:<タグ> .

#ローカルのイメージをリストする
docker image ls

#ローカルのイメージを削除する
docker image rm <イメージ>

#ローカルのイメージを一括削除する
docker image prune -a

イメージの移動と共有

#リモートリポジトリのイメージをローカルリポジトリへダウンロードする
docker pull <リモートリポジトリ>:[タグ]

#ローカルのイメージをリモートに対応つけることで、docker push でリモートリポジトリへ転送できるようにする
docker image tag <イメージ>:[タグ] <リモートリポジトリ>:[タグ]

#レジストリサービスへログインする
docker login <レジストリサーバ>

#ローカルのイメージをレジストリサービスのリポジトリへ転送する
docker image push <リモートリポジトリ>:[タグ]

#イメージをアーカイブ形式のファイルとして書き出す
docker save -o <ファイル名> <イメージ>

#アーカイブ形式のファイルをリポジトリへ登録する
docker limage load -i <ファイル名>

#コンテナ名またはコンテナIDでコンテナを指定して、tar形式のファイルへ書き出す
docker container export <コンテナ名 | コンテナID> -o ファイル名

#tar形式ファイルをリポジトリのイメージ展開する
docker image import <ファイル名> <リポジトリ>:[タグ]

コンテナの実行

#対話型でコンテナを起動してコマンドをじっこ数r。終了時にはコンテナを削除する。コマンドにshうあbashを指定するとサーバにログインした時のような対話型のシェルでOSコマンドを実行可能
docker container run --rm -it <イメージ> <コマンド(sh, bash)>

#バックグラウンドでコンテナを実行する。コンテナ内プロセスの標準出力や標準エラー出力は、ログに保存される。保存されたログの表示についてはdocker logsで参照
docker container run -d -p <コンテナ公開ポート番号>:<コンテナ内プロセスの公開ポート番号> <イメージ>

#コンテナに名前を与えてイメージを実行する
docker container run -d <コンテナ名> -p <コンテナ公開ポート番号>:<コンテナ内プロセスの公開ポート番号> <イメージ>

#コンテナのファイルシステム編ディレクトリをマウントして実行する
#-vで指定するのは、<ローカル絶対パス>:<コンテナ内のパス>
docker container run -v `pwd`/html:/usr/share/nginx/html -d -p <コンテナ公開ポート番号>:<コンテナ内プロセスの公開ポート番号> <イメージ>

#実行中コンテナに対して、対話型コマンドを実行する
docker container exec -it <コンテナ名 | コンテナID> bash

#実行中のコンテナをリストする
docker container ls

#停止コンテナも含めてリストする
docker container ls -a

#コンテナのメインプロセスへシグナルSIGTERMによる終了要求を送り、その後、タイムアウトすると強制終了する
docker container stop <コンテナ名>

#コンテナを強制終了する
docker container kill <コンテナ名 | コンテナID>

#コンテナを削除する
docker container rm <コンテナ名 | コンテナID>

#終了したコンテナを一括削除する
docker container prune -a

#コンテナをイメージとしてリポジトリへ書き込む
docker container commit <コンテナ名 | コンテナID> <リポジトリ>:[タグ]

デバッグ関連の機能

#コンテナのログを表示する
docker container logs <コンテナ名 | コンテナID>

#コンテナのログをリアルタイムに表示する
docker container logs -f <コンテナ名 | コンテナID>

#コンテナの停止理由を表示する
docker container ls -a

#実行中コンテナに対して対話型でコマンドを実行する
docker container exec -it <コンテナ名 | コンテナID> bash

#低レベルコンテナ情報を表示する
docker container inspect <コンテナ名 | コンテナID>

#コンテナの実行状態をリアルタイムに表示する
docker container stats

#コンテナの標準出力を画面へ表示する。そして、コントロール-Cでコンテナから切り離され止まらないようにする
docker container attach --sig-proxy=false <コンテナ名 | コンテナID>

#コンテナを一時停止する
docker container pause <コンテナ名 | コンテナID>

#コンテナの一時停止を解除する
docker container unpause -a <コンテナ名 | コンテナID>

#停止したコンテナを実行する。この際、標準出力や標準エラー出力をターミナルへ表示する
docker container start -a <コンテナ名 | コンテナID>

Kubernetes と重複する機能

ネットワーク関連

#コンテナのネットワークを作成する
docker network create <ネットワーク名>

#コンテナのネットワークをリストする
docker network ls

#コンテナのネットワークを削除する
docker network rm <ネットワーク名>

#未使用のコンテナのネットワークを削除する
docker network prune

永続ボリューム関連

#永続ボリュームを作成する
docker volume create <ボリューム名>

#永続ボリュームをリストする
docker volume ls

#永続ボリュームを削除する
docker volume rm <ボリューム名>

#未使用の永続ボリュームを削除する
docker volume prune

Docker Compose 関連

#カレントディレクトリのdocker-compose.ymlを使用して複数のコンテナを起動する
docker-compose up -d

#Docker Compose管理下で実行中のコンテナをリストする
docker-compose ps

#Docker Compose管理下のコンテナを停止する
docker-compose down

#Docker Compose管理下のコンテナを停止して、それらのイメージも削除する
docker-compose down --rmi all
ymz_noteymz_note

kubectl コマンドのチートシート

Kubectl コマンドの基本

kubectl コマンドのパラメータの書式は以下の通り

kubectl <①コマンド> <②リソースタイプ> [名前] [③オプション]

①~③について、それぞれ適切なパラメータを組み合わせて、kubectl コマンドを組み立てていくことになる。

①コマンド

  • get
    1行に1オブジェクトといった形式でリストされる。
    リソースタイプや名前との組み合わせによりリスト範囲を限定可能。
kubectl get -f <マニフェスト|ディレクトリ>

kubectl get <リソースタイプ>

kubectl get <リソースタイプ> <名前>

kubectl get <リソースタイプ> <名前> <オプション>
  • describe
    getよりも詳細な情報を表示する
    マニフェストファイル、ディレクトリ、リソースタイプ、名前との組み合わせによる表示対象選択はgetと同じ。
kubectl describe -f <マニフェスト|ディレクトリ>

kubectl describe <リソースタイプ>

kubectl describe <リソースタイプ> <名前>

kubectl describe <リソースタイプ> <名前> <オプション>
  • apply
    マニフェストに記述されたオブジェクトについて、存在しなければ生成、既存があれば変更を実施する。
kubectl apply -f <マニフェスト>
  • create
    マニフェストに記述されたオブジェクトを生成する。
    既存があれば、エラーを返す。
kubectl create -f <マニフェスト>
  • delete
    マニフェストに記述されたオブジェクトを削除する。
    リソースタイプと名前に一致するオブジェクトを削除する。
kubectl delete -f <マニュアル>
  • config
    接続先の k8s クラスタ、名前空間、ユーザーのリストを表示する。
    コンテキスト名を指定して、接続先 k8s クラスタ名前空間を決定する。
kubectl config get-contexts

kubectl config use-context <コンテキスト名>
  • exec
    コンテナに対話型でコマンドを実行する。
    ポッド内にコンテナが複数ある場合は、[-c] でコンテナを指定する。
    コンテナ名は kubectl describe <ポッド名>で取得可能
kubectl exec -it <ポッド名> [-c <コンテナ名>] bash
  • run
    ポッドを実行する。
    1.12以降のバージョンでポッド以外の実行は非推奨になった。
kubectl run <名前> --image=<イメージ名>
  • logs
    コンテナのログを表示する
kubectl logs <ポッド名> [-c コンテナ名]

②リソースタイプ(各オブジェクトの概要説明を記載する)

コンテナに直接関連するワークロード

  • pod (po)
    コンテナの最小起動単位であり、k8s クラスタ内のポッドネットワーク上にIPアドレスを持ち、単一または複数のコンテナを起動する。
  • poddisruptionbudget (pdb)
    ポッド停止許容数を設定することで最小稼働数を定め、サービス提供を維持する。

サービス関連

  • service (svc)
    ポッドのサービスの公開方法を決定する
  • endpoints (ep)
    サービスを提供するポッドのIPアドレスとポートを管理する
  • ingress (ing)
    サービス公開、TLS暗号化、セッション維持、URLマッピングの機能を提供する

コントローラ関連

  • deployment (deploy)
    サーバ型ポッドのレプリカ稼働数、自己回復、ロールアウト、ロールバックなどを制御するコントローラ。
  • replicaset (rs)
    ポッドのレプリカ数を制御するコントローラでdeploymentと連動して動作する。
  • statefulset (sts)
    永続データを保持するポッドのコントローラ。これは永続ボリュームとセットで構成でき、名前を連番管理する。
  • job
    バッチ処理型のポッドの正常終了を管理するコントローラ。
  • cronjob
    定期起動するジョブを管理するコントローラ。
  • daemonset (ds)
    ノードにポッドを配置するコントローラ。
  • replicationcontroller (rc)
    ぽっどのレプリカ数を制御するコントローラであり、replicasets の前世代バージョン。
  • horizontalpodautoscaler (hpa)
    ワークロード応じてポッド数を増減するコントローラ。

ボリューム関連

  • persistentvolume (pv)
    低レベルのストレージの管理を行う。
  • persistentvolumeclaim (pvc)
    ストレージクラスと容量を指定しtえ、論理ボリュームのプロビジョニングを要求する。
  • storageclass (sc)
    クラウドプロバイダーや外部ストレージが提供するストレージ種別を管理する。

k8s クラスタ関連

  • node (no)
    k8s クラスタのワークロードを実行するサーバであり、ノードまたはワーカーノードと呼ばれるオブジェクトを管理する。
  • apiservice
    マスタがサポートするAPIサービスを管理する。
  • componentstatuses (cs)
    scheduler, controller-manager, etcd-0 のヘルスチェック結果を報告する。
  • controllerversion
    コントローラのバージョンを報告する。
  • event
    k8sクラスタ内で発生したイベントを記録し、表示するためのコントローラ。

コンフィグマップとシークレット関連

  • configmap (cm)
    設定ファイルを保存する
  • secret
    パスワードなどの秘匿性の必要な情報を保存する

名前空間関連

  • namespace (ns)
    k8s クラスタを名前空間で論理分割して利用する

役割ベースアクセス制御(RBAC)関連

  • serviceaccount (sa)
    サービスアカウントは、ポッドで実行されるプロセス用のアカウントであり、アクセス権を識別するために利用される。
  • role
    一連のアクセス許可を表すルール記述、ロールの有効範囲は名前空間内に限られる。
  • rolebinding
    サービスアカウント、ユーザー、グループとロールをバインドする。
  • clusterrole
    k8sクラスタ全体に有効なロール。すなわち、アクセス権限のルールセット。
  • clusterrolebinding
    k8s全体に有効となるように、アクセス権限を対応付ける。

セキュリティ関連

  • certificatesigningrequest (csr)
    ルート認証局へ証明書署名要求を作成する。
  • networkpolicies (netpol)
    名前空間間のネットワークアクセス制御を行う。
  • podsecuitypolicies (psp)
    ぽっどのセキュリティに関わる項目のデフォルトを設定する。

資源管理関連

  • limitrange (limits)
    名前空間下、コンテナのCPUとメモリの要求値と上限のデフォルトを設定する。
  • resourcequota (quota)
    名前空間毎のCPUとメモリの要求量と上限値。

③オプション

表示に関連したオプションの例

  1. -n <名前空間>
    捜査対象を指定の名前空間にする。
  2. --all-namespace | -A
    すべての名前空間のオブジェクトを対象とする。
  3. -o=yaml
    YAMLでAPIオブジェクトを表示する。
  4. -o=wide
    ポッドではIPアドレスとノード名が追加情報として表示する。
  5. -o=json
    JSONでAPIオブジェクトを表示する。
  6. -o=custom-colums=<spec>
    項目を指定してリストする。
  7. -o=custom-colums-file=<file>
    テンプレートファイルでカスタム表示する。
  8. -o=jsonpath=<template>
    jsonpathに一致するリストを表示する。
  9. -o=jsonpath-file=<filename>
    jsonpath形式テンプレートファイルでカスタム表示する。
ymz_noteymz_note

Dockerfile チートシート

  • FROM <イメージ>:[タグ]
    コンテナのベースイメージを指定する。

  • RUN <コマンド>

  • RUN ["コマンド","パラメータ1","パラメータ2"]
    FROMのベースイメージ上でコマンドを実行する。

  • ADD <ソース> <コンテナ内の宛先>

  • ADD ["ソース",..."<コンテナ内の宛先>"]
    ソース(ファイル,ディレクトリ,tarファイル,URL)をコンテナ内の宛先へコピーする。

  • COPY <ソース> <コンテナ内の宛先>

  • COPY ["ソース",..."<コンテナ内の宛先>"]
    ソース(ファイル,ディレクトリ)をコンテナ内の宛先へコピーする。

  • ENTRYPOINT ["実行可能なもの","パラメータ1","パラメータ2"]

  • ENTRYPOINT <コマンド> <パラメータ1> <パラメータ2>
    コンテナが実行するファイルを設定する。

  • CMD ["実行バイナリ","パラメータ1","パラメータ2"]

  • CMD <コマンド>

  • CMD ["パラメータ1","パラメータ2"]
    コンテナの実行時に実行されるコマンドを指定する。

  • ENV <key> <value>

  • ENV <key>=<value> ...
    環境変数をセットする。

  • EXPOSE <port> [<port>...]
    公開ポートをセットする。

  • USER <ユーザー名> | <UID>
    RUN, CMD, ENTRYPOINTの実行ユーザを指定する。

  • VOLUME ["/path"]
    共有可能なボリュームをマウントする。

  • WORKDIR /path
    RUN, CMD, ENTRYPOINT, COPY, ADDの作業ディレクトリを指定する。

  • ARG <名前>[=<デフォルト値>]
    ビルド時の引数を定義する。
    --build-tag <変数名>=<値>

  • LABEL <key>=<value> <key>=<value>
    イメージのメタデータにラベルを追加する。

  • MAINTAINER <名前>
    イメージのメタデータに著作者を追加する。