広告

さくらVPS Ubuntu 20.04 amd64 Kubernetes構築

kubernetes
この記事は約11分で読めます。

まだ上手く出来ていないので、個人的メモ程度です。

コードは公式サイトなどで確認するようにしてください。

さくらのVPSコントロールパネル

Ubuntu20.04 amd64をインストールします。

以下は、再インストールの画像ですが、基本は一緒です。

SSHで接続できるように設定します。

また、パケットフィルターも設定してします。

さくらVPS
さくらVPS
さくらVPS

SSHで接続します。

SSHでの接続方法は省略します!

アップデート

参考

サーバー作成直後に設定しておくべき初期セキュリティ設定
本マニュアルは、さくらのVPSで Linux ディストリビューションを利用する方を対象とし、管理者として注意したいセキュリティ設定をご紹介します。 具体的には、一般ユーザー及び sudo を用い...

サーバーをアップデートします

sudo apt update && sudo apt upgrade -y

再起動

sudo reboot

確認作業

x86-64 arm64 確認です。

uname -m
uname -m

swap 無効化

sudo swapoff -a
sudo swapon --show

sudoでの実行のためパスワードを尋ねられます。

さくらのVPS コントロールパネルでOSをインストールした際に設定したパスワードを入力します。

sudo swapoff -a
sudo swapon --show

swapが無効化されている場合は、何も出力されません。

IPv4フォワーディングを有効化し、iptablesからブリッジされたトラフィックを見えるようにする

参考

Container Runtimes
Note: Dockershim has been removed from the Kubernetes project as of release 1.24. Read the Dockershim Removal FAQ for fu...

IPv4 を転送し、iptables にブリッジされたトラフィックを認識させます。

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
IPv4 を転送

構成に必要なカーネルパラメーター設定

sysctl パラメータはセットアップに必要で、パラメータは再起動後も保持されます。

cat <<EOF | sudo 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
カーネルパラメーター

再起動せずにカーネルパラメーターを適用

sudo sysctl --system

br_netfilterとoverlayモジュールが読み込まれていることを確認

lsmod | grep br_netfilter
lsmod | grep overlay
br_netfilterとoverlayモジュール

net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables、net.ipv4.ip_forwardカーネルパラメーターが1に設定されていることを確認

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
カーネルパラメーター確認

cgroupドライバー

systemdがinitであるかの確認

ps -p 1 -o comm=
systemd

cgroupsバージョンの確認

cgroup v2では、cgroup2fsと出力されます。

cgroup v1では、tmpfsと出力されます。

stat -fc %T /sys/fs/cgroup/
cgroup v1

必要になる go のインストール

参考

Download and install - The Go Programming Language
Ubuntu20.04 最新版のgo言語をインストールする
Ubuntu20.04に最新版のgo言語をインストールする手順を記述してます。

wgetを使ってダウンロードして、/usr/localに解凍。

sudo wget -c https://go.dev/dl/go1.22.1.linux-amd64.tar.gz -O - | sudo tar -xz -C /usr/local

/usr/local/go/bin をPATH環境変数に追加。

export PATH=$PATH:/usr/local/go/bin

反映させます。しなくても大丈夫なときあり。

source ~/.profile

go バージョン確認。

go version
go 設定

コンテナランタイムのインストール

参考

Installing kubeadm
This page shows how to install the kubeadm toolbox. For information on how to create a cluster with kubeadm once you hav...
Container Runtimes
Note: Dockershim has been removed from the Kubernetes project as of release 1.24. Read the Dockershim Removal FAQ for fu...
containerd/docs/getting-started.md at main ?? containerd/containerd
An open and reliable container runtime. Contribute to containerd/containerd development by creating an account on GitHub...

色々と試したのですが、dockerを使うことにしました。

Install Docker Engine on Ubuntu
Jumpstart your client-side server applications with Docker Engine on Ubuntu. This guide details prerequisites and multip...

競合するパッケージをすべてアンインストール

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
アンインストール

apt リポジトリを使用してインストール

Docker の公式 GPG キーを追加します。

Dockerのaptリポジトリを設定します。

sudo apt-get update
apt-get update
sudo apt-get install ca-certificates curl gnupg
install
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
コマンド

リポジトリを Apt ソースに追加します。

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-get update
update

Docker パッケージをインストール

最新バージョン(2024.3.7現在)

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

確認作業

sudo docker run hello-world
hello world

上手くいったみたいなので削除します。

sudo docker stop hello-world
sudo docker ps -a
sudo docker rm [コンテナID]
sudo docker image prune -a
docker stop
sudo docker image ls
sudo docker ps -a
docker image

削除完了!

make のインストール

sudo apt install -y make
make install

cri-dockerd インストール

cri-dockerdはDockerとKubeletをつなぐコンポーネント

