zaki work log

作業ログやら生活ログやらなんやら

[Kubernetes / Ansible] containerdをCRIに指定してクラスター構築するAnsible Playbook

明けましておめでとうございます。

年末に話題になった「KubernetesのコンテナランタイムでDocker(Dockershim)がv1.20で非推奨になる」にともない、CRIに「containerd」を指定したkubeadmを使ったクラスター新規構築を(お正月に)試してみたので簡単にまとめ。

thinkit.co.jp

ドキュメント

kubernetes.io

日本語訳:

kubernetes.io

手順の概要

既存の手順の中の「Dockerをインストールする」という箇所を、まるごと「containerdをインストールする」に入れ替えるだけなので、難しいことは特にないです。(Dockerが入っておらずcontainerdが入っていれば、containerdは自動で検出されるので、CRIの外側の手順は変更なし)

  1. カーネルモジュールのロード
    • overlay
    • br_netfilter
  2. カーネルパラメタの設定
  3. OS毎のcontainerdインストールと設定
    • CentOS/RHELの場合はDocker CEのリポジトリを追加してcontainerdyumでインストール
    • containerdの設定ファイルはsudo containerd config defaultで生成
    • containerdサービスのスタート

という流れ。

Ansible化

手順をそのままAnsibleのRoleにするとこんな感じ。
(昨年作った「kubeadmを使ったKubernetes構築するAnsible Playbook」にこれを組み込んでみた。)

github.com

のちに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で確認できます。

環境

(参考) 構築済みKubernetesのラインタイム変更

こちらについてはまだ試してないのでそのうち。。

repl.info

cyberagent.ai


そういえば今年1件目のブログでした。
今年もよろしくお願いします。