在 Linux 上安裝和設定 kubectl

開始之前

您必須使用與叢集次要版本差異在一個版本以內的 kubectl 版本。例如,v1.32 用戶端可以與 v1.31、v1.32 和 v1.33 控制平面通訊。使用最新相容版本的 kubectl 有助於避免無法預見的問題。

在 Linux 上安裝 kubectl

以下是在 Linux 上安裝 kubectl 的方法

在 Linux 上使用 curl 安裝 kubectl 二進位檔案

  1. 使用以下命令下載最新發行版本

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

    
       curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl"
       
  2. 驗證二進位檔案(選用)

    下載 kubectl 總和檢查碼檔案

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

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

    根據總和檢查碼檔案驗證 kubectl 二進位檔案

    echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check
    

    如果有效,則輸出為

    kubectl: OK
    

    如果檢查失敗,sha256 會以非零狀態結束,並列印類似以下的輸出

    kubectl: FAILED
    sha256sum: WARNING: 1 computed checksum did NOT match
    
  3. 安裝 kubectl

    sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
    
  4. 測試以確保您安裝的版本是最新的

    kubectl version --client
    

    或使用此命令取得版本的詳細檢視

    kubectl version --client --output=yaml
    

使用原生套件管理安裝

  1. 更新 apt 套件索引,並安裝使用 Kubernetes apt 儲存庫所需的套件

    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 gnupg
    
  2. 下載 Kubernetes 套件儲存庫的公開簽署金鑰。所有儲存庫都使用相同的簽署金鑰,因此您可以忽略 URL 中的版本

    # If the folder `/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.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg # allow unprivileged APT programs to read this keyring
    
  1. 新增適當的 Kubernetes apt 儲存庫。如果您想使用與 v1.32 不同的 Kubernetes 版本,請將以下命令中的 v1.32 替換為所需的次要版本

    # 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.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
    sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list   # helps tools such as command-not-found to work correctly
    
  1. 更新 apt 套件索引,然後安裝 kubectl

    sudo apt-get update
    sudo apt-get install -y kubectl
    

  1. 新增 Kubernetes yum 儲存庫。如果您想使用與 v1.32 不同的 Kubernetes 版本,請將以下命令中的 v1.32 替換為所需的次要版本。

    # 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.32/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key
    EOF
    
  1. 使用 yum 安裝 kubectl

    sudo yum install -y kubectl
    

  1. 新增 Kubernetes zypper 儲存庫。如果您想使用與 v1.32 不同的 Kubernetes 版本,請將以下命令中的 v1.32 替換為所需的次要版本。

    # This overwrites any existing configuration in /etc/zypp/repos.d/kubernetes.repo
    cat <<EOF | sudo tee /etc/zypp/repos.d/kubernetes.repo
    [kubernetes]
    name=Kubernetes
    baseurl=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://pkgs.k8s.io/core:/stable:/v1.32/rpm/repodata/repomd.xml.key
    EOF
    
  1. 更新 zypper 並確認新增的儲存庫

    sudo zypper update
    

    當出現此訊息時,按下 't' 或 'a'

    New repository or package signing key received:
    
    Repository:       Kubernetes
    Key Fingerprint:  1111 2222 3333 4444 5555 6666 7777 8888 9999 AAAA
    Key Name:         isv:kubernetes OBS Project <isv:kubernetes@build.opensuse.org>
    Key Algorithm:    RSA 2048
    Key Created:      Thu 25 Aug 2022 01:21:11 PM -03
    Key Expires:      Sat 02 Nov 2024 01:21:11 PM -03 (expires in 85 days)
    Rpm Name:         gpg-pubkey-9a296436-6307a177
    
    Note: Signing data enables the recipient to verify that no modifications occurred after the data
    were signed. Accepting data with no, wrong or unknown signature can lead to a corrupted system
    and in extreme cases even to a system compromise.
    
    Note: A GPG pubkey is clearly identified by its fingerprint. Do not rely on the key's name. If
    you are not sure whether the presented key is authentic, ask the repository provider or check
    their web site. Many providers maintain a web page showing the fingerprints of the GPG keys they
    are using.
    
    Do you want to reject the key, trust temporarily, or trust always? [r/t/a/?] (r): a
    
  2. 使用 zypper 安裝 kubectl

    sudo zypper install -y kubectl
    

使用其他套件管理安裝

如果您使用的是 Ubuntu 或其他支援 snap 套件管理器的 Linux 發行版,則 kubectl 可以作為 snap 應用程式使用。

snap install kubectl --classic
kubectl version --client

如果您使用的是 Linux 且使用 Homebrew 套件管理器,則 kubectl 可用於安裝

brew install kubectl
kubectl version --client

驗證 kubectl 設定

為了讓 kubectl 找到並存取 Kubernetes 叢集,它需要一個 kubeconfig 檔案,當您使用 kube-up.sh 建立叢集或成功部署 Minikube 叢集時,會自動建立該檔案。預設情況下,kubectl 設定位於 ~/.kube/config

透過取得叢集狀態來檢查 kubectl 是否已正確設定

kubectl cluster-info

如果您看到 URL 回應,則 kubectl 已正確設定以存取您的叢集。

如果您看到類似以下的訊息,則表示 kubectl 未正確設定或無法連線到 Kubernetes 叢集。

The connection to the server <server-name:port> was refused - did you specify the right host or port?