参考

GitHub - Mirantis/cri-dockerd: dockerd as a compliant Container Runtime Interface for Kubernetes
dockerd as a compliant Container Runtime Interface for Kubernetes - Mirantis/cri-dockerd
cri-dockerdを使ってKubernetes 1.24を動かしてみる - 仮想化通信
Kubernetes 1.24がリリースされ、dockershimコンポーネントが削除されました。 これはKubernetes 1.24以降のバージョンでDockerをランタイムとして使うことができないことを意味します。 ところで、dock...
git clone https://github.com/Mirantis/cri-dockerd.git
cri-dockerd
cd cri-dockerd
mkdir -p /usr/local/bin
make cri-dockerd
cri-dockerd

しばらく待つと、/home/ubuntu/cri-dockerd/cri-dockerd ができる。

sudo install -o root -g root -m 0755 cri-dockerd /usr/local/bin/cri-dockerd
sudo install 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
cd
cri-dockerd

cri-dockerdをサービスとして起動

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

確認

systemctl status docker cri-docker.socket|egrep "Loaded|Active"
cri-dockerd

kubeadm kubelet kubectl インストール

参考

Installing kubeadm
This page shows how to install the kubeadm toolbox. For information on how to create a cluster with kubeadm once you hav...
https://v1-28.docs.kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/

Kubernetes 1.29を入れます。

cd
sudo apt-get update
update

apt-transport-https はダミー パッケージである可能性があります。その場合は、そのパッケージをスキップできます。とのこと。

sudo apt-get install -y apt-transport-https ca-certificates curl gpg
 apt-transport-https

Kubernetes パッケージ リポジトリの公開署名キーをダウンロードします。

すべてのリポジトリに同じ署名キーが使用されるため、URL 内のバージョンは無視できます。

sudo mkdir -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
keyrings

注意)sudo mkdir -m 755 /etc/apt/keyringsのとき、ファイルが存在していたので、叱られる。

/etc/apt/keyringsがあるときは不要なコマンドです。

Kubernetes aptリポジトリを追加

これにより、/etc/apt/sources.list.d/kubernetes.list 内の既存の設定が上書きされます。

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
設定

パッケージ インデックスを更新しaptで kubelet、kubeadm、kubectl をインストール。

sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
 install kubelet kubeadm kubectl

kubelet、kubeadm、kubectl バージョンを固定します。

sudo apt-mark hold kubelet kubeadm kubectl
固定

kubeletのサービスを起動

sudo systemctl start kubelet
sudo systemctl enable kubelet
kubelet

kubeadm を使用したクラスターの作成

参考

Creating a cluster with kubeadm
Using kubeadm, you can create a minimum viable Kubernetes cluster that conforms to best practices. In fact, you can use ...

Linux ホスト上でこの IP が何であるかを確認

ip route show

IPアドレス部分、赤で隠しました。

コントロールプレーンノードを初期化

sudo kubeadm init --kubernetes-version 1.29.0 --pod-network-cidr=10.244.0.0/16 --cri-socket=unix:///var/run/cri-dockerd.sock
コントロールプレーンノードを初期化

認証用ファイルのコピー(上で指摘されている)

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

確認

kubectl get node

ネットワークプラグインの導入 CNIプラグイン flannelデプロイ

参考

GitHub - flannel-io/flannel: flannel is a network fabric for containers, designed for Kubernetes
flannel is a network fabric for containers, designed for Kubernetes - flannel-io/flannel

scriptディレクトリを作成して、flannelのymlファイルをダウンロード

mkdir ./script
cd script
wget -c https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
cd
pwd
flannel
kubectl apply -f script/kube-flannel.yml
kubectl apply -f script/kube-flannel.yml

確認

kubectl get pods --all-namespaces

kube-system ネームスペース内に kube-flannel という名前のPodが実行されていることを確認

起動まで少し時間が必要です。

kubectl get pods --all-namespaces

Helmのインストール

参考

Installing Helm | Helm
Learn how to install and get running with Helm.

最新版を探す

Releases · helm/helm
The Kubernetes Package Manager. Contribute to helm/helm development by creating an account on GitHub.
Helm

curl コマンドオプション

-o ファイル名を指定してダウンロード

-sL 余計な表示なし、リダイレクトあるときはリダイレクト

tarで解凍する。

cd /tmp
curl -sL https://get.helm.sh/helm-v3.14.2-linux-amd64.tar.gz -o /tmp/helm-v3.14.2-linux-amd64.tar.gz
cd
tar -zxvf /tmp/helm-v3.14.2-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin/helm

確認

helm version
helm version

Ingressコントローラーを入れる

Ingressコントローラーを入れるのですが、ここから先、上手くいっていません。

上手くいったら書きます。