Open2
kind
ピン留めされたアイテム
Inbox
- website: https://kind.sigs.k8s.io/
- kind: https://github.com/kubernetes-sigs/kind
- kindnetd(CNI): https://github.com/kubernetes-sigs/kind/tree/main/images/kindnetd
- cloud-provider-kind(Cloud Controller Manager): https://github.com/kubernetes-sigs/cloud-provider-kind
今回の対象バージョン
Images
Base
kindtest/nodeのベースイメージ。
このbaseイメージにKubernetesのバイナリなどを追加したものがkindtest/nodeイメージになるとのこと。
コンテナイメージのビルド構成
中身
- 各種設定ファイルのコピー: https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/Dockerfile#L26-L42
- systemdやbashなどのインストール: https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/Dockerfile#L72-L88
- 各種systemdサービスの有効化: https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/Dockerfile#L90-L95
- containerdバイナリや設定ファイルのコピー・生成: https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/Dockerfile#L206-L215
- runcバイナリのコピー: https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/Dockerfile#L216-L219
- crictlバイナリのコピー: https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/Dockerfile#L220-L222
- CNI pluginsバイナリのコピー: https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/Dockerfile#L223-L229
- containerd-fuse-overlayfsバイナリのコピー: https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/Dockerfile#L230C13-L232
- container 環境変数の設定: https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/Dockerfile#L237-L240
- STOPSIGNALの設定: https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/Dockerfile#L241-L243
- ENTRYPOINTの設定: https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/Dockerfile#L244-L245
設定ファイルについて
entrypointについて
ENTRYPOINTに設定されているスクリプト
DockerfileのENTRYPOINTは下記のように設定されている( /sbin/init
は systemd
の symlink )
ENTRYPOINT [ "/usr/local/bin/entrypoint", "/sbin/init" ]
最終的にこちらにあるように定義した関数を実行後に引数をPID1でsystemdを実行するという中身になっている
systemd実行前にやっていることは以下
- validate_userns: (コンテナが)ユーザー空間で実行されている場合のバリデーションチェックを実行
- ユーザー空間で実行されているかのチェック(ユーザー空間でなければ以下は実行しない): https://github.com/kubernetes-sigs/kind/blob/main/images/base/files/usr/local/bin/entrypoint#L52-L54
-
ulimit -Hn
値のチェック https://github.com/kubernetes-sigs/kind/blob/main/images/base/files/usr/local/bin/entrypoint#L56-L61 - cgroupコントローラーのチェック https://github.com/kubernetes-sigs/kind/blob/main/images/base/files/usr/local/bin/entrypoint#L63-L70
- configure_containerd: containerdの設定ファイル(/etc/containerd/config.toml)の調整を実行
- ユーザー空間で実行されている場合には
restrict_oom_score_adj: true
を設定: https://github.com/kubernetes-sigs/kind/blob/main/images/base/files/usr/local/bin/entrypoint#L133-L137 - 必要に応じてcontainerd snapshotterを設定: https://github.com/kubernetes-sigs/kind/blob/main/images/base/files/usr/local/bin/entrypoint#L142
- KIND_EXPERIMENTAL_CONTAINERD_SNAPSHOTTER 環境変数が設定されている場合、コンテナのファイルシステムなどの条件に応じてsnapshotterを選択: https://github.com/kubernetes-sigs/kind/blob/main/images/base/files/usr/local/bin/entrypoint#L116-L131
- ファイルシステム:
zfs
ならsnapshotter:native
: https://github.com/kubernetes-sigs/kind/blob/main/images/base/files/usr/local/bin/entrypoint#L120-L122 - ファイルシステム:
fuseblk
ならsnapshotter:fuse-overlayfs
: https://github.com/kubernetes-sigs/kind/blob/main/images/base/files/usr/local/bin/entrypoint#L123-L125 - ユーザー空間でoverlayfsが望ましくない場合はsnapshotter:
fuse-overlayfs
: https://github.com/kubernetes-sigs/kind/blob/main/images/base/files/usr/local/bin/entrypoint#L126-L130
- snapshotter が
fuse-overlayfs
の場合はsystemctl enable containerd-fuse-overlayfs
を実行: https://github.com/kubernetes-sigs/kind/blob/main/images/base/files/usr/local/bin/entrypoint#L143-L146
- ユーザー空間で実行されている場合には
- configure_proxy: コンテナ内でデフォルトで利用するHTTP_PROXY/HTTPS_PROXY/NO_PROXYを設定(設定内容は環境変数に依存)
- fix_mount: mount関連の調整を行う
- mount と umount コマンドの所有者と権限設定(ユーザー空間でkind nodeを実行している場合でも問題なくmount/unmoutを行えるようにするための設定のよう): https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/files/usr/local/bin/entrypoint#L161-L165
- AUFSファイルシステムが検出された場合、sync コマンドを実行(AUFS上でmountコマンドを実行する際に "Text file busy" エラーが発生する問題を回避するため): https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/files/usr/local/bin/entrypoint#L167-L173
- /sysファイルシステムを読み取り専用で再マウント(これはコンテナ内でのsystemdの動作に関するベストプラクティスに従ったものっぽい https://systemd.io/CONTAINER_INTERFACE/): https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/files/usr/local/bin/entrypoint#L175-L188
- マウントの共有設定(kind node内のコンテナがkind node内のボリュームをmountできるようにするための設定っぽい): https://github.com/kubernetes-sigs/kind/blob/v0.23.0/images/base/files/usr/local/bin/entrypoint#L190-L192
- fix_cgroup: cgroup v1の場合は設定をいい感じにする TODO 詳細
実行しているsystemd service
- kubelet
- containerd
- undo-mount-hacks
- (containerd-fuse-overlayfs)