🦖

Kubernetes完全ガイド読書ログ

2023/03/31に公開

Kubernetes完全ガイドを読んだので個人的に気になったところ、後から読み返したいところをメモしていく
書籍リンク: https://www.amazon.co.jp/dp/B08FZX8PYW
ASIN: B08FZX8PYW

1.1.4

マルチステージビルド

1段目と2段目で異なるイメージを使うことができる。上の段のイメージが実際に保存されるもので、これを実行することで実行イメージにビルドで使ったファイルを含めないことができる。

1.1.6

コンテナスキャンツール

TrivyやClairなど。イメージの脆弱性診断などをしてくれる

2.1

k8sはコンテナ化されたアプリケーションのデプロイ、スケーリングなどの管理を自動化するためのプラットフォーム

4.3

k8sのリソースリスト。Pod, Ingress, Secretなど

4.5.10

アノテーションとラベル。[プレフィックス]/キー: 値 で構成される。
プレフィックスはオプションで、DNSサブドメインの形式である必要がある

アノテーションを設定することでGKE/AKSなど環境特有の拡張機能を利用する事ができる

stgかprdなどの情報を付与するのにはラベルを使う。env: stg など
システムで使うラベルもあるので衝突しないように注意

4.5.11

--pruneオプションでリソースの削除を検知

4.5.15

コラム

NamespaceレベルのリソースとClusterレベルのリソースがある

4.5.19

Pod内のコンテナ上でコマンドを実行する
kubectl exec

4.5.20

kubectl debugもしくはkubectl alpha debugでPod内のコンテナ上でデバッグツールを含めコマンドを実行する
execだとbashすら無い可能性がある

4.5.21

kubectl port-forwadでPod内のコンテナ上のポートをローカルにフォワードする

4.5.22

logを確認する

4.5.24

cp

4.5.27

alias

5.2.5

DockerfileでのENTRYPOINTとCMDに対応するcommandとargsがある。これらはmanifestで上書きできる

ENTRYPOINTにcommandが、CMDにargsが対応する

5.2.6

Pod名はRFC1123に準拠している必要がある

英小文字、数字、-.が使える。始めと終わりは英小文字である必要がある

5.2.10

DockerfileでのWORKDIRに対応するworkingDirがある

5.3.1

Podのレプリカを作成、維持するリソースにReplicaSetがある。RepricationControllerは廃止されたものなので基本使わない

5.4.1

ReplicaSetを管理、ローリングアップデートできるDeploymentがある

5.4.5

DeploymentのアップデートにはRecreateRollingUpdateがある

5.4.6

minReadySecondsでアップデート中にPodがReadyになるまでの時間を設定できる
revisionHistoryLimitでアップデート履歴を残す数を設定できる
progressDeadlineSecondsでアップデート後のタイムアウト時間によって自動でロールバックする

5.5.1

DaemonSetはPodを全てのNodeに配置するリソース
ReplicaSetの特殊な形

5.6.1

StatefulSetはPodを順番に作成し、削除するリソース。Pod名のサフィックスが数字のインデックスになっている
データを永続化するための仕組みがある
``ReplicaSet`の特殊な形

5.7.1

Jobはコンテナを利用してバッチ処理を実行するリソース。ReplicaSetと異なり処理後のPodは削除されるのが正常な動作。

5.7.4

タスク型とワークキュー型のパラメーター例が載っている

タスク型のJobでは、個々のPodの正常終了が成功数に達するまで実行する
ワークキュー型のJobでは、大きな処理全体が正常終了するまでいくつかの並列数で実行し続けたい場合に使う(p.178)

5.7.5

spec.ttlSecondsAfterFinishedでJobの終了後に削除されるまでの時間を設定できる

5.8.1

CronJobは定期的にJobを実行するリソースで、CronjobJobの関係はDeploymentReplicaSetの関係と同じ

621
pod間通信のロードバランシング、サービスディスカバリを利用するためにServiceを利用する
外部ロードバランサのIPであるVIP(Virtual IP)やクラスタ内のみ利用可能なClusterIPなどがある

1つのServiceに複数のポートを割り当てることもできる。
HTTPとHTTPSを1つのIPで待ち受ける場合などに便利

ポートに名前をつけることもできる。Podでポートに名前付けを行い、Serviceで参照できる。参照時はポート番号を書かずに定義した名前を書けばいい。targetPort:httpみたいな感じ。

622
サービスディスカバリは条件にマッチするメンバの列挙、名前からエンドポイントを判別できる
k8sではサービスディスカバリの方法として
環境変数
DNS Aレコード
DNS SRVレコード
のいずれかを利用する方法が提供されている

例えば、ServiceのIPにAレコードでサービスディスカバリを設定すると、http://hoge-appのような形でServiceを指定してリクエストができる
このDNS名はクラスタ内のみ有効となる

SRVレコードでポートとプロトコルを指定したサービスディスカバリを設定することもできる

624
クラスタ内でDNSキャッシュを有効にすることもできる。GKEでも用意されているようだ

651
NodePort Serviceで外部疎通性を確立したServiceを利用できる
コンテナ内からの通信にはCluster IPを使う

652
NodePortで利用できるポート範囲は多くのk8s環境で30000-32767となっている。この範囲外の値を設定するとエラーになる
また、複数のNodePort Serviceで同じポートを利用できない

661
クラスタ外からトラフィックを受ける場合によく使われるLoadBalancer Service
NodePortやExternalIPでは単一のIP宛に通信を行うのでそのノードが単一障害点になる。
外部のロードバランサを使うことで障害耐性を上げられる

662
LoadBalancerが払い出すPublicIPは固定できる

メモ
6.6.4まで読んだ。6.7はまだ

Discussion