Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Install and Set Up kubectl on macOS
在 macOS 系统上安装和设置 kubectl
准备开始
kubectl 版本和集群之间的差异必须在一个小版本号之内。 例如:v1.29 版本的客户端能与 v1.28、 v1.29 和 v1.30 版本的控制面通信。 用最新兼容版本的 kubectl 有助于避免不可预见的问题。
在 macOS 系统上安装 kubectl
在 macOS 系统上安装 kubectl 有如下方法:
用 curl 在 macOS 系统上安装 kubectl
-
下载最新的发行版:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
说明:如果需要下载某个指定的版本,用该指定版本号替换掉命令的这个部分:
$(curl -L -s https://dl.k8s.io/release/stable.txt)
。 例如:要为 Intel macOS 系统下载 1.29.0 版本,则输入:curl -LO "https://dl.k8s.io/release/v1.29.0/bin/darwin/amd64/kubectl"
对于 Apple Silicon 版本的 macOS,输入:
curl -LO "https://dl.k8s.io/release/v1.29.0/bin/darwin/arm64/kubectl"
-
验证可执行文件(可选操作)
下载 kubectl 的校验和文件:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl.sha256"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl.sha256"
根据校验和文件,验证 kubectl:
echo "$(cat kubectl.sha256) kubectl" | shasum -a 256 --check
验证通过时,输出如下:
kubectl: OK
验证失败时,
shasum
将以非零值退出,并打印如下输出:kubectl: FAILED shasum: WARNING: 1 computed checksum did NOT match
说明:下载的 kubectl 与校验和文件版本要相同。
-
将 kubectl 置为可执行文件:
chmod +x ./kubectl
-
将可执行文件 kubectl 移动到系统可寻址路径
PATH
内的一个位置:sudo mv ./kubectl /usr/local/bin/kubectl sudo chown root: /usr/local/bin/kubectl
说明:确保
/usr/local/bin
在你的 PATH 环境变量中。
-
测试一下,确保你安装的是最新的版本:
kubectl version --client
或者使用下面命令来查看版本的详细信息:
kubectl version --client --output=yaml
-
安装插件后,清理安装文件:
rm kubectl kubectl.sha256
用 Homebrew 在 macOS 系统上安装
如果你是 macOS 系统,且用的是 Homebrew 包管理工具, 则可以用 Homebrew 安装 kubectl。
-
运行安装命令:
brew install kubectl
或
brew install kubernetes-cli
-
测试一下,确保你安装的是最新的版本:
kubectl version --client
用 Macports 在 macOS 系统上安装
如果你用的是 macOS,且用 Macports 包管理工具,则你可以用 Macports 安装 kubectl。
-
运行安装命令:
sudo port selfupdate sudo port 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?
(访问 <server-name:port> 被拒绝 - 你指定的主机和端口是否有误?)
例如,如果你想在自己的笔记本上(本地)运行 Kubernetes 集群,你需要先安装一个 Minikube 这样的工具,然后再重新运行上面的命令。
如果命令 kubectl cluster-info
返回了 URL,但你还不能访问集群,那可以用以下命令来检查配置是否妥当:
kubectl cluster-info dump
排查"找不到身份验证提供商"的错误信息
在 Kubernetes 1.26 中,kubectl 删除了以下云提供商托管的 Kubernetes 产品的内置身份验证。 这些提供商已经发布了 kubectl 插件来提供特定于云的身份验证。 有关说明,请参阅以下提供商文档:
- Azure AKS:kubelogin 插件
- CKE:gke-gcloud-auth-plugin
(还可能会有其他原因会看到相同的错误信息,和这个更改无关。)
可选的 kubectl 配置和插件
启用 shell 自动补全功能
kubectl 为 Bash、Zsh、Fish 和 PowerShell 提供自动补全功能,可以为你节省大量的输入。
下面是为 Bash、Fish 和 Zsh 设置自动补全功能的操作步骤。
简介
kubectl 的 Bash 补全脚本可以通过 kubectl completion bash
命令生成。
在你的 Shell 中导入(Sourcing)这个脚本即可启用补全功能。
此外,kubectl 补全脚本依赖于工具 bash-completion, 所以你必须先安装它。
bash-completion 有两个版本:v1 和 v2。v1 对应 Bash 3.2(也是 macOS 的默认安装版本), v2 对应 Bash 4.1+。kubectl 的补全脚本无法适配 bash-completion v1 和 Bash 3.2。 必须为它配备 bash-completion v2 和 Bash 4.1+。 有鉴于此,为了在 macOS 上使用 kubectl 补全功能,你必须要安装和使用 Bash 4.1+ (说明)。 后续说明假定你用的是 Bash 4.1+(也就是 Bash 4.1 或更新的版本)。
升级 Bash
后续说明假定你已使用 Bash 4.1+。你可以运行以下命令检查 Bash 版本:
echo $BASH_VERSION
如果版本太旧,可以用 Homebrew 安装/升级:
brew install bash
重新加载 Shell,并验证所需的版本已经生效:
echo $BASH_VERSION $SHELL
Homebrew 通常把它安装为 /usr/local/bin/bash
。
安装 bash-completion
如前所述,本说明假定你使用的 Bash 版本为 4.1+,这意味着你要安装 bash-completion v2 (不同于 Bash 3.2 和 bash-completion v1,kubectl 的补全功能在该场景下无法工作)。
你可以用命令 type _init_completion
测试 bash-completion v2 是否已经安装。
如未安装,用 Homebrew 来安装它:
brew install bash-completion@2
如命令的输出信息所显示的,将如下内容添加到文件 ~/.bash_profile
中:
brew_etc="$(brew --prefix)/etc" && [[ -r "${brew_etc}/profile.d/bash_completion.sh" ]] && . "${brew_etc}/profile.d/bash_completion.sh"
重新加载 Shell,并用命令 type _init_completion
验证 bash-completion v2 已经恰当的安装。
启用 kubectl 自动补全功能
你现在需要确保在所有的 Shell 环境中均已导入(sourced)kubectl 的补全脚本, 有若干种方法可以实现这一点:
-
在文件
~/.bash_profile
中导入(Source)补全脚本:echo 'source <(kubectl completion bash)' >>~/.bash_profile
-
将补全脚本添加到目录
/usr/local/etc/bash_completion.d
中:kubectl completion bash >/usr/local/etc/bash_completion.d/kubectl
-
如果你为 kubectl 定义了别名,则可以扩展 Shell 补全来兼容该别名:
echo 'alias k=kubectl' >>~/.bash_profile echo 'complete -o default -F __start_kubectl k' >>~/.bash_profile
-
如果你是用 Homebrew 安装的 kubectl (如此页面所描述), 则 kubectl 补全脚本应该已经安装到目录
/usr/local/etc/bash_completion.d/kubectl
中了。这种情况下,你什么都不需要做。说明:用 Hommbrew 安装的 bash-completion v2 会初始化目录
BASH_COMPLETION_COMPAT_DIR
中的所有文件,这就是后两种方法能正常工作的原因。
总之,重新加载 Shell 之后,kubectl 补全功能将立即生效。
自动补全 Fish 需要 kubectl 1.23 或更高版本。
kubectl 通过命令 kubectl completion fish
生成 Fish 自动补全脚本。
在 shell 中导入(Sourcing)该自动补全脚本,将启动 kubectl 自动补全功能。
为了在所有的 shell 会话中实现此功能,请将下面内容加入到文件 ~/.config/fish/config.fish
中。
kubectl completion fish | source
重新加载 shell 后,kubectl 自动补全功能将立即生效。
kubectl 通过命令 kubectl completion zsh
生成 Zsh 自动补全脚本。
在 Shell 中导入(Sourcing)该自动补全脚本,将启动 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
-
用以下命令下载最新发行版:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl-convert"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl-convert"
-
验证该可执行文件(可选步骤)
下载 kubectl-convert 校验和文件:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/amd64/kubectl-convert.sha256"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl-convert.sha256"
基于校验和,验证 kubectl-convert 的可执行文件:
echo "$(cat kubectl-convert.sha256) kubectl-convert" | shasum -a 256 --check
验证通过时,输出为:
kubectl-convert: OK
验证失败时,
sha256
将以非零值退出,并打印输出类似于:kubectl-convert: FAILED shasum: WARNING: 1 computed checksum did NOT match
说明:下载相同版本的可执行文件和校验和。
-
使 kubectl-convert 二进制文件可执行
chmod +x ./kubectl-convert
-
将 kubectl-convert 可执行文件移动到系统
PATH
环境变量中的一个位置。sudo mv ./kubectl-convert /usr/local/bin/kubectl-convert sudo chown root: /usr/local/bin/kubectl-convert
说明:确保你的 PATH 环境变量中存在
/usr/local/bin
。
-
验证插件是否安装成功
kubectl convert --help
如果你没有看到任何错误就代表插件安装成功了。
-
安装插件后,清理安装文件:
rm kubectl-convert kubectl-convert.sha256
在 macOS 上卸载 kubectl
根据你安装 kubectl
的方式,使用以下某种方法来卸载:
使用命令行卸载 kubectl
-
找到你系统上的
kubectl
可执行文件:which kubectl
-
移除
kubectl
可执行文件:sudo rm <path>
将
<path>
替换为上一步中找到的kubectl
可执行文件的路径。 例如,sudo rm /usr/local/bin/kubectl
。
使用 Homebrew 卸载 kubectl
如果你使用 Homebrew 安装了 kubectl
,运行以下命令:
brew remove kubectl
接下来
- 安装 Minikube。
- 有关创建集群的更多信息,请参阅入门指南。
- 学习如何启动并对外公开你的应用程序。
- 如果你需要访问其他人创建的集群, 请参阅共享集群接入文档。
- 阅读 kubectl 参考文档。