落とし穴に立て札を立てるが如く

ハマりどころの解決が少しでも早くなることを願って書いていきます

コンテナランタイムcontainerdでKubernetesを立ち上げるには

こちらの記事はcloud.config tech blogにもマルチポストします。

はじめに

前回の記事では、kubeadmを用いてKubernetesクラスターを立ち上げる方法を確立できたのでそれを記事にしました。
今回はその中で大の一つであった、コンテナランタイムとしてcontainerdを使用してKubernetesを立ち上げる方法が確立できたので記事として残しておきます。

環境

今回使用している環境はAWSのEC2としています。
主な設定は以下の通りです。
- name: kubernetestest-dev-app-controlplane
image: Canonical, Ubuntu, 24.04 LTS, amd64 noble image build on 2024-04-23
instanceType: t3.small
パブリックIPの自動割り当て: 有効化

手順

  1. containerdをインストール
sudo apt-get update  
sudo apt-get install -y containerd  
sudo mkdir -p /etc/containerd  
containerd config default | sudo tee /etc/containerd/config.toml  
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml  
sudo systemctl restart containerd  
sudo systemctl enable containerd  
  1. IPv4フォワーディングを有効化し、iptablesからブリッジされたトラフィックを見えるようにする
    こちらでかいせつされているとおり、設定の変更を行います。
    この設定を行わないとkubeadmの起動時にpreflightチェックでエラーを起こすので注意です。
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf  
overlay  
br_netfilter  
EOF  
  
sudo modprobe overlay  
sudo modprobe br_netfilter  
  
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf  
net.bridge.bridge-nf-call-iptables  = 1  
net.bridge.bridge-nf-call-ip6tables = 1  
net.ipv4.ip_forward                 = 1  
EOF  
  
sudo sysctl --system  
  1. kubeadmのインストール、軌道
# Kubernetesのインストール  
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg  
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list  
sudo apt-get update  
sudo apt-get install -y kubelet kubeadm kubectl  
sudo apt-mark hold kubelet kubeadm kubectl  
  
# Kubernetesの起動  
sudo kubeadm init --pod-network-cidr=10.0.0.0/16   

動作確認

kubectl get nodes -o wideコマンドを実行すると、以下のようにコンテナランタイムの名前付きでノードの情報が表示されます。
コンテナランタイムがcontainerdになっています、やったね!(この環境ではCNIも仕込んだためNodeの状態がReadyになっています、コンテナランタイムを仕込んでKubernetesを立ち上げただけの状態だとNot Readyとなります)

おわりに

今回の記事では、コンテナランタイムとしてcontainerdを使用してKubernetesを立ち上げる方法を解説しました。
これと前回の記事と合わせて、最新のパッケージを用いてマシンにKubernetesを仕込む方法が確立できたかと思います。
マシンにkubeadmでKubernetesを仕込む方法が確立できていれば、Kubernetesの新しいバージョンが発表されてもEKSやAKSが対応するのを待つことなく新しいバージョンの機能に触れることができるので、個人的にできるようになりたかったことの一つです。
同じようなことがやりたい方がこの記事を読んでいるのかなと思います、そんな方の助けになれば幸いです。

参考