Kubernetes
manifest
Service:
StatefulSet: 一意で永続的な ID と固有のホスト名を持つ [Pods] のセットを表す
メリット: pod再作成後も同じホスト名を維持するCronJob: 時間ベースのスケジュールでJobを作成する
Job: Jobは1つ以上のPodを作成し、指定された数が正常に終了した際にJobが完了となる
kubectl create -f [ファイル名]
でJobを手動実行できる
Pod:
- Image: GCRを使用する場合、イメージタグやイメージダイジェスト(sha256でハッシュ化された一意の値)で、イメージを指定することができる
pod
で読み込むimageID
を変更したい場合は、ダイジェストをimage
に指定する
- Image: GCRを使用する場合、イメージタグやイメージダイジェスト(sha256でハッシュ化された一意の値)で、イメージを指定することができる
# タグ image: gcr.io/xxx/xxx:latest
# ダイジェスト image: gcr.io/xxx/xxx@sha256:xxxxxxxxxxxxxxxx
- ImagePullPolicy
- IfNotPresent: ローカルでイメージが見つからない場合にのみイメージをpullする
- Always: Podの起動時に常にイメージをpullする
env: 環境変数を定義する
Volumes
- Podやコンテナが削除された場合でも、データを保持してくれる
- Pod内のコンテナ間でデータの共有ができる
- emptyDir: Podが削除された際にデータも削除する
- ボリューム名が一意であれば、複数のボリュームを定義することもできる
第6章 Kubernetes におけるストレージのプロビジョニング - Red Hat Customer Portal
PersistentVolume: 永続ボリューム
InitContainers
- 同じPod内の
containers
で指定したコンテナが起動する前に初期化処理を目的として起動することができる - セキュリティの理由からアプリケーションコンテナに含めたくないユーティリティーを含んだり実行できる
- アプリケーションコンテナの実行の前に起動が完了する
- 同じPod内の
Security Context: コンテナに対して権限やアクセス制御の設定をする
- runAsUser: コンテナのプロセスのUIDを指定する
BackendConfig(GKE)
- アクセスにIP制限をかける
- ServiceのAnnotationsに beta.cloud.google.com/backend-config を記述して利用する
- CronJob: 時間ベースのスケジュールでJobを作成する
- concurrencyPolicy: 古いJobがまだ動いてる際に、新しいJobを実行するかどうかを設定する
- Allow(default):同時実行に対して制限を行わない
- concurrencyPolicy: 古いJobがまだ動いてる際に、新しいJobを実行するかどうかを設定する
- Job:
- 1つ以上のPodを作成し、指定された数が正常に終了するのを保証する
- 指定された数が正常に終了した際にJobが完了となる
- Jobを削除するとそのJobによって作成されたPodも削除される
- restartPolicy:
- Never:
Jobが失敗した際、コンテナを再起動しない
PodがErrorになった際にはJobが新しいPodを作成して実行する
- Never:
- backoffLimit: エラー時の再試行回数を指定する
- activeDeadlineSeconds: Jobの開始時点からの有効制限時間を秒数で指定する
- Ingress:
- rules: バックエンドへ振り分ける際のルールを定義する
- host: HTTP HOSTヘッダの値が一致した場合に振り分ける
- backend: 振り分け先を指定
- host: HTTP HOSTヘッダの値が一致した場合に振り分ける
- defaultBackend: ルールに一致しないリクエストの振り分け先を定義する
- rules: バックエンドへ振り分ける際のルールを定義する
- NodeAffinity/NodeAntiAffinity: PodがどのNodeにスケジュールされるかを制限する(NodeSelectorと同じ)
- nodeSelectorTerms: podをデプロイするノードの条件を定義する
- PodAffinity: 指定されたラベルに一致するPodが動作しているNodeがもつ
topologyKey
が同一のNodeにPodを配置させる PodAntiAffinity:
topologyKey
の範囲内に指定されたラベルに一致するPodが動作していなければ、topologyKey
範囲内のNodeのいずれかにPodを配置するClusterRoleBinding: ロールとユーザを紐付ける
コマンド
- コンテナ内のファイルをホストにコピー
kubectl cp some_container:/path/to/target_file ./target_file
- ホスト上のファイルをコンテナ内の指定ディレクトリにコピー
$ kubectl cp target_file some_container:/path/to/target_dir/