Kubernetesを生やす (containerd)
久々にやってみたくなったので
環境
Ubuntu 22.04
Kubernetes 1.28.2
Cilium 1.15.0
ネットワーク
hostname
ip
k8s-master
192.168.1.80
k8s-worker01
192.168.1.81
構築
更新する
1
sudo apt update && sudo apt upgrade -y
swapをしばく
これは一時的なので/etc/fstab
にあるswapファイルをコメントアウトして永続化する
1
2
- /swap.img none swap sw 0 0
+ #/swap.img none swap sw 0 0
ipフォワーディングの有効化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# カーネルモジュール
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/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
確認する
1
2
lsmod | grep br_netfilter
lsmod | grep overlay
1
2
3
br_netfilter 32768 0
bridge 413696 1 br_netfilter
overlay 196608 18
3つの出力があることを確認する
1
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
1
2
3
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
すべて1なことを確認する
1
2
3
total used free shared buff/cache available
Mem: 7.7Gi 912Mi 4.2Gi 6.0Mi 2.6Gi 6.6Gi
Swap: 0B 0B 0B
swapの行がすべて0なことを確認する
containerdを準備する
なんか公式リポジトリのほうがdockerのリポジトリより新しいですが、今回はdockerリポジトリを使います。それで動いちゃったんだもん
1
2
3
4
5
6
7
8
9
10
# 鍵
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
# リポジトリ
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
1
sudo apt install -y containerd.io
1
2
3
4
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
sudo sed -i 's#sandbox_image = "registry.k8s.io/pause:3.6"#sandbox_image = "registry.k8s.io/pause:3.9"#g' /etc/containerd/config.toml
sudo systemctl restart containerd && systemctl status containerd
警告
絶対にsystemd_cgroup
を有効化しないこと!
このエラーが出て進まなくなります。
1
2
3
4
5
6
7
[init] Using Kubernetes version: v1.26.1
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR CRI]: container runtime is not running: output: time="2023-02-04T07:30:18Z" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint \"unix:///var/run/containerd/containerd.sock\": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"
, error: exit status 1
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
消えてしまったのでエラー文は引用 https://qiita.com/Kigou-No1/items/8fe68c826dc3dbe76fb4
kube* を準備する
1
2
3
4
5
# 鍵
curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
# リポジトリ
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
1
sudo apt-get install -y kubeadm kubectl kubelet
自動的に更新されると厄介なのでcontainerdごとholdしておきます
1
sudo apt-mark hold kubeadm kubectl kubelet containerd.io
コントロールプレーンを生やす
ここまで来たらやっと本体を作れます。昔masterって呼ばれてたやつですね。
ここでは長ったらしいので、contro plane
の頭文字を取ってCP
と呼ぶことにします。
1
sudo kubeadm init --apiserver-advertise-address= 192.168.1.80 --pod-network-cidr= 10.200.0.0/16 --upload-certs
workerを生やす
好きなだけ生やしてください。
initしたときに出てきた下みたいなコマンドを実行するだけです。
1
2
sudo kubeadm join 192.168.1.80:6443 --token { token} \
--discovery-token-ca-cert-hash sha256:{ hash}
Ciliumをインストールする
cliをインストール
1
2
3
4
5
6
7
CILIUM_CLI_VERSION = $( curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH = amd64
if [ " $( uname -m) " = "aarch64" ] ; then CLI_ARCH = arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${ CILIUM_CLI_VERSION } /cilium-linux-${ CLI_ARCH } .tar.gz{ ,.sha256sum}
sha256sum --check cilium-linux-${ CLI_ARCH } .tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${ CLI_ARCH } .tar.gz /usr/local/bin
rm cilium-linux-${ CLI_ARCH } .tar.gz{ ,.sha256sum}
インストール
注意
メモ
clangとllvmのインストールはすべてのNodeで実行する必要があります。
clangを入れておくこと!
無限にNotReadyで待つことになります。
1
sudo apt install -y clang
1
cilium install --version 1.15.0
環境構築ができたか確認する
1
2
3
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 14h v1.28.2
k8s-worker01 Ready <none> 14h v1.28.2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/¯¯\
/¯¯\__/¯¯\ Cilium: OK
\__/¯¯\__/ Operator: OK
/¯¯\__/¯¯\ Envoy DaemonSet: disabled (using embedded mode)
\__/¯¯\__/ Hubble Relay: disabled
\__/ ClusterMesh: disabled
Deployment cilium-operator Desired: 1, Ready: 1/1, Available: 1/1
DaemonSet cilium Desired: 2, Ready: 2/2, Available: 2/2
Containers: cilium-operator Running: 1
cilium Running: 2
Cluster Pods: 2/2 managed by Cilium
Helm chart version: 1.14.6
Image versions cilium quay.io/cilium/cilium:v1.14.6@sha256:37a49f1abb333279a9b802ee8a21c61cde9dd9138b5ac55f77bdfca733ba852a: 2
cilium-operator quay.io/cilium/operator-generic:v1.14.6@sha256:2f0bf8fb8362c7379f3bf95036b90ad5b67378ed05cd8eb0410c1afc13423848: 1
最後に
久々にやってみたけど、すごい手順が多くて大変だった。
自分の作ったk8sの中では多分一番まともだと思う
この後にストレージセットアップ(例 )の必要があったり、まだやることがある・・・
参照文献
おまけ
ダッシュボードを動かす
1
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
dashboard-adminuser.yamlを作り、以下の内容を記載
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# from https://qiita.com/itoi10/items/e5b7d1ca2a588108d4b2
# Creating a Service Account
apiVersion : v1
kind : ServiceAccount
metadata :
name : admin-user
namespace : kubernetes-dashboard
---
# Creating a ClusterRoleBinding (管理者権限を付与)
apiVersion : rbac.authorization.k8s.io/v1
kind : ClusterRoleBinding
metadata :
name : admin-user
roleRef :
apiGroup : rbac.authorization.k8s.io
kind : ClusterRole
name : cluster-admin
subjects :
- kind : ServiceAccount
name : admin-user
namespace : kubernetes-dashboard
1
kubectl -n kubernetes-dashboard create token admin-user
開きたいマシンでkubectlをセットアップして以下コマンドでproxy
コンテナ外の同じセグメントからアクセスできるように
1
kubectl -n kubernetes-dashboard edit svc kubernetes-dashboard
CiliumのHubbleを有効化
この画像のようなものが見れます
1
cilium hubble enable --ui
ヒント
windowsの場合は以下のコマンドでcliをインストール
1
winget install Cilium . CiliumCLI
kubectlが動くようにセットアップしておく必要があります