在 Linux 上安装和设置 kubectl
准备工作
您使用的 kubectl 版本必须与您的集群版本在一个次要版本差异之内。例如,v1.34 客户端可以与 v1.33、v1.34 和 v1.35 控制平面通信。使用最新兼容的 kubectl 版本有助于避免意外问题。
在 Linux 上安装 kubectl
以下是在 Linux 上安装 kubectl 的方法
在 Linux 上使用 curl 安装 kubectl 二进制文件
使用命令下载最新版本
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"
注意
要下载特定版本,请将命令中的 `$(curl -L -s https://dl.k8s.io/release/stable.txt)` 部分替换为特定版本。
例如,要在 Linux x86-64 上下载 1.34.0 版本,请输入
curl -LO https://dl.k8s.io/release/v1.34.0/bin/linux/amd64/kubectl
对于 Linux ARM64,请输入
curl -LO https://dl.k8s.io/release/v1.34.0/bin/linux/arm64/kubectl
验证二进制文件(可选)
下载 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
注意
下载相同版本的二进制文件和校验和。安装 kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
注意
如果目标系统没有 root 权限,您仍然可以将 kubectl 安装到 `~/.local/bin` 目录
chmod +x kubectl mkdir -p ~/.local/bin mv ./kubectl ~/.local/bin/kubectl # and then append (or prepend) ~/.local/bin to $PATH
测试以确保你安装的版本是最新的
kubectl version --client
或者使用此命令查看详细版本信息
kubectl version --client --output=yaml
使用原生包管理器安装
更新 `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
下载 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.34/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
注意
在 Debian 12 和 Ubuntu 22.04 之前的发行版中,`/etc/apt/keyrings` 文件夹默认不存在,应在 curl 命令之前创建。添加适当的 Kubernetes `apt` 仓库。如果您想使用与 v1.34 不同的 Kubernetes 版本,请在以下命令中将 v1.34 替换为所需的次要版本
# 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 sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list # helps tools such as command-not-found to work correctly
注意
要将 kubectl 升级到另一个次要版本,您需要先在 `/etc/apt/sources.list.d/kubernetes.list` 中更改版本,然后运行 `apt-get update` 和 `apt-get upgrade`。此过程在更改 Kubernetes 包仓库中进行了更详细的描述。更新 `apt` 包索引,然后安装 kubectl
sudo apt-get update sudo apt-get install -y kubectl
添加 Kubernetes `yum` 仓库。如果您想使用与 v1.34 不同的 Kubernetes 版本,请在以下命令中将 v1.34 替换为所需的次要版本。
# 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 EOF
注意
要将 kubectl 升级到另一个次要版本,您需要在运行 `yum update` 之前在 `/etc/yum.repos.d/kubernetes.repo` 中更改版本。此过程在更改 Kubernetes 包仓库中进行了更详细的描述。使用 `yum` 安装 kubectl
sudo yum install -y kubectl
添加 Kubernetes `zypper` 仓库。如果您想使用与 v1.34 不同的 Kubernetes 版本,请在以下命令中将 v1.34 替换为所需的次要版本。
# 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.34/rpm/ enabled=1 gpgcheck=1 gpgkey=https://pkgs.k8s.io/core:/stable:/v1.34/rpm/repodata/repomd.xml.key EOF
注意
要将 kubectl 升级到另一个次要版本,您需要在运行 `zypper update` 之前在 `/etc/zypp/repos.d/kubernetes.repo` 中更改版本。此过程在更改 Kubernetes 包仓库中进行了更详细的描述。更新 `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
使用 `zypper` 安装 kubectl
sudo zypper install -y kubectl
使用其他包管理器安装
验证 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 插件以提供特定于云的认证。有关说明,请参阅以下提供商文档
- Azure AKS: kubelogin 插件
- Google Kubernetes Engine: gke-gcloud-auth-plugin
(也可能存在其他原因导致出现相同的错误消息,与此更改无关。)
可选的 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-completion` 或 `yum 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
注意
bash-completion 会加载 `/etc/bash_completion.d` 中的所有补全脚本。两种方法是等效的。重新加载 shell 后,kubectl 自动补全应该可以工作。要在当前 shell 会话中启用 bash 自动补全,请加载 ~/.bashrc 文件
source ~/.bashrc
注意
Fish 的自动补全需要 kubectl 1.23 或更高版本。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
配置 kuberc
有关更多信息,请参阅 kuberc。
安装 kubectl convert
插件
Kubernetes 命令行工具 `kubectl` 的一个插件,允许您在不同的 API 版本之间转换清单。这对于将清单迁移到新 Kubernetes 版本中未弃用的 api 版本特别有用。有关更多信息,请访问 迁移到未弃用的 API
使用命令下载最新版本
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"
验证二进制文件(可选)
下载 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
注意
下载相同版本的二进制文件和校验和。安装 kubectl-convert
sudo install -o root -g root -m 0755 kubectl-convert /usr/local/bin/kubectl-convert
验证插件是否成功安装
kubectl convert --help
如果你没有看到错误,则表示插件已成功安装。
安装插件后,清理安装文件
rm kubectl-convert kubectl-convert.sha256
下一步
- 安装 Minikube
- 有关创建集群的更多信息,请参阅 入门指南。
- 了解如何启动和暴露你的应用程序。
- 如果你需要访问你未创建的集群,请参阅 共享集群访问文档。
- 阅读 kubectl 参考文档