将Kubernetes弄进Arch Linux试试看(完全版)
首先
本文假設這篇文章僅針對非常罕見的0.00000001%家庭需求進行討論。
同時,不建議在archlinux上使用k8s。
这次的目标
-
- kubernetesをとりあえず構築する
頑張る
前提
-
- 家にarchlinuxをいれたサーバーがある
-
- コンテナをなんとなく理解してる
- やる気がある
Kubernetes是什么
我认为有些人会在阅读这篇文章后开始接触k8s,所以我来解释一下(^ω^)・・・
Kubernetes是一种能够轻松而严格地管理和部署大量容器化的微服务应用程序,可以将它们安置在大量服务器上的工具。
当然可以将其功能应用到不同的用途中。
顺便说一下,docker容器引擎已经被废弃为kubernetes。
大家也可以在每个家庭都建立一个服务器来构建k8s,从docker出轨吧。
建立
请通常由用户进行操作。
# install が遅い人はこれを実行してください
# sudo bash -c "echo 'Server = https://mirror.cat.net/archlinux/\$repo/os/\$arch' > /etc/pacman.d/mirrorlist"
# パッケージを長らく更新していない場合はこれを実行してください
# sudo pacman-keygen --init
# sudo pacman-keygen --populate archlinux
# sudo pacman -Sy archlinux-keyring --noconfirm
sudo pacman -Syyu --noconfirm
sudo pacman -Sy --noconfirm git fakeroot make gcc
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
cd ..
rm -rf ./yay
yay -S kubectl-bin kubelet-bin kubeadm-bin cni-plugins-bin ethtool ebtables socat conntrack-tools containerd
sudo bash -c "cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF"
# modprobeでエラーが出るときは再起動してからもう一度ここから下のコマンドを打ち込んでください
sudo modprobe overlay
sudo modprobe br_netfilter
sudo bash -c "cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF"
sudo resolvectl dns eth0 1.1.1.1
sudo sysctl --system
sudo systemctl enable --now containerd
sudo bash -c "cat <<EOF > /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 2
debug: false
pull-image-on-create: false
EOF"
sudo bash -c "cat <<EOF >> /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
Environment=\"KUBELET_EXTRA_ARGS=--protect-kernel-defaults=false\"
EOF"
sudo systemctl daemon-reload
sudo systemctl enable --now kubelet
cat <<EOF > ~/init_kubelet.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
bootstrapTokens:
- token: "$(openssl rand -hex 3).$(openssl rand -hex 8)"
description: "kubeadm bootstrap token"
ttl: "24h"
nodeRegistration:
criSocket: "unix:///var/run/containerd/containerd.sock"
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
controllerManager:
extraArgs:
bind-address: "0.0.0.0" # Used by Prometheus Operator
scheduler:
extraArgs:
bind-address: "0.0.0.0" # Used by Prometheus Operator
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
cgroupDriver: "systemd"
protectKernelDefaults: true
EOF
sudo kubeadm init --config ./init_kubelet.yaml
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
helm repo add cilium https://helm.cilium.io/
helm install cilium cilium/cilium --namespace kube-system