安装 kubectl 并配置集群访问权限

本页面介绍了如何安装 kubectl 命令行工具,以用于管理和访问 Google Kubernetes Engine (GKE) 集群。如果您在 Google Cloud中运行多个集群,则必须进行 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 可能不支持运行本文档中的命令。

安装 kubectl

您可以使用 Google Cloud CLI 或外部软件包管理器(如 aptyum)安装 kubectl

gcloud

  1. 安装 kubectl 组件:

    gcloud components install kubectl
    
  2. 通过检查 kubectl 是否具有最新版本来验证其是否已安装。

    kubectl version --client
    

apt

  1. 验证您是否拥有 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
    
  2. 如果未列出 cloud-sdk 仓库,请安装 gcloud CLI

  3. 安装 kubectl 组件:

    apt-get update
    apt-get install -y kubectl
  4. 通过检查 kubectl 是否具有最新版本来验证其是否已安装。

    kubectl version --client

yum

  1. 验证您是否拥有 cloud-sdk 代码库:

    yum repolist | grep "google-cloud-sdk"

    输出内容类似如下:

    google-cloud-sdk    Google Cloud SDK    2,205
    
  2. 安装 kubectl 组件:

    yum install -y kubectl
  3. 通过检查 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 或外部软件包管理系统(例如 aptyum)安装身份验证插件。

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-plugin

yum

安装 gke-gcloud-auth-plugin 二进制文件:

  yum install google-cloud-sdk-gke-gcloud-auth-plugin

验证 gke-gcloud-auth-plugin 二进制文件安装:

  1. 检查 gke-gcloud-auth-plugin 二进制文件版本:

    gke-gcloud-auth-plugin --version
    
  2. 更新 kubectl 配置以使用该插件:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
    

    请替换以下内容:

    • CLUSTER_NAME:您的集群的名称。
    • CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 位置。为区域级集群提供区域,或为可用区级集群提供可用区。
  3. 运行以下命令以验证配置:

    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 条目包含:

如需在您的环境中生成 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-clustermy-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-clustermy-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

后续步骤

自行试用

如果您是 Google Cloud 新手,请创建一个账号来评估 GKE 在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。

免费试用 GKE