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

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経由でファイルとしてマウントしたりして使用する。