0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

M1 MacBook Proでkubeadmを使ってKubernetesクラスタを立ち上げる

0
Posted at

はじめに

M1 MacBook Proでkubeadmを使ってKubernetesクラスタを立ち上げてみます。

構成図

kubeadmを使って構築するKubernetesクラスタの構成図は以下です。
architecture.png

環境情報

Component Version
PC M1 MacBook Pro
OS macOS 26.2
multipass 1.16.1+mac
Ubuntu 24.04
Kubernetes 1.35
Calico 3.31

構築手順

仮想マシンを立てる

multipassというCanonical社製の仮想マシン管理ツールを利用します。

❯ brew install --cask multipass

マスターノード用とワーカーノード用のVMを作成します

# マスターノード (CPU:2, Mem:4GB, Disk:10GB)
multipass launch --name k8s-master --cpus 2 --memory 4G --disk 10G lts
# ワーカーノード (CPU:2, Mem:2GB, Disk:10GB)
multipass launch --name k8s-worker --cpus 2 --memory 2G --disk 10G lts

注意
もし仮想マシン作成時にタイムアウトで失敗する場合があります。

❯ multipass launch --name k8s-worker --cpus 2 --memory 2G --disk 10G lts
launch failed: The following errors occurred:
k8s-worker: timed out waiting for response

そのときは、中途半端に作成した仮想マシンを1度削除し、multipassデーモンを再起動した上で、再度仮想マシンを作成してみてください。

❯ multipass delete k8s-worker
❯ multipass purge
❯ sudo pkill -f multipassd
❯ multipass launch --name k8s-worker --cpus 2 --memory 2G --disk 10G lts
Launched: k8s-worker

コンテナランタイム (containerd) の準備

以下はマスターノードを対象とした手順ですが、全てのノードで実施する必要があります。

multipass shellコマンドで仮想マシンのシェルにログインします。

❯ multipass shell k8s-master

以下の作業をrootユーザーで実行します。

sudo -i

必要なカーネルモジュールをロードします。

cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

lsmod | grep -i -E "(overlay|br_netfilter)"

iptablesがブリッジトラフィックを見れるようにするため、ネットワーク設定をします。

cat <<EOF | 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

sysctl --system

スワップを無効化します。

swapoff -a
sed -i '/swap/d' /etc/fstab

containerdをインストールします。

apt update
apt install -y containerd
systemctl status containerd

containerd の設定ファイルを生成と SystemdCgroup を有効化します。

mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
grep SystemdCgroup /etc/containerd/config.toml

containerdを再起動します。

systemctl restart containerd

kubeadm, kubelet, kubectl のインストール

こちらも全ノードに適用します。

rootユーザーで実行します。

sudo -i

必要なパッケージをインストールします。

apt update
apt install -y apt-transport-https ca-certificates curl gpg

Kubernetesの公開鍵を取得します。

mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.35/deb/Release.key | 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.35/deb/ /' | tee /etc/apt/sources.list.d/kubernetes.list

ツールをインストールします。

apt update
apt install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl

マスターノードの構築

マスターノードにログインします。
そこで、rootユーザーでkubeadm initを実行します。

sudo -i
kubeadm init --pod-network-cidr=192.168.0.0/16 --control-plane-endpoint=$(hostname -I | awk '{print $1}')

実行するとkubeadm joinコマンドの例が表示されるためメモしておきます。

一般ユーザーに戻り、kubectlの設定をします。

# exit で root を抜けてから実行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

CNIとしてCalicoをインストールします。

wget https://raw.githubusercontent.com/projectcalico/calico/refs/heads/release-v3.31/manifests/tigera-operator.yaml
wget https://raw.githubusercontent.com/projectcalico/calico/refs/heads/release-v3.31/manifests/custom-resources.yaml
kubectl apply -f tigera-operator.yaml
kubectl apply -f custom-resources.yaml

ワーカーノードの参加

メモした kubeadm join コマンドを root 権限 (sudo) で実行します。

sudo kubeadm join ...

ノードの状態の確認

マスターノードに戻ってkubectlでノードの状態を確認します。

kubectl get nodes

STATUSがReadyになれば動作確認が成功です。

macのターミナルからkubeadmで構築したKubernetesクラスタに接続する

上記の手順ではマスターノードにログインする必要がありました。
KUBECONFIG環境変数にkubeadmで構築したKubernetesクラスタのconfigを指定することで、macのターミナルからkubectlで接続できるようになります。

brew install kubectl
multipass transfer k8s-master:/home/ubuntu/.kube/config ./k8s-config
export KUBECONFIG=$(pwd)/k8s-config
kubectl get nodes

最後に

kubeadmを使ってKubernetesクラスタを構築することができました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?