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?

ベアメタルサーバーでKubernetesクラスタを構築する(後編: Kubernetes設定)

Last updated at Posted at 2025-10-13

背景・前編について

本記事は、前編の続きとなっており、2台の物理サーバー上に仮想マシンを作成し、最終的にKubernetesクラスタを構築するというのがゴールになっています。

研究室にあった物理サーバーを2台使用して、4台の仮想マシンを作成しました。
ネットワークの設定も行い相互に通信できる状態にできたので、これらを使ってMaster Node1台、Worker Node3台のKubernetesクラスタをkubeadmを用いて構築していこうと思います。

環境について

  • Node
    • Master Node(4vCPU, 4G RAM)
    • Worker Node 3台(3vCPU, 3G RAM)
  • OS
    • Ubuntu 22.04.5 LTS
  • Kubernetes
    • v1.30(後半でv1.31にアップグレードします)
  • コンテナランタイム
    • containerd v1.7.28
  • CNI
    • Flannel v0.27.4

Kubernetesクラスタ構築

全VMでの共通設定

swap無効化

kubeletは、swapが有効だと動作しません。

sudo swapoff -a
sudo vim /etc/fstab # /swap.imgの行をコメントアウト

カーネルモジュール&sysctl

Podネットワーク通信やiptables経由のパケット制御を可能にするためです。
参考:

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/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sudo sysctl --system

containerd

Kubernetesがコンテナを動かすための基盤となるコンテナランタイムとして、containerdを導入します。

sudo apt-get update
sudo apt-get install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sed 's/SystemdCgroup = false/SystemdCgroup = true/' | sudo tee /etc/containerd/config.toml >/dev/null
sudo systemctl restart containerd
sudo systemctl enable containerd

kubeadm, kubelet, kubectlインストール

Kubernetesクラスタの構築・管理に必要な3つのツールをインストールします。

sudo mkdir -p /etc/apt/keyrings
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 -y
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Master NodeのVMでの設定

kubeadm init

Master Node上でクラスタを初期化し、APIサーバやコントロールプレーンを構築します。

echo 'KUBELET_EXTRA_ARGS=--node-ip=192.168.80.101' | sudo tee /etc/default/kubelet
sudo systemctl restart kubelet
sudo kubeadm init \
  --apiserver-advertise-address=192.168.80.101 \
  --pod-network-cidr=10.244.0.0/16

CNIの導入(Flannelを利用)

Pod間通信を実現するネットワークプラグインの一つである、Flannelを導入します。

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.27.4/Documentation/kube-flannel.yml

Worker NodeのVMでの設定

kubeadm join

各WorkerノードをMasterが管理するクラスタに参加させます。
まず、ブリッジのNICのIPを、kubelet の使用する IP を固定することで、各NodeのIPが指定されたアドレスになります。

# それぞれBridgedの自IPを kubelet に固定
# k8s-worker-1
echo 'KUBELET_EXTRA_ARGS=--node-ip=192.168.80.103' | sudo tee /etc/default/kubelet
sudo systemctl restart kubelet
# k8s-worker-2
echo 'KUBELET_EXTRA_ARGS=--node-ip=192.168.80.105' | sudo tee /etc/default/kubelet
sudo systemctl restart kubelet
# k8s-worker-3
echo 'KUBELET_EXTRA_ARGS=--node-ip=192.168.80.107' | sudo tee /etc/default/kubelet
sudo systemctl restart kubelet

sudo systemctl restart kubelet
# k8s-masterで出力されたjoinを実行
sudo kubeadm join 192.168.80.101:6443 --token <token> \
	--discovery-token-ca-cert-hash sha256:<hash>

ローカル設定

動作確認

Kubernetesクラスタの認証情報ファイル(admin.conf)を、Master Nodeからローカルの~/.kube/config にコピーすることで、ローカルPCからkubectlコマンドでmasterクラスタへアクセスできるようになります。

そして、以下のように正しいkubeconfigを参照するようにします。

chmod 600 ~/.kube/kubeconfig-master.yaml
export KUBECONFIG=~/.kube/kubeconfig-master.yaml

Nodeの確認

$ kubectl get nodes
NAME           STATUS   ROLES           AGE   VERSION
k8s-master     Ready    control-plane   35m   v1.30.14
k8s-worker-1   Ready    <none>          31m   v1.30.14
k8s-worker-2   Ready    <none>          18m   v1.30.14
k8s-worker-3   Ready    <none>          13m   v1.30.14

[サブトピック] Kubernetesアップグレード

概要

せっかくなので、Kubernetesのアップグレードもやってみようと思います。v1.30をインストールしていたので、v1.31にアップグレードしてみます。
参考:

全VM(Node)での共通作業

パッケージリポジトリの切り替え

sudo sed -i 's/v1.30/v1.31/' /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update

kubeadmのアップグレード

sudo apt-mark unhold kubeadm && \
sudo apt-get update && sudo apt-get install -y kubeadm='1.31.x-*' && \
sudo apt-mark hold kubeadm

kubelet, kubectlのアップグレード(ノードアップグレードの後に実行)

sudo apt-mark unhold kubelet kubectl && \
sudo apt-get update && sudo apt-get install -y kubelet='1.31.x-*' kubectl='1.31.x-*' && \
sudo apt-mark hold kubelet kubectl

Control Planeのアップグレード

plan

sudo kubeadm upgrade plan

You can now apply the upgrade by executing the following command:
kubeadm upgrade apply v1.31.13

アップグレードの実行

sudo kubeadm upgrade apply v1.31.13

[upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.31.13". Enjoy!

動作確認(Master Nodeがv1.31にアップグレードされている)

$ kubectl get nodes
NAME           STATUS   ROLES           AGE     VERSION
k8s-master     Ready    control-plane   2d21h   v1.31.13
k8s-worker-1   Ready    <none>          2d21h   v1.30.14
k8s-worker-2   Ready    <none>          2d20h   v1.30.14
k8s-worker-3   Ready    <none>          2d20h   v1.30.14

Worker Nodeのアップグレード

Master Nodeにて各Worker NodeのDrainを行う

kubectl drain k8s-worker-1 --ignore-daemonsets --delete-emptydir-data

実行後、以下のようにDrainしたNodeがSchedulingDisabledになることを確認

$ kubectl get nodes
NAME           STATUS                     ROLES           AGE     VERSION
k8s-master     Ready                      control-plane   2d21h   v1.31.13
k8s-worker-1   Ready,SchedulingDisabled   <none>          2d21h   v1.30.14
k8s-worker-2   Ready                      <none>          2d20h   v1.30.14
k8s-worker-3   Ready                      <none>          2d20h   v1.30.14

Nodeのアップグレードを行う

sudo kubeadm upgrade node

Master NodeにてUncordonを行う

kubectl uncordon k8s-worker-1

同様の操作を、k8s-worker-2, k8s-worker-3でも行い、アップグレードを完了させる。
そして、以下のように全Nodeがv1.31にアップグレードされたことを確認する。

$ kubectl get nodes
NAME           STATUS   ROLES           AGE     VERSION
k8s-master     Ready    control-plane   2d21h   v1.31.13
k8s-worker-1   Ready    <none>          2d21h   v1.31.13
k8s-worker-2   Ready    <none>          2d21h   v1.31.13
k8s-worker-3   Ready    <none>          2d21h   v1.31.13

今後の展望

前編と後編に分けるほど長くなってしまいましたが、物理サーバーにUbuntuだけが入っている状態から、VirtualBoxにより仮想マシンを作成し、最終的にはKubernetesクラスタを構築しアップグレード作業も行うことができました。

自分専用の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?