k8s安裝v1.30.2(contanerd容器執行時)實錄

弗拉宾教头發表於2024-07-10

一、主機準備

主機名 NAT IP 系統 配置
k8s-master 192.168.1.201 ubuntu 18.04.6 2C2G
k8s-node01 192.168.1.202 ubuntu 18.04.6 2C2G
k8s-node02 192.168.1.203 ubuntu 18.04.6 2C2G

二、前提

主機配置好網路、ntp,關閉ufw,swap,安裝好containerd,runc服務,全程以root使用者安裝。

三、安裝步驟

master、node01、node02均執行:

轉發 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

# 應用 sysctl 引數而不重新啟動
sudo sysctl --system

透過執行以下指令確認 br_netfilteroverlay 模組被載入:

lsmod | grep br_netfilter
lsmod | grep overlay

透過執行以下指令確認 net.bridge.bridge-nf-call-iptablesnet.bridge.bridge-nf-call-ip6tablesnet.ipv4.ip_forward 系統變數在你的 sysctl 配置中被設定為 1:

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

配置containerd systemd cgroup 驅動

結合 runc 使用 systemd cgroup 驅動,在 /etc/containerd/config.toml (沒有的就手動生成)中設定:

containerd config default > /etc/containerd/config.toml 

#編輯配置檔案

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]

  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true
#重啟並啟用 containerd 服務
systemctl daemon-reload
systemctl restart containerd
systemctl enable containerd

安裝 kubeadm、kubelet 和 kubectl

安裝 CNI 外掛(大多數 Pod 網路都需要):

CNI_PLUGINS_VERSION="v1.1.1"
ARCH="amd64"
DEST="/opt/cni/bin"
sudo mkdir -p "$DEST"
curl -L "https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGINS_VERSION}/cni-plugins-linux-${ARCH}-${CNI_PLUGINS_VERSION}.tgz" | sudo tar -C "$DEST" -xz
定義要下載命令檔案的目錄。
說明:

DOWNLOAD_DIR 變數必須被設定為一個可寫入的目錄。

DOWNLOAD_DIR="/usr/local/bin"
sudo mkdir -p "$DOWNLOAD_DIR"

安裝 crictl(kubeadm/kubelet 容器執行時介面(CRI)所需)

CRICTL_VERSION="v1.25.0"
ARCH="amd64"
curl -L "https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRICTL_VERSION}/crictl-${CRICTL_VERSION}-linux-${ARCH}.tar.gz" | sudo tar -C $DOWNLOAD_DIR -xz

建立crictl配置檔案:/etc/crictl.yaml。修改crictl預設配置,把runtime-endpoint和image-endpoint指向containerd

vim /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 2 debug: true pull-image-on-create: false

安裝 kubeadmkubelet並新增 kubelet 系統服務:

RELEASE="$(curl -sSL https://dl.k8s.io/release/stable.txt)"
ARCH="amd64"
cd $DOWNLOAD_DIR
sudo curl -L --remote-name-all https://dl.k8s.io/release/${RELEASE}/bin/linux/${ARCH}/{kubeadm,kubelet}
sudo chmod +x {kubeadm,kubelet}

RELEASE_VERSION="v0.4.0"
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubelet/lib/systemd/system/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service
sudo mkdir -p /etc/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/kubepkg/templates/latest/deb/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

啟用並啟動 kubelet

systemctl enable --now kubelet

安裝工具conntrack

sudo apt-get install conntrack

kubeadm init初始化管理平面

master執行

kubeadm init --apiserver-advertise-address 192.168.1.201 --apiserver-bind-port 6443 --cri-socket=/run/containerd/containerd.sock --cri-socket=/run/containerd/containerd.sock -–pod-network-cidr=10.244.0.0/16

完成如上圖,可以執行如下命令讓其他節點加入叢集。

kubeadm join 192.168.1.201:6443 --token qtj2on.fbg7att0xixsdnew \
--discovery-token-ca-cert-hash sha256:9fbf4265d1350b7ddf65b5e8cdea34fea93d42fca469e49255cd10ca66e8b9ef

安裝kubectl

用 curl 在 Linux 系統中安裝 kubectl

用以下命令下載最新發行版:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
說明:

如需下載某個指定的版本,請用指定版本號替換該命令的這一部分: $(curl -L -s https://dl.k8s.io/release/stable.txt)

例如,要在 Linux 中下載 v1.26.15 版本,請輸入:

curl -LO https://dl.k8s.io/release/v1.26.15/bin/linux/amd64/kubectl

安裝 kubectl

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

執行測試,以保障你安裝的版本是最新的:

kubectl version --client
(可選)安裝bash-completion
apt-get install bash-completion
#啟動 kubectl 自動補全功能
echo 'source <(kubectl completion bash)' >>~/.bashrc
source ~/.bashrc

安裝flannel網路外掛

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

如果你的容器子網CIDR (不是 10.244.0.0/16)那可以把yml下載下來後修改再apply,注意需要和init初始化管理平面時 kubeadm init命令中--pod-network-cidr=10.244.0.0/16 的值保持一致。

最終結果:

參考文件:

安裝 kubeadm | Kubernetes

containerd/docs/getting-started.md at main · containerd/containerd · GitHub

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

相關文章