安裝 kubeadm
本頁面介紹如何安裝
kubeadm
工具包。有關在完成此安裝過程後如何使用 kubeadm 建立叢集的資訊,請參閱使用 kubeadm 建立叢集頁面。
此安裝指南適用於 Kubernetes v1.34。如果你想使用不同的 Kubernetes 版本,請參考以下頁面:
準備工作
- 相容的 Linux 主機。Kubernetes 專案提供了基於 Debian 和 Red Hat 的 Linux 發行版以及沒有包管理器的發行版的通用說明。
- 每臺機器 2 GB 或更多記憶體(少於 2 GB 將為應用程式留下很少的空間)。
- 控制平面機器需要 2 個或更多 CPU。
- 叢集中所有機器之間完全網路連通(公共或私有網路均可)。
- 每個節點都有唯一的 hostname、MAC 地址和 product_uuid。有關更多詳細資訊,請參閱此處。
- 你的機器上需要開啟某些埠。有關更多詳細資訊,請參閱此處。
注意
kubeadm
安裝是透過使用動態連結的二進位制檔案完成的,並假定你的目標系統提供 glibc
。這在許多 Linux 發行版(包括 Debian、Ubuntu、Fedora、CentOS 等)上是合理的假設,但對於預設不包含 glibc
的自定義和輕量級發行版(如 Alpine Linux)則並非總是如此。期望發行版要麼包含 glibc
,要麼提供一個相容層,提供預期的符號。檢查作業系統版本
- kubeadm 專案支援 LTS 核心。請參閱LTS 核心列表。
- 你可以使用命令
uname -r
獲取核心版本。
有關更多資訊,請參閱Linux 核心要求。
- kubeadm 專案支援最新的核心版本。有關最新核心列表,請參閱Windows Server 釋出資訊。
- 你可以使用命令
systeminfo
獲取核心版本(也稱為作業系統版本)。
有關更多資訊,請參閱Windows 作業系統版本相容性。
kubeadm 建立的 Kubernetes 叢集依賴於使用核心功能的軟體。此軟體包括但不限於容器執行時、kubelet 和容器網路介面外掛。
為了幫助你避免因不支援的核心版本而導致的意外錯誤,kubeadm 執行 SystemVerification
預檢檢查。如果核心版本不受支援,此檢查將失敗。
如果你知道你的核心提供了所需的功能,即使 kubeadm 不支援其版本,你也可以選擇跳過此檢查。
驗證每個節點的 MAC 地址和 product_uuid 是否唯一
- 你可以使用命令
ip link
或ifconfig -a
獲取網路介面的 MAC 地址。 - product_uuid 可以使用命令
sudo cat /sys/class/dmi/product_uuid
檢查。
硬體裝置很可能有唯一的地址,儘管某些虛擬機器可能具有相同的值。Kubernetes 使用這些值來唯一標識叢集中的節點。如果這些值對於每個節點不唯一,則安裝過程可能會失敗。
檢查網路介面卡
如果你有多個網路介面卡,並且你的 Kubernetes 元件無法在預設路由上訪問,我們建議你新增 IP 路由,以便 Kubernetes 叢集地址透過適當的介面卡。
檢查所需埠
這些所需埠需要開啟,以便 Kubernetes 元件能夠相互通訊。你可以使用 netcat 等工具檢查埠是否開啟。例如:
nc 127.0.0.1 6443 -zv -w 2
你使用的 Pod 網路外掛可能也需要開啟某些埠。由於這因每個 Pod 網路外掛而異,請參閱外掛的文件以瞭解需要哪些埠。
Swap 配置
kubelet 的預設行為是如果節點上檢測到交換記憶體則啟動失敗。這意味著交換要麼被停用,要麼被 kubelet 容忍。
- 要容忍交換,請將
failSwapOn: false
新增到 kubelet 配置或作為命令列引數。注意:即使提供了failSwapOn: false
,工作負載預設也不會有交換訪問許可權。這可以透過在 kubelet 配置檔案中設定swapBehavior
來更改。要使用交換,請設定除預設NoSwap
設定之外的swapBehavior
。有關更多詳細資訊,請參閱交換記憶體管理。 - 要停用交換,可以使用
sudo swapoff -a
暫時停用交換。要使此更改在重新啟動後持久生效,請確保在/etc/fstab
、systemd.swap
等配置檔案中停用交換,具體取決於系統上的配置方式。
安裝容器執行時
要在 Pod 中執行容器,Kubernetes 使用容器執行時。
預設情況下,Kubernetes 使用容器執行時介面 (CRI) 與你選擇的容器執行時進行介面。
如果你未指定執行時,kubeadm 將自動嘗試透過掃描已知端點列表來檢測已安裝的容器執行時。
如果檢測到多個或沒有容器執行時,kubeadm 將丟擲錯誤並要求你指定要使用哪個。
有關更多資訊,請參閱容器執行時。
注意
Docker Engine 沒有實現 CRI,而 CRI 是容器執行時與 Kubernetes 協同工作的要求。因此,必須安裝一個附加服務 cri-dockerd。cri-dockerd 是一個基於舊版內建 Docker Engine 支援的專案,該支援已在版本 1.24 中從 kubelet 中移除。下表包含受支援作業系統的已知端點。
執行時 | Unix 域套接字路徑 |
---|---|
containerd | unix:///var/run/containerd/containerd.sock |
CRI-O | unix:///var/run/crio/crio.sock |
Docker Engine(使用 cri-dockerd) | unix:///var/run/cri-dockerd.sock |
執行時 | Windows 命名管道路徑 |
---|---|
containerd | npipe:////./pipe/containerd-containerd |
Docker Engine(使用 cri-dockerd) | npipe:////./pipe/cri-dockerd |
安裝 kubeadm、kubelet 和 kubectl
你將在所有機器上安裝這些軟體包:
kubeadm
:用於引導叢集的命令。kubelet
:在叢集中所有機器上執行的元件,用於啟動 Pod 和容器等。kubectl
:用於與叢集通訊的命令列工具。
kubeadm 不會為你安裝或管理 kubelet
或 kubectl
,因此你需要確保它們與你希望 kubeadm 為你安裝的 Kubernetes 控制平面版本匹配。如果版本不匹配,可能會出現版本偏差,從而導致意外的、有 bug 的行為。但是,kubelet 和控制平面之間支援一個次要版本偏差,但 kubelet 版本不能超過 API 伺服器版本。例如,執行 1.7.0 的 kubelet 應該與 1.8.0 API 伺服器完全相容,但反之則不然。
有關安裝 kubectl
的資訊,請參閱安裝和設定 kubectl。
警告
這些說明將所有 Kubernetes 軟體包從任何系統升級中排除。這是因為 kubeadm 和 Kubernetes 需要特別注意升級。有關版本偏差的更多資訊,請參閱:
apt.kubernetes.io
和 yum.kubernetes.io
)已於 2023 年 9 月 13 日起棄用並凍結。強烈建議並要求使用託管在 pkgs.k8s.io
的新軟體包倉庫,以便安裝 2023 年 9 月 13 日之後釋出的 Kubernetes 版本。 棄用的舊版倉庫及其內容可能會在未來隨時移除,恕不另行通知。新軟體包倉庫提供從 v1.24.0 開始的 Kubernetes 版本的下載。注意
每個 Kubernetes 次要版本都有一個專門的軟體包倉庫。如果你想安裝 v1.34 以外的次要版本,請參閱你所需次要版本的安裝指南。這些說明適用於 Kubernetes v1.34。
更新
apt
軟體包索引並安裝使用 Kubernetesapt
倉庫所需的軟體包。sudo apt-get update # apt-transport-https may be a dummy package; if so, you can skip that package sudo apt-get install -y apt-transport-https ca-certificates curl gpg
下載 Kubernetes 軟體包倉庫的公共簽名金鑰。所有倉庫都使用相同的簽名金鑰,因此你可以忽略 URL 中的版本。
# If the directory `/etc/apt/keyrings` does not exist, it should be created before the curl command, read the note below. # sudo mkdir -p -m 755 /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.34/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
注意
在 Debian 12 和 Ubuntu 22.04 之前的版本中,目錄/etc/apt/keyrings
預設不存在,應在 curl 命令之前建立。新增適當的 Kubernetes
apt
倉庫。請注意,此倉庫僅包含 Kubernetes 1.34 的軟體包;對於其他 Kubernetes 次要版本,你需要更改 URL 中的 Kubernetes 次要版本以匹配你所需的次要版本(你還應該檢查你正在閱讀的文件是否是你計劃安裝的 Kubernetes 版本)。# This overwrites any existing configuration in /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.34/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 sudo apt-mark hold kubelet kubeadm kubectl
(可選)在執行 kubeadm 之前啟用 kubelet 服務。
sudo systemctl enable --now kubelet
將 SELinux 設定為
permissive
模式。這些說明適用於 Kubernetes 1.34。
# Set SELinux in permissive mode (effectively disabling it) sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
注意
- 透過執行
setenforce 0
和sed ...
將 SELinux 設定為 permissive 模式實際上會停用它。這是允許容器訪問主機檔案系統所必需的;例如,某些叢集網路外掛需要它。你必須這樣做,直到 kubelet 中的 SELinux 支援得到改進。 - 如果你知道如何配置 SELinux,則可以保持啟用狀態,但這可能需要 kubeadm 不支援的設定。
新增 Kubernetes
yum
倉庫。倉庫定義中的exclude
引數確保在執行yum update
時不會升級與 Kubernetes 相關的軟體包,因為升級 Kubernetes 必須遵循特殊的程式。請注意,此倉庫僅包含 Kubernetes 1.34 的軟體包;對於其他 Kubernetes 次要版本,你需要更改 URL 中的 Kubernetes 次要版本以匹配你所需的次要版本(你還應該檢查你正在閱讀的文件是否是你計劃安裝的 Kubernetes 版本)。# This overwrites any existing configuration in /etc/yum.repos.d/kubernetes.repo cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/repodata/repomd.xml.key exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni EOF
安裝 kubelet、kubeadm 和 kubectl。
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
(可選)在執行 kubeadm 之前啟用 kubelet 服務。
sudo systemctl enable --now kubelet
安裝 CNI 外掛(大多數 Pod 網路需要)。
CNI_PLUGINS_VERSION="v1.3.0"
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
變數必須設定為可寫目錄。如果你正在執行 Flatcar Container Linux,請將 DOWNLOAD_DIR="/opt/bin"
。DOWNLOAD_DIR="/usr/local/bin"
sudo mkdir -p "$DOWNLOAD_DIR"
可選安裝 crictl(與容器執行時介面 (CRI) 互動所需,對 kubeadm 可選)。
CRICTL_VERSION="v1.31.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
安裝 kubeadm
、kubelet
並新增 kubelet
systemd 服務。
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.16.2"
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/krel/templates/latest/kubelet/kubelet.service" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /usr/lib/systemd/system/kubelet.service
sudo mkdir -p /usr/lib/systemd/system/kubelet.service.d
curl -sSL "https://raw.githubusercontent.com/kubernetes/release/${RELEASE_VERSION}/cmd/krel/templates/latest/kubeadm/10-kubeadm.conf" | sed "s:/usr/bin:${DOWNLOAD_DIR}:g" | sudo tee /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
按照安裝工具頁面上的說明安裝 kubectl
。
(可選)在執行 kubeadm 之前啟用 kubelet 服務。
sudo systemctl enable --now kubelet
注意
Flatcar Container Linux 發行版將/usr
目錄掛載為只讀檔案系統。在引導叢集之前,你需要採取額外步驟來配置一個可寫目錄。請參閱Kubeadm 故障排除指南,瞭解如何設定可寫目錄。kubelet 現在每隔幾秒鐘重啟一次,因為它在崩潰迴圈中等待 kubeadm 告訴它該做什麼。
配置 cgroup 驅動程式
容器執行時和 kubelet 都有一個名為“cgroup 驅動程式”的屬性,這對於 Linux 機器上的 cgroup 管理很重要。
故障排除
如果你在使用 kubeadm 時遇到困難,請查閱我們的故障排除文件。
下一步
本頁面上的專案涉及提供 Kubernetes 所需功能的第三方產品或專案。Kubernetes 專案作者不對這些第三方產品或專案負責。有關更多詳細資訊,請參閱CNCF 網站指南。
在提議新增額外第三方連結的更改之前,你應該閱讀內容指南。