Debian and Kubernetes optimized Kernel in kops
kopsが利用するAMIについて調べたのでまとめておく。
kopsでサポートされているOSは https://github.com/kubernetes/kops/blob/master/docs/images.md に書かれている。デフォルトではDebianが選択される。他にCoreOS、Ubuntu、CentOS、RHELがサポートされているが、現実的にはDebianかCoreOSを選択することになると思う。ドキュメントやGitHub Issuesを見る限り、Debianが最もよくテストされているようだ。
kopsの構成でAMIを指定しない場合、 stable channel で定義されているAMIが選択される。現時点では、Kubernetes 1.9の場合は kope.io/k8s-1.8-debian-jessie-amd64-hvm-ebs-2018-02-08
というAMIが選択される。
spec: images: - name: kope.io/k8s-1.8-debian-jessie-amd64-hvm-ebs-2018-02-08 providerID: aws kubernetesVersion: ">=1.9.0 <1.10.0"
このAMIはDebian 8(Jessie)がベースになっている。具体的な構成はYAML形式のテンプレートで定義されている。詳しくはテンプレートを読むと理解できるが、必要なパッケージのインストールや設定ファイルの変更が記述されている。Dockerのインストールもここで行われる。途中で apt-get dist-upgrade
コマンドが実行されているので、ビルド時点で最新のJessieが生成されるようだ。
このAMIではDebianの標準カーネルではなくKubernetesに最適化されたカーネルが使われている。先ほどのAMIには 4.4.115-k8s
というバージョンのカーネルが組み込まれている。カーネルの具体的な設定はconfigファイルで定義されている。
AMIのビルドおよびリリースにはImageBuilderが利用されている。カーネルのビルドおよびリリースにはMakefileが利用されている。いずれも継続的にリリースできるように工夫されている。
なお、実際の環境で使われているDebianやカーネルのバージョンを調べるにはSSHするのが手っ取り早い。先ほどのAMIでは以下のバージョンが使われている。
$ uname -a Linux hostname 4.4.115-k8s #1 SMP Thu Feb 8 15:37:40 UTC 2018 x86_64 GNU/Linux $ cat /etc/debian_version 8.10