例如,如果您打算在本機筆記型電腦上執行 Kubernetes 叢集,您需要先安裝像 Minikube 這樣的工具,然後重新執行上述命令。

如果 kubectl cluster-info 傳回 URL 回應,但您無法存取叢集,請使用以下命令檢查是否已正確設定

kubectl cluster-info dump

疑難排解 'No Auth Provider Found' 錯誤訊息

在 Kubernetes 1.26 中,kubectl 移除了對以下雲端供應商託管 Kubernetes 產品的內建驗證。這些供應商已發布 kubectl 外掛程式以提供雲端特定的驗證。如需說明,請參閱以下供應商文件

(也可能有其他原因導致看到相同的錯誤訊息,與該變更無關。)

選用的 kubectl 設定和外掛程式

啟用 Shell 自動完成

kubectl 為 Bash、Zsh、Fish 和 PowerShell 提供自動完成支援,這可以為您節省大量輸入時間。

以下是設定 Bash、Fish 和 Zsh 自動完成的步驟。

簡介

Bash 的 kubectl 完成腳本可以使用命令 kubectl completion bash 產生。在您的 Shell 中載入完成腳本會啟用 kubectl 自動完成。

但是,完成腳本依賴 bash-completion,這表示您必須先安裝此軟體(您可以執行 type _init_completion 來測試您是否已安裝 bash-completion)。

安裝 bash-completion

bash-completion 由許多套件管理器提供(請參閱 此處)。您可以使用 apt-get install bash-completionyum install bash-completion 等方式安裝它。

上述命令會建立 /usr/share/bash-completion/bash_completion,這是 bash-completion 的主要腳本。根據您的套件管理器,您必須在您的 ~/.bashrc 檔案中手動載入此檔案。

若要找出答案,請重新載入您的 Shell 並執行 type _init_completion。如果命令成功,則您已設定完成;否則,請將以下內容新增至您的 ~/.bashrc 檔案

source /usr/share/bash-completion/bash_completion

重新載入您的 Shell 並輸入 type _init_completion,以驗證 bash-completion 是否已正確安裝。

啟用 kubectl 自動完成

Bash

您現在需要確保在您的所有 Shell 會話中都載入 kubectl 完成腳本。您可以使用以下兩種方式執行此操作


echo 'source <(kubectl completion bash)' >>~/.bashrc


kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
sudo chmod a+r /etc/bash_completion.d/kubectl

如果您有 kubectl 的別名,您可以擴充 Shell 完成功能以使用該別名

echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc

兩種方法是等效的。重新載入您的 Shell 後,kubectl 自動完成應該可以運作。若要在目前的 Shell 會話中啟用 bash 自動完成,請載入 ~/.bashrc 檔案

source ~/.bashrc

Fish 的 kubectl 完成腳本可以使用命令 kubectl completion fish 產生。在您的 Shell 中載入完成腳本會啟用 kubectl 自動完成。

若要在您的所有 Shell 會話中執行此操作,請將以下行新增至您的 ~/.config/fish/config.fish 檔案

kubectl completion fish | source

重新載入您的 Shell 後,kubectl 自動完成應該可以運作。

Zsh 的 kubectl 完成腳本可以使用命令 kubectl completion zsh 產生。在您的 Shell 中載入完成腳本會啟用 kubectl 自動完成。

若要在您的所有 Shell 會話中執行此操作,請將以下內容新增至您的 ~/.zshrc 檔案

source <(kubectl completion zsh)

如果您有 kubectl 的別名,kubectl 自動完成將自動與其一起運作。

重新載入您的 Shell 後,kubectl 自動完成應該可以運作。

如果您收到類似 2: command not found: compdef 的錯誤,請將以下內容新增至您的 ~/.zshrc 檔案開頭

autoload -Uz compinit
compinit

安裝 kubectl convert 外掛程式

Kubernetes 命令列工具 kubectl 的外掛程式,可讓您在不同 API 版本之間轉換 Manifest 檔案。這對於將 Manifest 檔案遷移到具有較新 Kubernetes 版本的非棄用 API 版本特別有幫助。如需更多資訊,請造訪遷移到非棄用 API

  1. 使用以下命令下載最新發行版本

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

    
       curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl-convert"
       
  2. 驗證二進位檔案(選用)

    下載 kubectl-convert 檢查和檔案

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

    
       curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/arm64/kubectl-convert.sha256"
       

    根據檢查和檔案驗證 kubectl-convert 二進制檔案

    echo "$(cat kubectl-convert.sha256) kubectl-convert" | sha256sum --check
    

    如果有效,則輸出為

    kubectl-convert: OK
    

    如果檢查失敗,sha256 會以非零狀態結束,並列印類似以下的輸出

    kubectl-convert: FAILED
    sha256sum: WARNING: 1 computed checksum did NOT match
    
  3. 安裝 kubectl-convert

    sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert
    
  4. 驗證外掛程式是否成功安裝

    kubectl convert --help
    

    如果您沒有看到錯誤訊息,則表示外掛程式已成功安裝。

  5. 安裝外掛程式後,清除安裝檔案

    rm kubectl-convert kubectl-convert.sha256
    

下一步

上次修改時間:2024 年 8 月 8 日下午 4:34 PST:Update SUSE install-kubectl-linux.md (0299ca8f34)