Kubernetes完全ガイド読書ログ
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
のアップデートにはRecreate
とRollingUpdate
がある
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を実行するリソースで、Cronjob
とJob
の関係はDeployment
とReplicaSet
の関係と同じ
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