- さくらのVPSコントロールパネル
- SSHで接続します。
- アップデート
- swap 無効化
- IPv4フォワーディングを有効化し、iptablesからブリッジされたトラフィックを見えるようにする
- 構成に必要なカーネルパラメーター設定
- cgroupドライバー
- cgroupsバージョンの確認
- 必要になる go のインストール
- コンテナランタイムのインストール
- make のインストール
- cri-dockerd インストール
- kubeadm kubelet kubectl インストール
- kubeadm を使用したクラスターの作成
- ネットワークプラグインの導入 CNIプラグイン flannelデプロイ
- Helmのインストール
- Ingressコントローラーを入れる
さくらのVPSコントロールパネル
Ubuntu20.04 amd64をインストールします。
以下は、再インストールの画像ですが、基本は一緒です。
SSHで接続できるように設定します。
また、パケットフィルターも設定してします。
SSHで接続します。
SSHでの接続方法は省略します!
アップデート
参考
サーバーをアップデートします
sudo apt update && sudo apt upgrade -y
再起動
sudo reboot
確認作業
x86-64 arm64 確認です。
uname -m
swap 無効化
sudo swapoff -a
sudo swapon --show
sudoでの実行のためパスワードを尋ねられます。
さくらのVPS コントロールパネルでOSをインストールした際に設定したパスワードを入力します。
swapが無効化されている場合は、何も出力されません。
IPv4フォワーディングを有効化し、iptablesからブリッジされたトラフィックを見えるようにする
参考
IPv4 を転送し、iptables にブリッジされたトラフィックを認識させます。
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
構成に必要なカーネルパラメーター設定
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
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=
cgroupsバージョンの確認
cgroup v2では、cgroup2fsと出力されます。
cgroup v1では、tmpfsと出力されます。
stat -fc %T /sys/fs/cgroup/
必要になる 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
コンテナランタイムのインストール
参考
色々と試したのですが、dockerを使うことにしました。
競合するパッケージをすべてアンインストール
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
sudo apt-get install ca-certificates curl gnupg
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
Docker パッケージをインストール
最新バージョン(2024.3.7現在)
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
確認作業
sudo docker run hello-world
上手くいったみたいなので削除します。
sudo docker stop hello-world
sudo docker ps -a
sudo docker rm [コンテナID]
sudo docker image prune -a
sudo docker image ls
sudo docker ps -a
削除完了!
make のインストール
sudo apt install -y make
cri-dockerd インストール
cri-dockerdはDockerとKubeletをつなぐコンポーネント
参考
git clone https://github.com/Mirantis/cri-dockerd.git
cd cri-dockerd
mkdir -p /usr/local/bin
make 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をサービスとして起動
sudo systemctl daemon-reload
sudo systemctl enable cri-docker.service
sudo systemctl enable --now cri-docker.socket
確認
systemctl status docker cri-docker.socket|egrep "Loaded|Active"
kubeadm kubelet kubectl インストール
参考
Kubernetes 1.29を入れます。
cd
sudo apt-get update
apt-transport-https はダミー パッケージである可能性があります。その場合は、そのパッケージをスキップできます。とのこと。
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
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
注意)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
kubelet、kubeadm、kubectl バージョンを固定します。
sudo apt-mark hold kubelet kubeadm kubectl
kubeletのサービスを起動
sudo systemctl start kubelet
sudo systemctl enable kubelet
kubeadm を使用したクラスターの作成
参考
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デプロイ
参考
scriptディレクトリを作成して、flannelのymlファイルをダウンロード
mkdir ./script
cd script
wget -c https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
cd
pwd
kubectl apply -f script/kube-flannel.yml
確認
kubectl get pods --all-namespaces
kube-system ネームスペース内に kube-flannel という名前のPodが実行されていることを確認
起動まで少し時間が必要です。
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
Ingressコントローラーを入れる
Ingressコントローラーを入れるのですが、ここから先、上手くいっていません。
上手くいったら書きます。