本页面介绍了如何安装 kubectl 命令行工具,以用于管理和访问 Google Kubernetes Engine (GKE) 集群。如果您在 Google Cloud中运行多个集群,则必须进行 kubectl 配置。
您将了解以下内容:
kubectl的工作方式。- 如何安装
kubectl以及任何必需的依赖项。 - 如何为
kubectl设置默认集群。 - 如何针对特定集群运行
kubectl命令。
本页面适用于负责设置、监控和管理云基础设施(包括预配和配置云资源)的 IT 管理员、运维人员和开发者。如需详细了解我们在 Google Cloud 文档中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。
在阅读本页面内容之前,请确保您熟悉 Kubernetes kubectl。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update命令以获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
- 确保您已有 Autopilot 或 Standard 集群。如需创建新集群,请参阅创建 Autopilot 集群。
安装 kubectl
您可以使用 Google Cloud CLI 或外部软件包管理器(如 apt 或 yum)安装 kubectl。
gcloud
安装
kubectl组件:gcloud components install kubectl通过检查
kubectl是否具有最新版本来验证其是否已安装。kubectl version --client
apt
验证您是否拥有
cloud-sdk代码库:grep -rhE ^deb /etc/apt/sources.list* | grep "cloud-sdk"输出类似于以下内容:
deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main如果未列出
cloud-sdk仓库,请安装 gcloud CLI。安装
kubectl组件:apt-get update apt-get install -y kubectl通过检查
kubectl是否具有最新版本来验证其是否已安装。kubectl version --client
yum
验证您是否拥有
cloud-sdk代码库:yum repolist | grep "google-cloud-sdk"输出内容类似如下:
google-cloud-sdk Google Cloud SDK 2,205安装
kubectl组件:yum install -y kubectl通过检查
kubectl是否具有最新版本来验证其是否已安装。kubectl version --client
安装所需的插件
kubectl 和其他 Kubernetes 客户端需要身份验证插件 gke-gcloud-auth-plugin,该插件使用 Client-go 凭据插件框架提供身份验证令牌来与 GKE 集群通信。
在 Kubernetes 1.26 版发布之前,gcloud CLI 将开始要求安装 gke-gcloud-auth-plugin 二进制文件。如果未安装该插件,则现有 kubectl 或其他自定义 Kubernetes 客户端的安装将停止运作。
必须安装此插件才能使用 kubectl 和其他客户端与 GKE 进行交互。如果未安装此插件,现有客户端会显示错误消息。
开始之前,请检查是否已安装该插件:
gke-gcloud-auth-plugin --version
如果输出显示版本信息,请跳过此部分。
您可以使用 gcloud CLI 或外部软件包管理系统(例如 apt 或 yum)安装身份验证插件。
gcloud
安装 gke-gcloud-auth-plugin 二进制文件:
gcloud components install gke-gcloud-auth-plugin
apt
安装 gke-gcloud-auth-plugin 二进制文件:
apt-get install google-cloud-sdk-gke-gcloud-auth-pluginyum
安装 gke-gcloud-auth-plugin 二进制文件:
yum install google-cloud-sdk-gke-gcloud-auth-plugin验证 gke-gcloud-auth-plugin 二进制文件安装:
检查
gke-gcloud-auth-plugin二进制文件版本:gke-gcloud-auth-plugin --version更新
kubectl配置以使用该插件:gcloud container clusters get-credentials CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION请替换以下内容:
CLUSTER_NAME:您的集群的名称。CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 位置。为区域级集群提供区域,或为可用区级集群提供可用区。
运行以下命令以验证配置:
kubectl get namespaces输出类似于以下内容:
NAME STATUS AGE default Active 51d kube-node-lease Active 51d kube-public Active 51d kube-system Active 51d
如需详细了解此插件,请参阅 Kubernetes KEP。
与 kubectl 交互
Kubernetes 使用名为 kubeconfig 的 YAML 文件存储 kubectl 的集群身份验证信息。默认情况下,该文件保存在 $HOME/.kube/config。
kubeconfig 包含一组称为“上下文”的访问参数。每个上下文都包含一个 Kubernetes 集群、一个用户和一个可选的默认命名空间。kubectl 是指运行命令时的上下文。
(可选)您可以通过以下任务配置 kubectl:
- 选择与
kubectl通信的集群。 - 通过在
kubeconfig文件中设置当前上下文,为kubectl设置默认集群。 - 使用
--cluster标志针对特定集群运行kubectl命令。
查看kubeconfig
若要查看环境的 kubeconfig,请运行以下命令:
kubectl config view
该命令返回已生成 kubeconfig 条目所对应的所有集群的列表。如果系统列出了某一 GKE 集群,您可以在当前环境中对其运行 kubectl 命令。否则,您需要存储 kubectl 的集群信息。
查看 kubectl 的当前上下文
当前上下文是 kubectl 当前的默认集群。所有 kubectl 命令都针对该集群运行。
使用 gcloud container clusters create-auto 创建集群时,系统会自动将条目添加到环境中的 kubeconfig 文件,并且当前上下文将更改为该集群。例如:
gcloud container clusters create-auto my-cluster
Creating my-cluster...done
Fetching cluster endpoint and auth data.
kubeconfig entry generated for my-cluster
若要查看 kubectl 的当前上下文,请运行以下命令:
kubectl config current-context
存储 kubectl 的集群信息
当您使用 Google Cloud 控制台或使用 gcloud CLI 从其他计算机创建集群时,您所在环境的 kubeconfig 文件不会更新。此外,如果项目团队成员使用 gcloud CLI 从他们的计算机上创建集群,他们的 kubeconfig 会进行更新,但您的不会。kubeconfig 条目包含:
gcloud auth list中所示的您的凭据,或- 应用默认凭据(如果已配置)。
如需在您的环境中生成 kubeconfig 上下文,请确保您拥有 container.clusters.get 权限。提供此权限的最小特权 IAM 角色为 container.clusterViewer。
如需为特定集群生成 kubeconfig 上下文,请运行以下命令:
gcloud container clusters get-credentials CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION
请替换以下内容:
CLUSTER_NAME:您的集群的名称。CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 位置。为区域级集群提供区域,或为可用区级集群提供可用区。
使用集群的内部 IP 地址生成 kubeconfig 条目
所有集群都有多个端点地址,每个地址都具有不同的特征。其中一个端点充当 kubectl 和其他服务用来与集群控制平面通信的规范端点。GKE 会按以下顺序自动选择端点:
- 外部 IP 地址(如果您已启用外部端点)
- 内部 IP 地址
- DNS 地址(如果停用了 IP 访问权限)
如需默认使用规范端点,请运行
get-credentials命令。如需更精细地控制kubectl使用哪个端点,请使用--internal-ip或--dns-endpoint标志。 如需更新kubeconfig文件以使用内部 IP 地址,请运行以下命令:
gcloud container clusters get-credentials CLUSTER_NAME --internal-ip
如需更新 kubeconfig 文件以使用 DNS 地址,请运行以下命令:
gcloud container clusters get-credentials CLUSTER_NAME --dns-endpoint
将 CLUSTER_NAME 替换为您的集群名称。
默认情况下,如果运行 get-credentials,则系统会使用 endpoint 字段中指定的 IP 地址。
为 kubectl 命令设置默认集群
如果您之前为集群生成了 kubeconfig 条目,则可以通过运行以下命令,将 kubectl 的当前上下文切换为该集群:
gcloud container clusters get-credentials CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION
请替换以下内容:
CLUSTER_NAME:您的集群的名称。CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 位置。为区域级集群提供区域,或为可用区级集群提供可用区。
举例来说,假设一个项目有 my-cluster 和 my-new-cluster 这两个集群。当前上下文是 my-new-cluster,但是您希望针对 my-cluster 运行所有 kubectl 命令。如需将当前上下文从 my-new-cluster 切换为 my-cluster,请运行以下命令:
gcloud container clusters get-credentials CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION
针对特定集群运行单独的 kubectl 命令
您可以使用 --cluster=CLUSTER_NAME 针对特定集群运行单独的 kubectl 命令。
举例来说,假设一个环境中有 my-cluster 和 my-new-cluster 这两个集群,当前上下文为 my-cluster。您希望将某个应用部署到 my-new-cluster,但您不希望更改当前上下文。如需在不更改当前上下文的情况下将应用部署到 my-new-cluster,您需要运行以下命令:
kubectl run my-app --image us-docker.pkg.dev/my-project/my-repo/my-app:1.0 --cluster my-new-cluster