Kubernetes シリーズ3kubeadm を使用した K8s クラスターの作成

目次

  • [1. はじめに](#1. はじめに)
  • [2. Kubeadm によるデプロイ](#2. Kubeadm によるデプロイ)
    • [2.1 環境の準備](#2.1 環境の準備)
      • [2.1.1 基本要件](#2.1.1 基本要件)
      • [2.1.2 ホスト名の設定](#2.1.2 ホスト名の設定)
      • [2.1.3 スワップの無効化](#2.1.3 スワップの無効化)
      • [2.1.4 カーネルモジュールの読み込み](#2.1.4 カーネルモジュールの読み込み)
      • [2.1.5 カーネルパラメータの設定](#2.1.5 カーネルパラメータの設定)
      • [2.1.6 基本ツールのインストール](#2.1.6 基本ツールのインストール)
      • [2.1.7 ファイアウォールの無効化またはポートの開放](#2.1.7 ファイアウォールの無効化またはポートの開放)
    • [2.2 Dockerのインストール](#2.2 Dockerのインストール)
      • [2.2.1 Docker公式リポジトリの追加] (#2.2.1 Docker 公式リポジトリの追加)
      • [2.2.2 Docker CE のインストール] (#2.2.2 Docker CEのインストール)
      • [2.2.3 Dockerの設定](#2.2.3 Dockerの設定)
      • [2.2.4 cri-dockerdのインストール](#2.2.4 cri-dockerdのインストール)
    • [2.3 kubeadm/kubelet/kubectl のインストール](#2.3 kubeadm/kubelet/kubectl のインストール)
      • [2.3.1 Kubernetes apt リポジトリの追加](#2.3.1 Kubernetes apt リポジトリの追加)
      • [2.3.2 Kubernetes コンポーネントのインストール](#2.3.2 Kubernetes コンポーネントのインストール)
    • [2.4 マスターの初期化](#2.4 マスターの初期化)
      • [2.4.1 Kubernetes イメージの事前取得](#2.4.1 Kubernetes イメージの事前取得)
      • [2.4.2 クラスタの初期化](#2.4.2 クラスタの初期化)
      • [2.4.3 kubectl の設定](#2.4.3 kubectl の設定)
      • [2.4.4 Calico ネットワークプラグインのインストール](#2.4.4 Calico ネットワークプラグインのインストール)
    • [2.5 ワーカーのクラスターへの参加](#2.5 ワーカーのクラスターへの参加)
    • [2.6 クラスタの検証](#2.6 クラスタの検証)
      • [2.6.1 ノードの状態の確認](#2.6.1 ノードの状態の確認)
      • [2.6.2 システムコンポーネントの確認](#2.6.2 システムコンポーネントの確認)
      • [2.6.3 テストアプリケーションの作成](#2.6.3 テストアプリケーションの作成)
      • [2.6.4 トラブルシューティングによく使われるコマンド](#2.6.4 トラブルシューティングによく使われるコマンド)
  • [3. Kuboard のインストール(オプション)](#3. Kuboard のインストール(オプション))
    • [3.1 デプロイの手順](#3.1 デプロイの手順)
    • [3.2 単一マシンでの Docker デプロイ](#3.2 単一マシンでの Docker デプロイ)
      • [3.2.1 Kuboard コンテナの起動](#3.2.1 Kuboard コンテナの起動)
      • [3.2.2 Kuboard のステータスの確認](#3.2.2 Kuboard のステータスの確認)
      • [3.2.3 Kuboardへのアクセス](#3.2.3 Kuboardへのアクセス)
    • [3.3 クラスタの追加](#3.3 クラスタの追加)
      • [3.3.1 Kuboard-Agent を使用したクラスタの追加](#3.3.1 Kuboard-Agent を使用したクラスタの追加)
  • [4. まとめ](#4. まとめ)

デプロイ目標:3台のUbuntu Server 24.04サーバー上で、kubeadmを使用して1つのMasterノードと2つのWorker ノードからなる Kubernetes クラスタをデプロイし、Docker のスタンドアロンモードを使用して Kuboard 管理インターフェースをデプロイする。


1. はじめに

Kubernetes クラスタの一般的なデプロイ方法には、主に kubeadm によるデプロイとバイナリデプロイの2種類があります。

kubeadm は、Kubernetes が公式に提供するクラスタ初期化ツールであり、コントロールプレーンの初期化、証明書の生成、 コアコンポーネントの設定、Workerノードのクラスターへの参加などの操作を支援します。その利点は、デプロイプロセスが標準化されており、保守コストが低く、コミュニティのリソースが豊富であることで、テスト環境、学習環境、および中小規模の本番環境に適しています。

バイナリデプロイとは、kube-apiserverkube-controller-managerkube-schedulerkubeletkube-proxyetcd などのコンポーネントを手動でダウンロードして設定する方法を指します。バイナリデプロイの利点は制御性が高く、証明書、パラメータ、高可用性アーキテクチャに対して高度なカスタマイズが必要なシナリオに適していることです。欠点は手順が複雑でトラブルシューティングのコストが高く、Kubernetes コンポーネントの原理に対する理解がより求められることです。

主要機能の比較表:

比較項目 kubeadmによるデプロイ バイナリによるデプロイ
デプロイの難易度 低い、自動化されたプロセス 極めて高い、完全手動設定
カスタマイズ性 限定的、変更可能なパラメータはごくわずか 完全に自由、すべてのコンポーネントを詳細にチューニング可能
コンポーネントの実行形態 コンテナ(静的Pod) ホストマシンのシステムプロセス
証明書管理 自動生成、デフォルトで有効期限1年 独自生成、有効期限・暗号化アルゴリズムのカスタマイズ可能
クラスタのアップグレード 公式ツールによるワンクリックアップグレード コンポーネントを1つずつ手動で更新
学習コスト 低く、下層の詳細は隠蔽されている 高く、コントロールプレーンの全コンポーネントの原理を徹底的に理解する必要がある
代表的な利用シナリオ テスト環境、中小規模の標準的な本番クラスタ 大規模クラスタ、金融コンプライアンス、エッジ向けカスタマイズ、基盤原理の学習

本記事では、kubeadmを使用してKubernetesクラスタをデプロイします。全体的なアーキテクチャは以下の通りです:

ノード 例:ホスト名 例:内部IP ロール
Master k8s-master 172.17.172.87 コントロールプレーンノード
Worker 1 k8s-worker1 172.17.172.89 ワーカーノード
Worker 2 k8s-worker2 172.17.172.90 ワーカーノード

本記事で使用しているコンポーネントのバージョン:

コンポーネント バージョン / 説明
オペレーティングシステム Ubuntu Server 24.04
Kubernetes v1.32.x
コンテナランタイム Docker CE + cri-dockerd
ネットワークプラグイン Calico
Pod サブネット 100.64.0.0/10
Service ネットワークセグメント 10.96.0.0/12
管理パネル Kuboard v3

注意:本文中の IP はあくまで例です。ご自身のサーバーの実際の内部ネットワークの IP に合わせて変更してください。


2. Kubeadm によるデプロイ

kubeadm は、CNCF 公式のネイティブクラスタ初期化ツールであり、標準に準拠したクリーンな Kubernetes クラスタを迅速に構築するために使用されます。バイナリによる手動デプロイに代わるもので、クラスタの初期化、ノードの接続、バージョンアップ、証明書管理のみを担当し、 OSの管理や、ネットワークプラグイン、監視などの追加コンポーネントのインストールは行いません。

2.1 環境の準備

特に記載がない限り、以下の操作は3台のサーバーすべてで実行する必要があります。

2.1.1 基本要件

プロジェクト 要件
CPU 2コア以上
メモリ 2 GB以上、4 GB以上を推奨
ディスク 20 GB以上
ネットワーク 3台のサーバーが内部ネットワークで相互接続されていること
ユーザー root ユーザー、または sudo 権限を持つユーザー

クラウドサーバーを使用する場合、3台のマシンが同一の内部ネットワーク環境にあること、または内部ネットワーク IP 間で相互にアクセスできることを確認する必要があります。

2.1. 2 ホスト名の設定

Master ノードで実行:

hostnamectl set-hostname k8s-master

Worker 1 ノードで実行:

hostnamectl set-hostname k8s-worker1

Worker 2 ノードで実行:

hostnamectl set-hostname k8s-worker2

3台のサーバーすべてで hosts を設定します:

cat >> /etc/hosts << 『EOF』
172.17.172.87 k8s-master
172.17.172.89 k8s-worker1
172.17.172.90 k8s-worker2
EOF

検証:

ping -c 2 k8s-master
ping -c 2 k8s-worker1
ping -c 2 k8s-worker2

2.1.3 スワップの無効化

Kubernetes では、スワップを無効にする必要があります。

swapoff -a
sed -i 『/ swap / s/^/#/』 /etc/fstab

検証:

free -h

もし Swap の行が 0B と表示されれば、swap は無効化されています。

2.1.4 カーネルモジュールの読み込み

cat > /etc/modules-load.d/k8s.conf << 『EOF』
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

確認:

lsmod | grep overlay
lsmod | grep br_netfilter

2.1.5 カーネルパラメータの設定

cat > /etc/sysctl.d/k8s.conf << 『EOF』
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

sysctl --system

確認:

sysctl net.ipv4.ip_forward
sysctl net.bridge.bridge-nf-call-iptables

期待される出力:

net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1

2.1.6 基本ツールのインストール

apt-get update
apt-get install -y apt-transport-https ca-certificates curl gpg lsb-release wget vim

2.1.7 ファイアウォールの無効化またはポートの開放

テスト環境の場合は、Ubuntuのデフォルトファイアウォールを直接無効化できます:

systemctl stop ufw
systemctl disable ufw

本番環境の場合は、ポートごとに厳密に許可設定を行うことを推奨します。

Master ノードでは、以下のポートを開放する必要があります:

ポート プロトコル 用途
6443 TCP Kubernetes API Server
2379-2380 TCP etcd
10250 TCP kubelet
10257 TCP kube-controller-manager
10259 TCP kube-scheduler
30000-32767 TCP NodePort サービス

Worker ノードで許可が必要なポート:

ポート プロトコル 用途
10250 TCP kubelet
30000-32767 TCP NodePort サービス

Calico ネットワークプラグインで必要となる可能性のあるもの:

ポート プロトコル 用途
179 TCP Calico BGP モード
4789 UDP Calico VXLAN モード

2.2 Docker のインストール

以下の操作は、3台のサーバーすべてで実行してください。

2.2.1 Docker 公式リポジトリの追加

install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc

cat > /etc/apt/sources.list.d/docker.list << EOF
deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable
EOF

apt-get update

サーバーから Docker の公式リポジトリへのアクセスが遅い場合は、利用可能な国内の Docker apt ミラーリポジトリに置き換えることができます。

2.2.2 Docker CEのインストール

apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx -plugin docker-compose-plugin

2.2.3 Dockerの設定

Kubernetes では、Dockersystemdcgroup ドライバー として使用することを推奨しています。

mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 『EOF』
{
  「exec-opts」: [「native.cgroupdriver=systemd」],
  「registry-mirrors」: [「https://docker.m.daocloud.io」],
  「log-driver」: 「json-file」,
  「log-opts」: {
    「max-size」: 「100m」
  }
}
EOF

systemctl daemon-reload
systemctl enable docker --now
systemctl restart docker

Dockerの確認:

docker version
docker info | grep -i 『Cgroup Driver』

期待される出力には以下が含まれます:

Cgroup Driver: systemd

2.2.4 cri-dockerdのインストール

Kubernetes1.24 以降、組み込みの dockershim が削除されました。引き続き Docker をコンテナランタイムとして使用する場合は、別途 cri-dockerd をインストールする必要があります。

サーバーのアーキテクチャを確認:

uname -m

一般的なアーキテクチャの対応関係:

uname -m の出力 cri-dockerd パッケージのアーキテクチャ
x86_64 amd64
aarch64 arm64

cri-dockerd 0.3.16 を例として、x86_64 サーバーでは以下を実行します:

cd /tmp
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16.amd64.tgz
tar -xzf cri-dockerd-0.3.16.amd64.tgz
install -m 0755 cri-dockerd/cri-dockerd /usr/local/bin/cri-dockerd

ARM64 サーバーでは、以下を実行します:

cd /tmp
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.16/cri-dockerd-0.3.16.arm64.tgz
tar -xzf cri-dockerd-0.3.16.arm64.tgz
install -m 0755 cri-dockerd/cri-dockerd /usr/local/bin/cri-dockerd

systemd サービスの作成:

cat > /etc/systemd/system/cri-docker.service << 『EOF』
[Unit]
Description=Dockerアプリケーションコンテナエンジン用CRIインターフェース
Documentation=https://docs.mirantis.com
After=network-online.target docker.service
Wants=network-online.target
Requires=cri-docker.socket

[Service]
Type=notify
ExecStart=/usr/local/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.10
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
EOF

cat > /etc/systemd/system/cri-docker.socket << 『EOF』
[Unit]
Description=API用CRI Dockerソケット
PartOf=cri-docker.service

[Socket]
ListenStream=/var/run/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
EOF

systemctl daemon-reload
systemctl enable --now cri-docker.socket
systemctl enable --now cri-docker.service

cri-dockerdの確認:

systemctl status cri-docker.service --no-pager
cri-dockerd --version

2.3 kubeadm/kubelet/kubectl のインストール

以下の操作は、3台のサーバーすべてで実行します。

kubeadm は単なるクラスタ初期化ツールであり、静的な Pod マニフェストを生成した後、ローカルに常駐するプロセス kubelet に依存してコントロールプレーンコンテナを起動する必要があります。一方、kubectl は、クラスタの操作および管理を行うためのクライアントツールです。

2.3.1 Kubernetesのaptリポジトリを追加する

本記事では Kubernetes v1.32 を使用しています。

mkdir -p /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release. key \\
  | gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

cat > /etc/apt/sources.list.d/kubernetes.list << 『EOF』
deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /
EOF

apt-get update

2.3.2 Kubernetes コンポーネントのインストール

apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
systemctl enable kubelet

バージョンの確認:

kubeadm version
kubelet --version
kubectl version --client

この時点では、kubeletRunning状態になっていない場合がありますが、これは正常です。Masterの初期化が完了するか、Workerがクラスタに参加すると、kubeletは正常に動作します。


2.4 Masterの初期化

以下の操作は、Master ノードでのみ実行してください。

2.4.1 Kubernetesイメージの事前取得

kubeadm config images pull \\
  --kubernetes-version=v1.32.0 \\
  
--image-repository=registry.aliyuncs.com/google_containers \\
  --cri-socket=unix:///var/run/cri-dockerd.sock

2.4.2 クラスタの初期化

172.17.172.87 を、お使いの Master の内部ネットワーク IP に置き換えてください。

kubeadm init \\
  --apiserver-advertise-address=172.17.172.87 \\
  --pod-network-cidr=100.64.0.0/10 \\
  
--kubernetes-version=v1.32.0 \\
  --image-repository=registry.aliyuncs.com/google_containers \\
  --cri-socket=unix:///var/run/cri-dockerd.sock

初期化に成功すると、次のような出力が表示されます:

kubeadm join 172.17.172.87:6443 --token <token> \\
  --discovery-token-ca-cert-hash sha256:<hash>

この kubeadm join コマンドを保存しておいてください。後で Worker ノードをクラスタに追加する際に必要になります。

2.4.3 kubectl の設定

root ユーザーとして以下を実行します:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

確認:

kubectl get nodes

この時点で、MasterNotReady と表示される場合があります。これは、ネットワークプラグインがまだインストールされていないためです。

2.4.4 Calico ネットワークプラグインのインストール

Calico マニフェストをダウンロード:

curl -O https://raw.githubusercontent.com/projectcalico/calico/v3.29.1/manifests/calico.yaml

本記事ではクラスタの初期化時に Pod のネットワークセグメントとして 100.64.0.0/10 を使用しているため、CalicoCALICO_IPV4POOL_CIDR がこのネットワークセグメントと一致していることを確認する必要があります。

もし calico.yamlCALICO_IPV4POOL_CIDR が存在する場合、次のように置き換えることができます:

sed -i 『s#192.168.0.0/16#100.64.0.0/10#g』 calico.yaml

Calicoを適用します:

kubectl apply -f calico.yaml

システム Pod のステータスを確認:

kubectl get pods -n kube-system -w

などの calico-nodecalico-kube-controllers などのコンポーネントが Running 状態になるのを待ってから、ノードの状態を確認します:

kubectl get nodes -o wide

2.5 ワーカーのクラスターへの参加

以下の操作は、2台の ワーカー ノードでそれぞれ実行します。

Master による初期化時に出力された kubeadm join コマンドを使用し、--cri-socket パラメータを追加します:

kubeadm join 172.17.172.87:6443 --token <token> \\
  --discovery-token-ca-cert-hash sha256:<hash> \\
  --cri-socket=unix:///var/run/cri-dockerd.sock

join コマンドを保存し忘れた場合は、Master ノードで再生成できます:

kubeadm token create --print-join-command

その後、出力されたコマンドを Worker ノードにコピーして実行し、以下を追加します:

--cri-socket=unix:///var/run/cri-dockerd.sock

Worker が正常に加入した後、Master ノードで確認します:

kubectl get nodes -o wide

2.6 クラスタの検証

以下の操作は Master ノードで実行します。

2.6.1 ノードの状態の確認

kubectl get nodes -o wide

期待される結果:

NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 10m v1.32.x
k8s-worker1 Ready <none> 5m v1.32.x
k8s-worker2 Ready <none> 5m v1.32.x

2.6.2 システムコンポーネントの確認

kubectl get pods -A

以下のコンポーネントが Running 状態であることを重点的に確認してください:

  • kube-apiserver
  • kube-controller-manager
  • kube-scheduler
  • etcd
  • kube-proxy
  • calico-node
  • calico-kube-controllers

2.6.3 テストアプリケーションの作成

nginx Deploymentを作成します:

kubectl create deployment nginx --image=nginx:1.25

NodePort サービスを公開:

kubectl expose deployment nginx --port=80 --type=NodePort

PodおよびServiceを確認します:

kubectl get pod -o wide
kubectl get svc nginx

出力例:

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
nginx NodePort 10.96.xxx.xxx <none> 80:30xxx/TCP

ブラウザまたはコマンドラインから、任意のノードの NodePort にアクセスします:

curl http://172.17.172.87:30xxx
curl http://172.17.172.89:30xxx
curl http://172.17.172.90:30xxx

テスト完了後のクリーンアップ:

kubectl delete svc nginx
kubectl delete deployment nginx

2.6.4 よく使われるトラブルシューティングコマンド

kubectl get nodes
kubectl get pods -A
kubectl describe node <node-name>
kubectl describe pod <pod-name> -n <namespace>
journalctl -u kubelet -f
journalctl -u docker -f
journalctl -u cri-docker -f

ノードをリセットする必要がある場合:

kubeadm reset -f --cri-socket=unix:///var/run/cri-dockerd.sock
rm -rf /etc/cni/net.d /var/lib/kubelet /var/lib/etcd $HOME/.kube

3. Kuboard のインストール(オプション)

3.1 デプロイの手順

KuboardKubernetes のグラフィカル管理ツールであり、Web ページを通じて、NamespaceDeploymentServicePodConfigMapSecret、ログ、ターミナルなどが含まれます。

Kuboard の一般的なデプロイ方法は以下の通りです:

デプロイ方法 説明 適用シナリオ
Docker 単一サーバー展開 Kuboard は特定のサーバー上の Docker コンテナ内で実行され、クラスター内では Agent を通じて接続されます シンプルで安定しており、学習や中小規模の環境に適しています
Kubernetes 内展開 Kuboard をワークロードとして Kubernetes クラスタ内で実行 すべてのコンポーネントを Kubernetes で管理したい場合
Kuboard-Spray Kubernetes クラスタのインストールとメンテナンスをグラフィカルに行う Web ページを使用してクラスタのライフサイクルを管理したい

本記事では、Docker による単一サーバーでのデプロイ方法を採用しています:

  • Kuboard コンテナは、Master のホストマシン上で実行されます。
  • Kuboard は、Kubernetes クラスタ内にはデプロイされません。
  • Kubernetes クラスタは、Kuboard-Agent を通じて Kuboard に接続されます。
  • Agent は、Master の内部ネットワーク IP 経由で Kuboard にアクセスします。

本記事のポート構成:

ポート 用途
38000 Kuboard Web ページへのアクセスポート
38001 Kuboard-Agent のバックエンド接続ポート

クラウドサーバーを使用する場合は、セキュリティグループで 38000 へのアクセスを許可する必要があります。38001 については、クラスターの内部ネットワークからのアクセスのみを許可することを推奨します。


3.2 単一サーバーでの Docker 展開

以下の操作は Master ノードで実行します。

3.2.1 Kuboard コンテナの起動

172.17.172.87 を、Master の内部ネットワーク IP に置き換えてください。

docker pull swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3

mkdir -p /root/kuboard-data

docker run -d \\
  --restart=unless-stopped \\
  --privileged \\
  --name=kuboard \\
  
-p 38000:80/tcp \\
  -p 38001:10081/tcp \\
  -e KUBOARD_ENDPOINT="http://172.17.172.87:58094" \\
  
-e KUBOARD_AGENT_SERVER_TCP_PORT="58099" \\
  -v /root/kuboard-data:/data \\
  swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3

パラメータの説明:

パラメータ 説明
-p 38000:80 ブラウザから Kuboard Web ページにアクセス
-p 38001:10081 Kuboard-Agent が Kuboard に接続
KUBOARD_ENDPOINT Agent が Kuboard にアクセスするアドレス。クラスタ内で到達可能な IP を使用する必要があります
KUBOARD_AGENT_SERVER_TCP_PORT エージェントの接続先ポート。ホストマシンのマッピングポートと一致させる必要があります
/root/kuboard-data:/data Kuboard データの永続化ディレクトリ

注意:KUBOARD_ENDPOINT127.0.0.1 または localhost と指定しないでください。そうすると、クラスタ内の AgentKuboard にアクセスできなくなります。

3.2.2 Kuboard のステータスを確認する

docker ps --filter name=kuboard
docker logs -f kuboard

コンテナの状態が Up となっている場合、起動に成功しています。

3.2.3 Kuboardへのアクセス

ブラウザからのアクセス:

http://<マスターのパブリックIP>:38000

デフォルトのアカウントとパスワード:

プロジェクト
ユーザー名 admin
パスワード Kuboard123

初回ログイン後は、直ちにデフォルトのパスワードを変更することを推奨します。


3.3 クラスタの追加

Kuboard を起動した後、Kubernetes クラスターを Kuboard に追加する必要があります。

3.3.1 Kuboard-Agent を使用したクラスターの追加

操作手順:

  1. Kuboardにログインします。
  2. 「クラスタを追加」をクリックします。
  3. Kuboard-Agent」方式を選択します。
  4. クラスタ名(例:ubuntu24-k8s)を入力します。
  5. Kuboard ページに、kubectl apply コマンドが生成されます。
  6. このコマンドをコピーし、Masterノードで実行します。

実行が完了したら、Agent Podを確認します:

kubectl get pods -n kuboard

Agent に関連する Pod のステータスが Running になるのを待ちます。その後、Kuboard ページ上のクラスタステータスが正常に変わります。

4. まとめ

本記事では、Ubuntu Server 24.04 環境における、1台のマスターと2台のスレーブから構成される Kubernetes クラスタのデプロイを完了しました。主な手順は以下の通りです:

  1. 3台のサーバー環境を初期化します。
  2. Docker および cri-dockerd をインストールします。
  3. kubeadmkubeletkubectl をインストールします。
  4. kubeadm を使用して マスター を初期化します。
  5. Calico ネットワークプラグインをインストールします。
  6. 2台の ワーカー ノードをクラスターに追加します。
  7. Kubernetes クラスターの状態を確認します。
  8. Dockerのシングルマシンモードを使用して、Kuboardをデプロイします。
  9. Kuboard-Agentを介して、Kubernetesクラスタを追加します。

学習、テスト、および中小規模のクラスターにおいては、kubeadm + Docker + cri-dockerd + Calico + Kuboard は、理解しやすく保守も容易なデプロイソリューションです。本番環境では、高可用性 Masteretcd のバックアップ、イメージリポジトリ、監視・アラート、 ログ収集、証明書のローテーション、セキュリティ強化などについてさらに検討する必要があります。