k8sを理解するために用語をざっくりとまとめた
オライリーの入門 Kubernetesを読んでいて、用語が整理できてないと、読み終わっても「よくわからんな?」となりそうだったので読書メモだったり、自分の頭で理解しやすいようにコンバートした内容メモ
開発環境
Macの場合、dockerのk8sを使うと楽だった。 zshの場合は以下で補完が効くようになる。
echo "source <(kubectl completion zsh)" >> ~/.zshrc
あとログは
brew install stern
して
stern kuard --all-namespaces
とかすると楽だった。
stern++
以下は用語とかメモ
node
k8sのクラスタを構成する(仮想|物理)マシン。 podが動くところ。
オブジェクト
node, podなどのリソースの実態
Service
サービスディスカバリを担当する部分。
pod間で連携するときや、外部へ公開するときは必要。
主にpodをLabelで識別してまとめたもの。
Label
オブジェクトを特定するための情報。 KeyとValueで管理
Annotation
オブジェクト特定しないがツールなどで使う情報を入れる。 KeyとValueで管理。
Endpoints
Serviceが管理するpodのIPの一覧。
Pod
podは鯨の群れ。
大体コンテナという意味と考えてよいけど、必ず1pod=1コンテナではなく、いくつかのコンテナをまとめた単位。
1コンテナごとに異なる仕事を割り振って、それらの集合体として仮想サーバのような単位でpodを書くっぽい。
そして、同じpod内のコンテナは必ず同じマシン上に配置される。
同じpodに入れるコンテナは、別マシンに分けるとうまく動かないコンテナだけにするとよい。
Podマニフェスト
Podの設定を書いたファイル。
宣言的設定を書く。
宣言的設定と命令的設定。
フォーマットはyamlかjsonだが、yamlだとコメントを書けるので便利。
k8sはマニフェストを受け入れてetcdに保存する。
スケジューラが受け入れたマニフェストをもとに、その状態に持っていく。
namespace
そのまま。
フォルダのようなもの。
無指定の場合はdefaultが使われる
context
–namespace,–cluster,–userなどを使いやすくするconfigセット
volumes
- emptyDir: Podを落とすと消える。コンテナ間のコミュニケーション、キャッシュなどに使われる。
- hostPath: ホストコンピュータをマウントするときに使う
- その他: NFSや、EBSなどネットワーク越しのディスクもマウントできる
Job
DBのmingrationやバッチ処理などを実行するときに使う。
処理が正常終了すると終わる
ReplicaSet
スケールや冗長性などを担う部分。同じPodを複数管理するのに使う。
PodをLabelで識別してまとめたものをこうあるべき
という調整ループで監視して、あるべき状態にする。
Deployment
deployを担う部分。ReplicaSetを管理するのに使う。
ReplicaSetをLabelで識別してまとめたものをこうあるべき
という調整ループで監視して、あるべき状態にする。
DaemonSet
node(ごと)で動かしたいデーモンやエージェントのpodのset
nodeで1つしか動かないようにしたいものを入れる。
nodeをLabelで識別してまとめたもに対しても適用できるが、基本はnodeに対して適用される
PersistentVolume
コンテナの外部に存在するディスクストレージ。
NSFや外部サービス(awsElasticBlockStoreなど)が使える
PersistentVolumeClaim
PersistentVolumeをPodから使うときに使う中間層
StorageClass
PersistentVolumeを作らずにゆるふわで外部ストレージを使いたいときに使う
StatefulSet
ReplicaSetのようなものだが、それぞれが別の役割をするときに使う(masterとレプリカなど)
ConfigMap
テキストデータを環境変数に読みこんだり、ファイルシステムとしてMountする事もできる(Keyがファイル名、valueが中身)
Secret
base64エンコードしたデータを読み込むのに使う。API経由でアクセスしたりSecret volume経由でファイルとしてマウントしたりして使用する。