wancoro blog

学んだことをアウトプットしていきたいと思います

Kubernetes

manifest

  • Service:

    • Type:
      • ClusterIP: クラスター内部からのみ疎通
      • NodePort: 静的なポート(NodePort)上でServiceを公開する
      • LoadBalancer: クラウドプロバイダーのロードバランサーを使用して、Serviceを外部に公開する
    • Ports:
      • Port: 公開するポート
      • TargetPort: 転送する先のポート
  • StatefulSet: 一意で永続的な ID と固有のホスト名を持つ [Pods] のセットを表す
    メリット: pod再作成後も同じホスト名を維持する

  • CronJob: 時間ベースのスケジュールでJobを作成する

  • Job: Jobは1つ以上のPodを作成し、指定された数が正常に終了した際にJobが完了となる

    • kubectl create -f [ファイル名] でJobを手動実行できる
  • Quality of Service(QoS)クラス: 優先度が低いQoSクラスをもったpodからkillされる

  • Pod:

    • Image: GCRを使用する場合、イメージタグやイメージダイジェスト(sha256でハッシュ化された一意の値)で、イメージを指定することができる
      podで読み込むimageIDを変更したい場合は、ダイジェストをimageに指定する
# タグ
image: gcr.io/xxx/xxx:latest
# ダイジェスト
image: gcr.io/xxx/xxx@sha256:xxxxxxxxxxxxxxxx
  • ImagePullPolicy
    • IfNotPresent: ローカルでイメージが見つからない場合にのみイメージをpullする
    • Always: Podの起動時に常にイメージをpullする
  • env: 環境変数を定義する

    • manifestに直接書き込む
      • name: value: を指定することで定義できる
    • podの情報を環境変数化する
      • fieldRef: Pod自身のIP Address、起動時間などのPodに関する情報を呼び出せる
  • Volumes

    • Podやコンテナが削除された場合でも、データを保持してくれる
    • Pod内のコンテナ間でデータの共有ができる
    • emptyDir: Podが削除された際にデータも削除する
    • ボリューム名が一意であれば、複数のボリュームを定義することもできる

第6章 Kubernetes におけるストレージのプロビジョニング - Red Hat Customer Portal

  • PersistentVolume: 永続ボリューム

  • InitContainers

    • 同じPod内の containers で指定したコンテナが起動する前に初期化処理を目的として起動することができる
    • セキュリティの理由からアプリケーションコンテナに含めたくないユーティリティーを含んだり実行できる
    • アプリケーションコンテナの実行の前に起動が完了する
  • Security Context: コンテナに対して権限やアクセス制御の設定をする

    • runAsUser: コンテナのプロセスのUIDを指定する
  • BackendConfig(GKE)

    • アクセスにIP制限をかける
    • ServiceのAnnotationsに beta.cloud.google.com/backend-config を記述して利用する
  • CronJob: 時間ベースのスケジュールでJobを作成する
    • concurrencyPolicy: 古いJobがまだ動いてる際に、新しいJobを実行するかどうかを設定する
      • Allow(default):同時実行に対して制限を行わない
  • Job:
    • 1つ以上のPodを作成し、指定された数が正常に終了するのを保証する
    • 指定された数が正常に終了した際にJobが完了となる
    • Jobを削除するとそのJobによって作成されたPodも削除される
    • restartPolicy:
      • Never:
        Jobが失敗した際、コンテナを再起動しない
        PodがErrorになった際にはJobが新しいPodを作成して実行する
    • backoffLimit: エラー時の再試行回数を指定する
    • activeDeadlineSeconds: Jobの開始時点からの有効制限時間を秒数で指定する
  • Ingress:
    • rules: バックエンドへ振り分ける際のルールを定義する
      • host: HTTP HOSTヘッダの値が一致した場合に振り分ける
        • backend: 振り分け先を指定
    • defaultBackend: ルールに一致しないリクエストの振り分け先を定義する
  • 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/