在 Linux 系统中安装并设置 kubectl

准备开始

kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如:v1.31 版本的客户端能与 v1.30、 v1.31 和 v1.32 版本的控制面通信。 用最新兼容版的 kubectl 有助于避免不可预见的问题。

在 Linux 系统中安装 kubectl

在 Linux 系统中安装 kubectl 有如下几种方法:

用 curl 在 Linux 系统中安装 kubectl

  1. 用以下命令下载最新发行版:

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

    说明:

    如需下载某个指定的版本,请用指定版本号替换该命令的这一部分: $(curl -L -s https://dl.k8s.io/release/stable.txt)

    例如,要在 Linux x86-64 中下载 1.31.0 版本,请输入:

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

    对于 Linux ARM64 来说,请输入:

    1. curl -LO https://dl.k8s.io/release/v1.31.0/bin/linux/arm64/kubectl
  2. 验证该可执行文件(可选步骤)

    下载 kubectl 校验和文件:

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

    基于校验和文件,验证 kubectl 的可执行文件:

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

    验证通过时,输出为:

    1. kubectl: OK

    验证失败时,sha256 将以非零值退出,并打印如下输出:

    1. kubectl: FAILED
    2. sha256sum: WARNING: 1 computed checksum did NOT match

    说明:

    下载的 kubectl 与校验和文件版本必须相同。

  3. 安装 kubectl:

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

    说明:

    即使你没有目标系统的 root 权限,仍然可以将 kubectl 安装到目录 ~/.local/bin 中:

    1. chmod +x kubectl
    2. mkdir -p ~/.local/bin
    3. mv ./kubectl ~/.local/bin/kubectl
    4. # 之后将 ~/.local/bin 附加(或前置)到 $PATH
  4. 执行测试,以保障你安装的版本是最新的:

    1. kubectl version --client

    或者使用如下命令来查看版本的详细信息:

    1. kubectl version --client --output=yaml

用原生包管理工具安装

  1. 更新 apt 包索引,并安装使用 Kubernetes apt 仓库所需要的包:

    1. sudo apt-get update
    2. # apt-transport-https 可以是一个虚拟包;如果是这样,你可以跳过这个包
    3. sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
  2. 下载 Kubernetes 软件包仓库的公共签名密钥。 同一个签名密钥适用于所有仓库,因此你可以忽略 URL 中的版本信息:

    1. # 如果 `/etc/apt/keyrings` 目录不存在,则应在 curl 命令之前创建它,请阅读下面的注释。
    2. # sudo mkdir -p -m 755 /etc/apt/keyrings
    3. curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
    4. sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg # allow unprivileged APT programs to read this keyring

说明:

在低于 Debian 12 和 Ubuntu 22.04 的发行版本中,/etc/apt/keyrings 默认不存在。 应在 curl 命令之前创建它。

  1. 添加合适的 Kubernetes apt 仓库。如果你想用 v1.31 之外的 Kubernetes 版本, 请将下面命令中的 v1.31 替换为所需的次要版本:

    1. # 这会覆盖 /etc/apt/sources.list.d/kubernetes.list 中的所有现存配置
    2. 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
    3. sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list # 有助于让诸如 command-not-found 等工具正常工作

说明:

要将 kubectl 升级到别的次要版本,你需要先升级 /etc/apt/sources.list.d/kubernetes.list 中的版本, 再运行 apt-get updateapt-get upgrade 命令。 更详细的步骤可以在更改 Kubernetes 软件包存储库中找到。

  1. 更新 apt 包索引,然后安装 kubectl:

    1. sudo apt-get update
    2. sudo apt-get install -y kubectl
  2. 添加 Kubernetes 的 yum 仓库。如果你想使用 v1.31 之外的 Kubernetes 版本, 将下面命令中的 v1.31 替换为所需的次要版本。

    1. # 这会覆盖 /etc/yum.repos.d/kubernetes.repo 中现存的所有配置
    2. cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
    3. [kubernetes]
    4. name=Kubernetes
    5. baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
    6. enabled=1
    7. gpgcheck=1
    8. gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
    9. EOF

说明:

要将 kubectl 升级到别的次要版本,你需要先升级 /etc/yum.repos.d/kubernetes.repo 中的版本,再运行 yum update 命令。 更详细的步骤可以在更改 Kubernetes 软件包存储库中找到。

  1. 使用 yum 安装 kubectl:

    1. sudo yum install -y kubectl
  2. 添加 Kubernetes zypper 软件源。如果你想使用不同于 v1.31 的 Kubernetes 版本,请在下面的命令中将 v1.31 替换为所需的次要版本。

  1. # 这将覆盖 /etc/zypp/repos.d/kubernetes.repo 中的任何现有配置。
  2. cat <<EOF | sudo tee /etc/zypp/repos.d/kubernetes.repo
  3. [kubernetes]
  4. name=Kubernetes
  5. baseurl=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/
  6. enabled=1
  7. gpgcheck=1
  8. gpgkey=https://pkgs.k8s.io/core:/stable:/v1.31/rpm/repodata/repomd.xml.key
  9. EOF

说明:

要升级 kubectl 到另一个小版本,你需要先更新 /etc/zypp/repos.d/kubernetes.repo 的版本, 再运行 zypper update。 此过程在更改 Kubernetes 软件包仓库中有更详细的描述。

  1. 更新 zypper 并确认新的仓库已添加:

    1. sudo zypper update

    出现此信息时,按 ‘t’ 或 ‘a’’:

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

    1. sudo zypper install -y kubectl

用其他包管理工具安装

如果你使用的 Ubuntu 或其他 Linux 发行版,内建支持 snap 包管理工具, 则可用 snap 命令安装 kubectl。

  1. snap install kubectl --classic
  2. kubectl version --client

如果你使用 Linux 系统,并且装了 Homebrew 包管理工具, 则可以使用这种方式安装 kubectl。

  1. brew install kubectl
  2. kubectl version --client

验证 kubectl 配置

为了让 kubectl 能发现并访问 Kubernetes 集群,你需要一个 kubeconfig 文件, 该文件在 kube-up.sh 创建集群时,或成功部署一个 Minikube 集群时,均会自动生成。 通常,kubectl 的配置信息存放于文件 ~/.kube/config 中。

通过获取集群状态的方法,检查是否已恰当地配置了 kubectl:

  1. kubectl cluster-info

如果返回一个 URL,则意味着 kubectl 成功地访问到了你的集群。

如果你看到如下所示的消息,则代表 kubectl 配置出了问题,或无法连接到 Kubernetes 集群。

  1. The connection to the server <server-name:port> was refused - did you specify the right host or port?
  2. (访问 <server-name:port> 被拒绝 - 你指定的主机和端口是否有误?)

例如,如果你想在自己的笔记本上(本地)运行 Kubernetes 集群,你需要先安装一个 Minikube 这样的工具,然后再重新运行上面的命令。

如果命令 kubectl cluster-info 返回了 URL,但你还不能访问集群,那可以用以下命令来检查配置是否妥当:

  1. kubectl cluster-info dump

排查”找不到身份验证提供商”的错误信息

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

(还可能会有其他原因会看到相同的错误信息,和这个更改无关。)

kubectl 的可选配置和插件

启用 shell 自动补全功能

kubectl 为 Bash、Zsh、Fish 和 PowerShell 提供自动补全功能,可以为你节省大量的输入。

下面是为 Bash、Fish 和 Zsh 设置自动补全功能的操作步骤。

简介

kubectl 的 Bash 补全脚本可以用命令 kubectl completion bash 生成。 在 Shell 中导入(Sourcing)补全脚本,将启用 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 中:

  1. source /usr/share/bash-completion/bash_completion

重新加载 Shell,再输入命令 type _init_completion 来验证 bash-completion 的安装状态。

启动 kubectl 自动补全功能

Bash

你现在需要确保一点:kubectl 补全脚本已经导入(sourced)到 Shell 会话中。 可以通过以下两种方法进行设置:

  1. echo 'source <(kubectl completion bash)' >>~/.bashrc
  1. kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null
  2. sudo chmod a+r /etc/bash_completion.d/kubectl

如果 kubectl 有关联的别名,你可以扩展 Shell 补全来适配此别名:

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

说明:

bash-completion 负责导入 /etc/bash_completion.d 目录中的所有补全脚本。

两种方式的效果相同。重新加载 Shell 后,kubectl 自动补全功能即可生效。 若要在当前 Shell 会话中启用 Bash 补全功能,源引 ~/.bashrc 文件:

  1. source ~/.bashrc

说明:

自动补全 Fish 需要 kubectl 1.23 或更高版本。

kubectl 通过命令 kubectl completion fish 生成 Fish 自动补全脚本。 在 shell 中导入(Sourcing)该自动补全脚本,将启动 kubectl 自动补全功能。

为了在所有的 shell 会话中实现此功能,请将下面内容加入到文件 ~/.config/fish/config.fish 中。

  1. kubectl completion fish | source

重新加载 shell 后,kubectl 自动补全功能将立即生效。

kubectl 通过命令 kubectl completion zsh 生成 Zsh 自动补全脚本。 在 Shell 中导入(Sourcing)该自动补全脚本,将启动 kubectl 自动补全功能。

为了在所有的 Shell 会话中实现此功能,请将下面内容加入到文件 ~/.zshrc 中。

  1. source <(kubectl completion zsh)

如果你为 kubectl 定义了别名,kubectl 自动补全将自动使用它。

重新加载 Shell 后,kubectl 自动补全功能将立即生效。

如果你收到 2: command not found: compdef 这样的错误提示,那请将下面内容添加到 ~/.zshrc 文件的开头:

  1. autoload -Uz compinit
  2. compinit

安装 kubectl convert 插件

一个 Kubernetes 命令行工具 kubectl 的插件,允许你将清单在不同 API 版本间转换。 这对于将清单迁移到新的 Kubernetes 发行版上未被废弃的 API 版本时尤其有帮助。 更多信息请访问迁移到非弃用 API

  1. 用以下命令下载最新发行版:

    1. curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert"
    1. 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 校验和文件:

    1. curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl-convert.sha256"
    1. 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 的可执行文件:

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

    验证通过时,输出为:

    1. kubectl-convert: OK

    验证失败时,sha256 将以非零值退出,并打印输出类似于:

    1. kubectl-convert: FAILED
    2. sha256sum: WARNING: 1 computed checksum did NOT match

    说明:

    下载相同版本的可执行文件和校验和。

  3. 安装 kubectl-convert

    1. sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert
  4. 验证插件是否安装成功

    1. kubectl convert --help

    如果你没有看到任何错误就代表插件安装成功了。

  5. 安装插件后,清理安装文件:

    1. rm kubectl-convert kubectl-convert.sha256

接下来