明けましておめでとうございます。
年末に話題になった「KubernetesのコンテナランタイムでDocker(Dockershim)がv1.20で非推奨になる」にともない、CRIに「containerd」を指定したkubeadmを使ったクラスター新規構築を(お正月に)試してみたので簡単にまとめ。
ドキュメント
日本語訳:
手順の概要
既存の手順の中の「Dockerをインストールする」という箇所を、まるごと「containerdをインストールする」に入れ替えるだけなので、難しいことは特にないです。(Dockerが入っておらずcontainerdが入っていれば、containerdは自動で検出されるので、CRIの外側の手順は変更なし)
- カーネルモジュールのロード
- overlay
- br_netfilter
- カーネルパラメタの設定
- net.bridge.bridge-nf-call-iptables
- net.bridge.bridge-nf-call-ip6tables
- net.ipv4.ip_forward
- ※ bridgeネットワークの設定は「ホストのネットワーク設定」で行う内容と同じです
- OS毎の
containerd
インストールと設定
という流れ。
Ansible化
手順をそのままAnsibleのRoleにするとこんな感じ。
(昨年作った「kubeadmを使ったKubernetes構築するAnsible Playbook」にこれを組み込んでみた。)
のちにcontainerdサービス開始はhandlersで実装。
また、/etc/sysctl.d/99-kubernetes-cri.confファイルはsysctlモジュールを使って生成できるので、このファイルをcopyモジュールで作成する処理は不要。
構築時間
Kubernetesに必要な部分のみのラインタイムというだけあって、Dockerを使った構築に比べると1分近く構築時間が短くなりました。
PLAY RECAP ******************************************************************** master : ok=43 changed=37 unreachable=0 failed=0 skipped=12 rescued=0 ignored=1 worker0 : ok=26 changed=23 unreachable=0 failed=0 skipped=9 rescued=0 ignored=1 worker1 : ok=26 changed=23 unreachable=0 failed=0 skipped=9 rescued=0 ignored=1 real 3m54.430s user 0m23.420s sys 0m8.903s [zaki@cloud-dev initialize-kubeadm-ansible (fix/#41_typo_control_plane)]$ ssh master Last login: Mon Jan 4 07:37:45 2021 from cloud-dev.okd4.naru.jp-z.jp [zaki@master ~]$ kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME master Ready control-plane,master 94s v1.20.1 192.168.0.131 <none> CentOS Linux 7 (Core) 3.10.0-1062.el7.x86_64 containerd://1.4.3 worker0 Ready <none> 37s v1.20.1 192.168.0.135 <none> CentOS Linux 7 (Core) 3.10.0-1062.el7.x86_64 containerd://1.4.3 worker1 Ready <none> 37s v1.20.1 192.168.0.136 <none> CentOS Linux 7 (Core) 3.10.0-1062.el7.x86_64 containerd://1.4.3
OS(CentOS 7)インストール直後の状態からの構築で全部完了するのに(Dockerの場合と比較すると1分近く速くなって)今のところ最速で4分弱。(new record!)
使用しているCRIは、kubectl get node -o wide
で確認できます。
CRIにcontainerdを指定してKubernetesデプロイできたー。
— z a k i (@zaki_hmkc) 2021年1月1日
Dockerより1分くらいインストール速いな pic.twitter.com/hObGF9WhI1
ついに4分切ってしまったw pic.twitter.com/YpyqpgxCoE
— z a k i (@zaki_hmkc) 2021年1月3日
環境
- CentOS 7.9.2009
- Ansible実行ノード
- Ansible 2.9.10 (Python 3.6.8)
- Kubernetesノード (x3)
- Kubernetes v1.20.1
- containerd 1.4.3
(参考) 構築済みKubernetesのラインタイム変更
こちらについてはまだ試してないのでそのうち。。
そういえば今年1件目のブログでした。
今年もよろしくお願いします。