広告

さくらVPS Ubuntu 20.04 amd64 Kubernetes構築

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

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

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

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

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

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

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

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

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

SSHで接続します。

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

アップデート

参考

サーバー作成直後に設定しておくべき初期セキュリティ設定
目次: 事前情報- さくらのVPSで提供している「標準OS」について, 標準OSにおける一般ユーザーの提供, 標準OSにおける強制アクセス制御について, 標準OSにおけるパスワード認証及び公開鍵...

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

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を使うことにしました。

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...
Installing kubeadm
This page shows how to install the kubeadm toolbox. For information on how to create a cluster with kubeadm once you hav...

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のインストール

参考

Helm のインストール
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コントローラーを入れるのですが、ここから先、上手くいっていません。

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