一、主機準備
主機名 | 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_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
系統變數在你的 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
安裝 kubeadm
、kubelet
並新增 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)
。
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
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