在 Linux 上安装和设置 kubectl

在您开始之前

您必须使用与您的集群相差一个次要版本的 kubectl 版本。例如,v1.31 客户端可以与 v1.30、v1.31 和 v1.32 控制平面通信。使用最新兼容的 kubectl 版本有助于避免不可预见的问题。

在 Linux 上安装 kubectl

以下方法可用于在 Linux 上安装 kubectl

使用 curl 在 Linux 上安装 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.31/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.31 不同的 Kubernetes 版本,请将以下命令中的 v1.31 替换为您想要的次要版本

    # 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.31/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.31 不同的 Kubernetes 版本,请将以下命令中的 v1.31 替换为您想要的次要版本。

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

    sudo yum install -y kubectl
    

  1. 添加 Kubernetes zypper 存储库。如果您想使用与 v1.31 不同的 Kubernetes 版本,请将以下命令中的 v1.31 替换为您想要的次要版本。

    # 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.31/rpm/
    enabled=1
    gpgcheck=1
    gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
    EOF
    
  1. 更新 zypper 并确认新的 repo 添加

    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:[email protected]>
    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

排查“未找到身份验证提供程序”错误消息

在 Kubernetes 1.26 中,kubectl 删除了对以下云提供商的托管 Kubernetes 产品的内置身份验证。这些提供商已发布 kubectl 插件来提供云特定的身份验证。有关说明,请参阅以下提供商文档

(也可能存在其他原因导致出现相同的错误消息,与该更改无关。)

可选 kubectl 配置和插件

启用 shell 自动完成

kubectl 为 Bash、Zsh、Fish 和 PowerShell 提供自动完成支持,这可以节省您大量的输入时间。

以下是为 Bash、Fish 和 Zsh 设置自动完成的步骤。

简介

可以使用 kubectl completion bash 命令生成用于 Bash 的 kubectl 自动完成脚本。在您的 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

您现在需要确保 kubectl 自动完成脚本在您所有的 shell 会话中都被源化。您可以通过两种方法来实现


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

可以使用 kubectl completion fish 命令生成用于 Fish 的 kubectl 自动完成脚本。在您的 shell 中源化自动完成脚本将启用 kubectl 自动完成。

要在您所有的 shell 会话中执行此操作,请将以下行添加到您的 ~/.config/fish/config.fish 文件中

kubectl completion fish | source

重新加载您的 shell 后,kubectl 自动完成应该可以正常工作。

可以使用 kubectl completion zsh 命令生成用于 Zsh 的 kubectl 自动完成脚本。在您的 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 版本之间转换清单。这对于将清单迁移到较新的 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:更新 SUSE install-kubectl-linux.md (0299ca8f34)