本ブログでは、数回に分けてKubernetesの構築手順を記載してきた。
- Kubernetes構築手順① (cri-dockerdを使ってコントロールプレーンを構築)
- Kubernetes構築手順② (ワーカーノードを追加)
- Kubernetes構築手順③ (マニフェストファイルを使ってDockerコンテナをデプロイ)
- Kubernetes構築手順④ (コントロールプレーンを冗長構成にする)
今回は、Raspberry Pi 4上のUbuntuに対してKubernetesを構築する手順を記載する。
環境
今回の手順を検証した環境は以下となる。
- HW: Raspberry Pi 4 Model B(RAM 4GB)
- OS: Ubuntu 22.04.4 LTS
- コンテナランタイム: Docker : 24.0.1
- CRI: cri-dockerd: 0.3.10-dev
- Kubernetes: v1.28.5
手順
1. Dockerのインストール
Dockerのインストールはapt
を使って実施するが、その際に利用する前提パッケージを先にインストールする。
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Dockerのリポジトリを登録する。以前はapt-key
コマンドでも同様の登録ができてが、現在は非推奨となっていることから、curl
でキー情報を入手し、登録する手順を実施する。
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Docker CEやその他必要となるパッケージをインストールする。
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Dockerの初期設定として、daemon.json
を作成する。
$ sudo vi /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"insecure-registries": [
"192.168.11.50"
]
}
Dockerのサービスを起動する。
sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker
2. Kubernetesインストール
Dockerと同様、Kubernetesもapt
でインストールするため、リポジトリを登録する。
Kubernetes 1.28.xを使用する場合
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring_1.28.gpg
echo \
'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | \
sudo tee /etc/apt/sources.list.d/kubernetes_1.28.list
sudo apt update
Kubernetes 1.29.xを使用する場合
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/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.29/deb/ /' | \
sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
kubelet、kubeadm、kubectlをインストールする。今回は既存のKubernetesクラスターに追加するため、バージョンを1.28.5に固定している。さらにapt-mark hold
をすることで、インストールしたパッケージが想定されないタイミングでバージョンアップされないようにしている。
sudo apt-get install kubelet=1.28.5-1.1 kubeadm=1.28.5-1.1 kubectl=1.28.5-1.1
sudo apt-mark hold kubelet kubeadm kubectl
kubeletのサービスを起動する。
sudo systemctl daemon-reload
sudo systemctl enable kubelet
sudo systemctl restart kubelet
3. Swap無効化
Kubernetesの前提条件として、Swapを無効化する必要がある。Raspberry PiのUbuntuの場合は、そもそもSwapが設定されておらず、totalの値が0になっているため、このまま作業を続行する。
$ free
total used free shared buff/cache available
Mem: 3880992 226264 2100932 3552 1553796 3472052
Swap: 0 0 0
4. cri-dockerdインストール
cri-dokerdはGo言語でコンパイルする必要があるため、まずはGoのインストールを行う。なお、Ubuntuの標準リポジトリのGoはバージョンが古いため、PPA (Personal Package Archives)のリポジトリ追加を行ったうえでインストールを行う。
sudo add-apt-repository ppa:longsleep/golang-backports
sudo apt update
sudo apt install golang-go
なお、今回のインストールされたGoのバージョンは、1.21.7となる。
$ go version
go version go1.21.7 linux/arm64
cri-dockerdのビルドと配置を行う。
go build -o bin/cri-dockerd
sudo install -o root -g root -m 0755 bin/cri-dockerd /usr/local/bin/cri-dockerd
sudo cp -a packaging/systemd/* /etc/systemd/system
sudo sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' /etc/systemd/system/cri-docker.service
cri-dockerdのサービスを起動する。
sudo systemctl daemon-reload
sudo systemctl enable cri-docker.service
sudo systemctl start cri-docker.socket
5. Kubernetes起動
最後にKubernetesを起動するが、初めてKubernetesクラスターを構成する場合はkubeadm init
を、既存のクラスターに参加する場合はkubeadm join
を行う。
それぞれ、過去記事を参考に対応をいただきたい。
新規にKubernetesクラスターを構成する場合
既存のKubernetesクラスターに参加する場合
今回は既存のクラスターに参加した。結果、以下の通りUbuntu 22.04.4 LTSのノードがKubernetesに登録できた。
$ kubectl get node -o=wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
t1015rasp Ready control-plane 26h v1.28.5 192.168.3.5 <none> Ubuntu 22.04.4 LTS 5.15.0-1046-raspi docker://25.0.3
t3051kube Ready control-plane 276d v1.28.5 192.168.3.1 <none> AlmaLinux 8.6 (Sky Tiger) 4.18.0-372.9.1.el8.x86_64 docker://24.0.6
t3052kube Ready control-plane 276d v1.28.5 192.168.3.2 <none> AlmaLinux 8.6 (Sky Tiger) 4.18.0-372.9.1.el8.x86_64 docker://24.0.6
以上で、Raspberry Pi 4上のUbuntuに対してKubernetesを構築する手順は完了となる。
0 件のコメント:
コメントを投稿