目次
- [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 code> ノードからなるKubernetesクラスタをデプロイし、Dockerのスタンドアロンモードを使用してKuboard管理インターフェースをデプロイする。
1. はじめに
Kubernetes クラスタの一般的なデプロイ方法には、主に kubeadm によるデプロイとバイナリデプロイの2種類があります。
kubeadm は、Kubernetes が公式に提供するクラスタ初期化ツールであり、コントロールプレーンの初期化、証明書の生成、 コアコンポーネントの設定、Workerノードのクラスターへの参加などの操作を支援します。その利点は、デプロイプロセスが標準化されており、保守コストが低く、コミュニティのリソースが豊富であることで、テスト環境、学習環境、および中小規模の本番環境に適しています。
バイナリデプロイとは、kube-apiserver、kube-controller-manager、 kube-scheduler、kubelet、kube-proxy、etcd などのコンポーネントを手動でダウンロードして設定する方法を指します。バイナリデプロイの利点は制御性が高く、証明書、パラメータ、高可用性アーキテクチャに対して高度なカスタマイズが必要なシナリオに適していることです。欠点は手順が複雑でトラブルシューティングのコストが高く、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 では、Docker が systemd を cgroup ドライバー として使用することを推奨しています。
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のインストール
Kubernetes は 1.24 code> 以降、組み込みの 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
この時点では、kubeletがRunning状態になっていない場合がありますが、これは正常です。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
この時点で、Masterが NotReady と表示される場合があります。これは、ネットワークプラグインがまだインストールされていないためです。 p>
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 を使用しているため、Calico の CALICO_IPV4POOL_CIDR がこのネットワークセグメントと一致していることを確認する必要があります。
もし calico.yaml に CALICO_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-node、calico-kube-controllers などのコンポーネントが Running code> 状態になるのを待ってから、ノードの状態を確認します:
kubectl get nodes -o wide
2.5 ワーカーのクラスターへの参加
以下の操作は、2台の ワーカー ノードでそれぞれ実行します。
Master code> による初期化時に出力された 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-apiserverkube-controller-managerkube-scheduleretcdkube-proxycalico-nodecalico-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 code>
3. Kuboard のインストール(オプション)
3.1 デプロイの手順
Kuboard は Kubernetes のグラフィカル管理ツールであり、Web ページを通じて、Namespace code>、Deployment、Service、Pod、ConfigMap、Secret、ログ、ターミナルなどが含まれます。
Kuboard の一般的なデプロイ方法は以下の通りです:
| デプロイ方法 | 説明 | 適用シナリオ |
|---|---|---|
| Docker 単一サーバー展開 | Kuboard は特定のサーバー上の Docker コンテナ内で実行され、クラスター内では Agent を通じて接続されます | シンプルで安定しており、学習や中小規模の環境に適しています |
| Kubernetes 内展開 | Kuboard をワークロードとして Kubernetes クラスタ内で実行 | すべてのコンポーネントを Kubernetes で管理したい場合 |
| Kuboard-Spray | Kubernetes クラスタのインストールとメンテナンスをグラフィカルに行う | Web ページを使用してクラスタのライフサイクルを管理したい |
本記事では、Docker による単一サーバーでのデプロイ方法を採用しています:
Kuboardコンテナは、Masterのホストマシン上で実行されます。Kuboardは、Kubernetesクラスタ内にはデプロイされません。Kubernetes code> クラスタは、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_ENDPOINTを127.0.0.1またはlocalhostと指定しないでください。そうすると、クラスタ内のAgentがKuboardにアクセスできなくなります。
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 を使用したクラスターの追加
操作手順:
Kuboardにログインします。- 「クラスタを追加」をクリックします。
- 「
Kuboard-Agent」方式を選択します。 - クラスタ名(例:
ubuntu24-k8s)を入力します。 Kuboardページに、kubectl applyコマンドが生成されます。- このコマンドをコピーし、
Masterノードで実行します。
実行が完了したら、Agent Podを確認します:
kubectl get pods -n kuboard
Agent に関連する Pod のステータスが Running になるのを待ちます。その後、Kuboard ページ上のクラスタステータスが正常に変わります。
4. まとめ
本記事では、Ubuntu Server 24.04 環境における、1台のマスターと2台のスレーブから構成される Kubernetes クラスタのデプロイを完了しました。主な手順は以下の通りです:
- 3台のサーバー環境を初期化します。
Dockerおよびcri-dockerdをインストールします。kubeadm、kubelet、kubectlをインストールします。 li>kubeadmを使用してマスターを初期化します。Calicoネットワークプラグインをインストールします。- 2台の
ワーカーノードをクラスターに追加します。 Kubernetesクラスターの状態を確認します。Dockerのシングルマシンモードを使用して、Kuboardをデプロイします。Kuboard-Agentを介して、Kubernetesクラスタを追加します。
学習、テスト、および中小規模のクラスターにおいては、
kubeadm + Docker + cri-dockerd + Calico + Kuboardは、理解しやすく保守も容易なデプロイソリューションです。本番環境では、高可用性Master、etcdのバックアップ、イメージリポジトリ、監視・アラート、 ログ収集、証明書のローテーション、セキュリティ強化などについてさらに検討する必要があります。