在边缘部署 GKE on Bare Metal 集群

本教程介绍了一个现成的解决方案,该解决方案使用 GKE on Bare Metal 和 Config Sync 在边缘上大规模部署 Kubernetes 集群。本教程适用于平台运营者和开发者。您应该熟悉以下技术和概念:

在本教程中,您将使用 Compute Engine 虚拟机来模拟在边缘部署的节点,并使用示例销售终端应用作为边缘工作负载。GKE on Bare Metal 和 Config Sync 可对您的边缘集群进行集中管理和控制。Config Sync 会从 GitHub 动态拉取新配置,并将这些政策和配置应用到您的集群。

边缘部署架构

零售边缘部署可以很好地说明典型 GKE on Bare Metal 部署中使用的架构。

实体零售商店是企业业务部门与消费者之间最近的互动点。商店内的软件系统必须运行其工作负载,接收定时更新,并报告与企业中央管理系统隔离的关键指标。此外,这些软件系统需要设计为将来可以扩展到更多商店位置。虽然 GKE on Bare Metal 满足商店软件系统的所有这些要求,但边缘配置文件支持一个重要的使用场景:在硬件资源有限的环境中进行部署,例如零售店。

下图显示了在零售店中使用边缘配置文件的 GKE on Bare Metal 部署:

在零售店中使用边缘配置文件的 GKE on Bare Metal 部署

上图显示了典型的实体零售店。该商店有一些智能设备,例如读卡器、销售终端机器、摄像头和打印设备。该商店还有三个实体计算硬件设备(标记为 Node 1Node 2Node 3)。所有这些设备都连接到中央网络交换机。因此,这三个计算设备通过第 2 层网络相互连接。联网的计算设备构成裸机基础架构。GKE on Bare Metal 在三个计算设备中的每个计算设备上运行。这些设备还有自己的磁盘存储,并且配置为在它们之间进行数据复制,以实现高可用性。

该图还显示了 GKE on Bare Metal 部署的以下关键组件:

  • 标记为 MetalLB 的组件是与 GKE on Bare Metal 部署的捆绑式负载均衡器
  • 借助 Config Sync 组件,您可以将集群的状态与源代码库同步。这是一个强烈建议采用的可选插件,它需要单独的安装和配置。如需详细了解如何设置 Config Sync 和不同的命名法,请参阅 Config Sync 文档
  • 该商店位置外面的图表顶部显示的根代码库命名空间代码库代表两个源代码库。

    对集群的更改将推送到这些中央源代码库。各个边缘位置的 GKE on Bare Metal 部署会从源代码库拉取更新。此行为由箭头表示,这些箭头将图中的两个代码库连接到设备中运行的 GKE on Bare Metal 集群内的 Config Sync 组件。

  • 集群中所描述的另一个关键组件是 GDC 上的虚拟机运行时。借助 GDC 上的 VM Runtime,无需容器化,即可在集群内运行基于虚拟机的现有工作负载。GDC 上的虚拟机运行时文档说明了如何启用虚拟机运行时,以及如何将虚拟机工作负载部署到集群中。

  • 标记为应用的组件表示由零售店部署到集群中的软件。零售店的自助服务终端中可以看到的销售终端应用就是此类应用的一个例子。

图底部的框表示零售店内的许多设备(例如、平板电脑或摄像头),所有设备都连接到中央网络交换机。通过存储区内的本地网络,在 GKE on Bare Metal 部署内运行的应用可以访问这些设备。

在下一部分中,您将了解使用 Compute Engine 虚拟机在 Google Cloud 中部署此零售店的模拟。在接下来的教程中,您将使用该模拟来对 GKE on Bare Metal 进行实验。

Google Cloud 中的模拟边缘部署

下图描绘了本教程中您在 Google Cloud 中设置的所有内容。此图与上一部分中的零售店图相关。此部署表示部署销售点应用的模拟边缘位置。该架构还展示了您在本教程中使用的简单销售点示例应用工作负载。您可以使用网络浏览器作为自助服务终端,访问集群内的销售终端应用。

销售点应用的架构及其在 Compute Engine 虚拟机上运行的 GKE on Bare Metal 集群中的部署方式

上图中的三个 Compute Engine 虚拟机 (VM) 表示典型边缘位置中的物理硬件(或节点)。该硬件将与网络交换机连接以构成裸机基础架构。在我们的 Google Cloud 中的模拟环境中,这些虚拟机通过 Google Cloud 项目中的默认虚拟私有云 (VPC) 网络相互连接。

在典型的 GKE on Bare Metal 安装中,您可以配置自己的负载平衡器。但是,在本教程中,您不需要设置外部负载均衡器,您可以改用与 GKE on Bare Metal 一同安装的捆绑式 MetalLB 负载均衡器。捆绑式 MetalLB 负载均衡器需要节点之间的第 2 层网络连接。因此,可以通过在默认虚拟私有云 (VPC) 网络之上创建 VxLAN 叠加网络来启用 Compute Engine 虚拟机之间的第 2 层连接。

在标有“L2 叠加网络 (VxLAN)”的矩形中,显示了在三个 Compute Engine 虚拟机中运行的软件组件。这个矩形包含 GKE on Bare Metal 集群反向代理。集群由“GKE on Bare Metal”矩形表示。表示集群的此矩形包括另一个标记为“Kubernetes 命名空间 (pos)”的矩形。这表示集群内的 Kubernetes 命名空间。此 Kubernetes 命名空间内的所有组件构成了部署到 GKE on Bare Metal 集群的销售点应用。销售终端应用有三个微服务:API 服务器、库存和付款。所有这些组件一起表示之前的 Edge 部署架构图中的一个“应用”。

无法从虚拟机外部直接访问 GKE on Bare Metal 集群的捆绑 MetalLB 负载均衡器。该图显示了配置为在虚拟机内运行的 NGINX 反向代理,用于将传入到 Compute Engine 虚拟机中的流量路由到负载均衡器。这只是本教程使用 Google Cloud Compute Engine 虚拟机模拟边缘节点的一种解决方法。在实际边缘位置中,可以通过正确的网络配置实现这一点。

目标

  1. 使用 Compute Engine 虚拟机模拟在边缘位置运行的裸机基础架构。
  2. 在模拟边缘基础架构中创建 GKE on Bare Metal 集群。
  3. 连接集群并向 Google Cloud 注册该集群。
  4. 在 GKE on Bare Metal 集群上部署示例销售终端应用工作负载。
  5. 使用 Google Cloud 控制台验证和监控在边缘位置运行的销售终端应用。
  6. 使用 Config Sync 更新在 GKE on Bare Metal 集群上运行的销售终端应用。

准备工作

  1. 在 Google Cloud 控制台的“项目选择器”页面上,选择或创建 Google Cloud 项目

    转到项目选择

  2. 确保您的 Cloud 项目已启用结算功能。了解如何检查项目是否已启用结算功能

  3. 安装initialize Google Cloud CLI。

对 anthos-samples 代码库创建分支并进行克隆

本教程中使用的所有脚本都存储在 anthos-samples 代码库中。/anthos-bm-edge-deployment/acm-config-sink 下的文件夹结构根据 Config Sync 的预期进行组织。请先将此代码库克隆到您自己的 GitHub 账号,然后再继续执行以下步骤。

  1. 如果您还没有账号,请在 GitHub 上创建一个。

  2. 创建个人访问令牌,以在 Config Sync 配置中使用。在尝试同步新更改时,集群中的 Config Sync 组件需要通过 GitHub 帐号进行身份验证。

    1. 仅选择 public_repo 范围。
    2. 将您创建的访问令牌保存在安全的位置,以供稍后使用。
  3. anthos-samples 代码库创建一个到您自己的 GitHub 账号的分支:

    1. 转到 anthos-samples 代码库
    2. 点击页面右上角的 Fork(创建分支)图标。
    3. 点击要将代码库克隆到的 GitHub 用户帐号。系统会自动将您重定向到包含 anthos-samples 代码库分支版本的页面。
  4. 在本地环境中打开终端。

  5. 通过运行以下命令克隆分支代码库,其中 GITHUB_USERNAME 是您的 GitHub 账号的用户名:

    git clone https://github.com/GITHUB_USERNAME/anthos-samples
    cd anthos-samples/anthos-bm-edge-deployment
    

设置工作站环境

如需完成本文档中描述的边缘部署,您需要一个可访问互联网的工作站,并安装以下工具:

在本部分中配置的工作站上运行本教程中的所有命令。

  1. 在工作站上,在新的 shell 实例中初始化环境变量:

    export PROJECT_ID="PROJECT_ID"
    export REGION="us-central1"
    export ZONE="us-central1-a"
    
    # port on the admin Compute Engine instance you use to set up an nginx proxy
    # this allows to reach the workloads inside the cluster via the VM IP
    export PROXY_PORT="8082"
    
    # should be a multiple of 3 since N/3 clusters are created with each having 3 nodes
    export GCE_COUNT="3"
    
    # url to the fork of: https://github.com/GoogleCloudPlatform/anthos-samples
    export ROOT_REPO_URL="https://github.com/GITHUB_USERNAME/anthos-samples"
    
    # this is the username used to authenticate to your fork of this repository
    export SCM_TOKEN_USER="GITHUB_USERNAME"
    
    # access token created in the earlier step
    export SCM_TOKEN_TOKEN="ACCESS_TOKEN"
    

    替换以下值:

    • PROJECT_ID:您的 Google Cloud 项目 ID。
    • GITHUB_USERNAME:您的 GitHub 用户名。
    • ACCESS_TOKEN:您为 GitHub 代码库创建的个人访问令牌。

    让其他环境变量保留默认值。后续部分介绍了这些步骤。

  2. 在您的工作站上,初始化 Google Cloud CLI:

    gcloud config set project "${PROJECT_ID}"
    gcloud services enable compute.googleapis.com
    
    gcloud config set compute/region "${REGION}"
    gcloud config set compute/zone "${ZONE}"
    
  3. 在您的工作站上,为 Compute Engine 实例创建 Google Cloud 服务账号。此脚本会在 <REPO_ROOT>/anthos-bm-edge-deployment/build-artifacts/consumer-edge-gsa.json 中为新的服务账号创建 JSON 密钥文件。它还设置了 Cloud Key Management Service 密钥环和密钥以进行 SSH 私钥加密。

    ./scripts/create-primary-gsa.sh
    

    以下示例只是该脚本的一部分。如需查看完整脚本,请点击在 GitHub 上查看

    # ...
    EXISTS=$(gcloud iam service-accounts list \
      --filter="email=${GSA_EMAIL}" \
      --format="value(name, disabled)" \
      --project="${PROJECT_ID}")
    
    if [[ -z "${EXISTS}" ]]; then
      echo "GSA [${GSA_EMAIL}]does not exist, creating it"
    
      # GSA does NOT exist, create
      gcloud iam service-accounts create ${GSA_NAME} \
        --description="GSA used on each Target machine to make gcloud commands" \
        --display-name="target-machine-gsa" \
        --project "${PROJECT_ID}"
    else
      if [[ "${EXISTS}" =~ .*"disabled".* ]]; then
        # Found GSA is disabled, enable
        gcloud iam service-accounts enable "${GSA_EMAIL}" --project "${PROJECT_ID}"
      fi
      # otherwise, no need to do anything
    fi
    # ...

预配 Compute Engine 实例

在本部分中,您将创建将在其中安装 GKE on Bare Metal 的 Compute Engine 虚拟机。在继续安装部分之前,您还需要验证与这些虚拟机的连接。

  1. 在您的工作站上,创建用于 Compute Engine 实例之间通信的 SSH 密钥。

    ssh-keygen -f ./build-artifacts/consumer-edge-machine
    
  2. 使用 Cloud Key Management Service 加密 SSH 私钥。

    gcloud kms encrypt \
        --key gdc-ssh-key \
        --keyring gdc-ce-keyring \
        --location global \
        --plaintext-file build-artifacts/consumer-edge-machine \
        --ciphertext-file build-artifacts/consumer-edge-machine.encrypted
    
  3. 生成环境配置文件 .envrc 并获取该文件。创建后,请检查 .envrc 文件,以确保已将环境变量替换为正确的值。

    envsubst < templates/envrc-template.sh > .envrc
    source .envrc
    

    下面是一个通过替换 templates/envrc-template.sh 文件中的环境变量生成的 .envrc 文件的示例。请注意,突出显示了更新后的行:

    # GSA Key used for provisioning (result of running ./scripts/create-primary-gsa.sh)
    LOCAL_GSA_FILE=$(pwd)/build-artifacts/consumer-edge-gsa.json
    export LOCAL_GSA_FILE
    # GCP Project ID
    export PROJECT_ID="abm-edge-project"
    # Bucket to store cluster snapshot information
    export SNAPSHOT_GCS="abm-edge-project-cluster-snapshots"
    
    # GCP Project Region (Adjust as desired)
    export REGION="us-central1"
    # GCP Project Zone (Adjust as desired)
    export ZONE="us-central1-a"
    
    # Gitlab Personal Access Token credentials (generated in Quick Start step 2)
    export SCM_TOKEN_USER="LarryPage"
    export SCM_TOKEN_TOKEN="oo901Sp-FHuzmz__dgl0393atkf69c8L"
    
    # Default Root Repo setup for multiple locations
    export ROOT_REPO_URL="https://github.com/LarryPage/anthos-samples"
    export ROOT_REPO_BRANCH="main"
    export ROOT_REPO_DIR="/anthos-bm-edge-deployment/acm-config-sink"
    
    # OIDC Configuration (off by default)
    export OIDC_CLIENT_ID="" # Optional, requires GCP API setup work
    export OIDC_CLIENT_SECRET="" # Optional
    export OIDC_USER="" # Optional
    export OIDC_ENABLED="false" # Flip to true IF implementing OIDC on cluster

  4. 创建安装了 GKE on Bare Metal 的 Compute Engine 实例。

    ./scripts/cloud/create-cloud-gce-baseline.sh -c "$GCE_COUNT" | \
        tee ./build-artifacts/gce-info
    

使用 Ansible 安装 GKE on Bare Metal

本指南中使用的脚本通过三个 Compute Engine 实例组创建 GKE on Bare Metal 集群。创建的集群数量由 GCE_COUNT 环境变量控制。例如,将环境变量 GCE_COUNT 设置为 6,以创建两个 GKE on Bare Metal 集群,每个集群包含 3 个虚拟机实例。默认情况下,GCE_COUNT 环境变量设置为 3。因此,在本指南中,将创建一个包含 3 个 Compute Engine 实例的集群。虚拟机实例的命名方式为前缀 cnuc- 后跟数字。每个集群的第一个虚拟机实例都充当触发安装的管理员工作站。该集群还会获得与管理员工作站虚拟机相同的名称(例如 cnuc-1cnuc-4cnuc-7)。

Ansible 操作手册执行以下操作:

  • 使用必要的工具(例如 dockerbmctlgcloudnomos)配置 Compute Engine 实例。
  • 在已配置的 Compute Engine 实例中安装 GKE on Bare Metal。
  • 创建一个名为 cnuc-1 的 GKE on Bare Metal 独立集群。
  • 向 Google Cloud 注册 cnuc-1 集群。
  • 将 Config Sync 安装到 cnuc-1 集群中。
  • 将 Config Sync 配置为与分支代码库中位于 anthos-bm-edge-deployment/acm-config-sink 的集群配置同步。
  • 为集群生成 Login token

完成以下步骤以设置和开始安装过程:

  1. 在您的工作站上,创建用于安装的 Docker 映像。此映像包含安装过程所需的所有工具,例如 Ansible、Python 和 Google Cloud CLI。

    gcloud builds submit --config docker-build/cloudbuild.yaml docker-build/
    

    Build 成功运行后,会生成如下输出:

    ...
    latest: digest: sha256:99ded20d221a0b2bcd8edf3372c8b1f85d6c1737988b240dd28ea1291f8b151a size: 4498
    DONE
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    ID                                    CREATE_TIME                DURATION  SOURCE                                                                                         IMAGES                                                  STATUS
    2238baa2-1f41-440e-a157-c65900b7666b  2022-08-17T19:28:57+00:00  6M53S     gs://my_project_cloudbuild/source/1660764535.808019-69238d8c870044f0b4b2bde77a16111d.tgz  gcr.io/my_project/consumer-edge-install (+1 more)  SUCCESS
    
  2. 从模板生成 Ansible 库存文件。

    envsubst < templates/inventory-cloud-example.yaml > inventory/gcp.yaml
    
  3. 运行从之前构建的映像启动 Docker 容器的安装脚本。该脚本在内部使用 Docker 将含有卷装载的容器生成到当前工作目录。成功完成此脚本后,您必须进入所创建的 Docker 容器。您可以从此容器内触发 Ansible 安装。

    ./install.sh
    

    脚本成功运行后,会生成如下输出:

    ...
    Check the values above and if correct, do you want to proceed? (y/N): y
    Starting the installation
    Pulling docker install image...
    
    ==============================
    Starting the docker container. You will need to run the following 2 commands (cut-copy-paste)
    ==============================
    1: ./scripts/health-check.sh
    2: ansible-playbook all-full-install.yaml -i inventory
    3: Type 'exit' to exit the Docker shell after installation
    ==============================
    Thank you for using the quick helper script!
    (you are now inside the Docker shell)
    
  4. 在 Docker 容器中,验证对 Compute Engine 实例的访问权限。

    ./scripts/health-check.sh
    

    脚本成功运行后,会生成如下输出:

    ...
    cnuc-2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
    cnuc-3 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
    cnuc-1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
    
  5. 从 Docker 容器内部运行 Ansible 操作手册,以便在 Compute Engine 实例上安装 GKE on Bare Metal。完成后,您将在屏幕上看到集群的 Login Token

    ansible-playbook all-full-install.yaml -i inventory | tee ./build-artifacts/ansible-run.log
    

    安装成功运行后,会生成如下输出:

    ...
    TASK [abm-login-token : Display login token] **************************************************************************
    ok: [cnuc-1] => {
        "msg": "eyJhbGciOiJSUzI1NiIsImtpZCI6Imk2X3duZ3BzckQyWmszb09sZHFMN0FoWU9mV1kzOWNGZzMyb0x2WlMyalkifQ.eymljZS1hY2NvdW
    iZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImVkZ2Etc2EtdG9rZW4tc2R4MmQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2Nvd
    4CwanGlof6s-fbu8"
    }
    skipping: [cnuc-2]
    skipping: [cnuc-3]
    
    PLAY RECAP ***********************************************************************************************************
    cnuc-1                     : ok=205  changed=156  unreachable=0    failed=0    skipped=48   rescued=0    ignored=12
    cnuc-2                     : ok=128  changed=99   unreachable=0    failed=0    skipped=108  rescued=0    ignored=2
    cnuc-3                     : ok=128  changed=99   unreachable=0    failed=0    skipped=108  rescued=0    ignored=2
    

在 Google Cloud 控制台中登录 GKE on Bare Metal 集群

在 Ansible Playbook 运行完成后,系统会在 Compute Engine 虚拟机内安装一个独立的 GKE on Bare Metal 集群。此集群还使用 Connect Agent 向 Google Cloud 注册。但是,要查看此集群的详细信息,您必须从 Google Cloud 控制台登录该集群。如需登录 GKE 集群,请完成以下步骤。

  1. 从上一部分中的 Ansible playbook 的输出中复制令牌。

  2. 在 Google Cloud 控制台中,前往 Kubernetes 集群页面,使用复制的令牌登录 cnuc-1 集群。

    转到“Kubernetes 集群”页面

    1. 在集群列表中,点击 cnuc-1 集群旁边的 操作,然后点击登录
    2. 选择令牌,然后粘贴复制的令牌。
    3. 点击 Login(登录)。
  3. 在 Google Cloud 控制台中,前往功能部分下的配置页面。

    前往“配置”

  4. 软件包标签页上,检查集群表中的同步状态列。确认状态为已同步“Synced”状态表示 Config Sync 已成功将您的 GitHub 配置与部署的集群 cnuc-1 同步。

为外部流量配置代理

在前面步骤中安装的 GKE on Bare Metal 集群使用名为 MetalLB 的捆绑式负载均衡器。此负载均衡器服务只能通过虚拟私有云 (VPC) IP 地址访问。如需将通过外部 IP 传入的流量路由到捆绑的负载均衡器,请在管理员主机 (cnuc-1) 中设置反向代理服务。借助此反向代理服务,您可以通过管理员主机的外部 IP (cnuc-1) 访问销售终端应用的 API 服务器。

前面步骤中的安装脚本在管理员主机中安装了 NGINX 以及示例配置文件。更新此文件以使用负载均衡器服务的 IP 地址并重启 NGINX。

  1. 在您的工作站上,使用 SSH 登录管理员工作站:

    ssh -F ./build-artifacts/ssh-config abm-admin@cnuc-1
    
  2. 从管理员工作站内,设置 NGINX 反向代理,以将流量路由到 API 服务器负载均衡器服务。获取负载均衡器类型 Kubernetes 服务的 IP 地址:

    ABM_INTERNAL_IP=$(kubectl get services api-server-lb -n pos | awk '{print $4}' | tail -n 1)
    
  3. 使用提取的 IP 地址更新模板配置文件:

    sudo sh -c "sed 's/<K8_LB_IP>/${ABM_INTERNAL_IP}/g' \
        /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf"
    
  4. 重启 NGINX 以确保应用新配置:

    sudo systemctl restart nginx
    
  5. 检查并验证 NGINX 服务器的状态报告“活动(正在运行)”:

    sudo systemctl status nginx
    

    NGINX 成功运行时,它会生成类似于如下示例的输出:

    ● nginx.service - A high performance web server and a reverse proxy server
        Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
        Active: active (running) since Fri 2021-09-17 02:41:01 UTC; 2s ago
        Docs: man:nginx(8)
        Process: 92571 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
        Process: 92572 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Main PID: 92573 (nginx)
        Tasks: 17 (limit: 72331)
        Memory: 13.2M
        CGroup: /system.slice/nginx.service
                ├─92573 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
                ├─92574 nginx: worker process
                ├─92575 nginx: worker process
                ├─92577 nginx: ....
                ...
                ...
    
  6. 从 SSH 会话退出到管理员工作站:

    exit
    
  7. 从 shell 会话退出到 Docker 容器中。退出管理员实例后,您仍然位于用于安装的 Docker 容器中:

    exit
    

访问销售终端应用

通过外部代理设置,您可以访问在 GKE 集群内运行的应用。如需访问示例销售点应用,请完成以下步骤。

  1. 在您的工作站上,获取管理员 Compute Engine 实例的外部 IP 地址,并访问销售终端应用的界面:

    EXTERNAL_IP=$(gcloud compute instances list \
        --project ${PROJECT_ID} \
        --filter="name:cnuc-1" \
        --format="get(networkInterfaces[0].accessConfigs[0].natIP)")
    echo "Point the browser to: ${EXTERNAL_IP}:${PROXY_PORT}"
    

    脚本成功运行后,会生成如下输出:

    Point the browser to: 34.134.194.84:8082
    
  2. 打开网络浏览器并导航至在上一个命令输出中显示的 IP 地址。您可以访问并测试销售终端应用示例,如以下示例屏幕截图所示:

    部署了销售终端应用的版本 1

使用 Config Sync 更新 API 服务器

通过更新根代码库中的配置文件,可以将示例应用升级到较新版本。Config Sync 会检测更新并自动对集群进行更改。在此示例中,根代码库是您在本指南开头克隆的 anthos-samples 代码库。如需查看示例销售终端应用如何升级到较新版本,请完成以下步骤。

  1. 在您的工作站上,更新 image 字段以将 API 服务器版本从 v1 更改为 v2。部署的 YAML 配置位于 anthos-bm-edge-deployment/acm-config-sink/namespaces/pos/api-server.yaml 处的文件中。

    containers:
    - name: api-server
      image: us-docker.pkg.dev/anthos-dpe-abm-edge-pos/abm-edge-pos-images/api-server:v1
  2. 添加、提交更改并将更改推送到分支代码库:

    git add acm-config-sink/namespaces/pos/api-server.yaml
    git commit -m "chore: updated api-server version to v2"
    git push
    
  3. 在 Google Cloud 控制台中,转到 Config Management 页面以查看配置规范状态。验证状态是否为已同步

    转到 Config Management 页面

  4. 在 Google Cloud 控制台中,转到 Kubernetes Engine 工作负载页面,以验证 Deployment 是否已更新。

    转到 Kubernetes Engine“工作负载”页面

  5. 部署的状态为正常时,请将浏览器指向上一部分中的 IP 地址,以查看销售终端应用。请注意,标题中的版本显示“V2”,这表示您的应用更改已部署,如以下示例屏幕截图所示:

    部署了销售终端应用第 2 版

    您可能必须强制刷新浏览器标签页才能看到更改。

清理

为避免产生不必要的 Google Cloud 费用,请在使用本指南后删除本指南使用的资源。您可以手动删除这些资源,也可以删除 Google Cloud 项目,此操作也会清除所有资源。此外,您可能还需要清理在本地工作站中所做的更改:

本地工作站

必须更新以下文件以清除安装脚本所做的更改。

  • 移除添加到 /etc/hosts 文件的 Compute Engine 虚拟机 IP 地址。
  • 移除 ~/.ssh/config 文件中 cnuc-* 的 SSH 配置。
  • ~/.ssh/known_hosts 文件中移除 Compute Engine 虚拟机指纹。

删除项目

如果您为此过程创建了一个专用项目,请从 Google Cloud 控制台中删除该 Google Cloud 项目。

  • In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  • In the project list, select the project that you want to delete, and then click Delete.
  • In the dialog, type the project ID, and then click Shut down to delete the project.
  • 手动

    如果您在此过程中使用了现有项目,请执行以下操作:

    • 取消注册名称前缀为 cnuc- 的所有 Kubernetes 集群。
    • 删除名称前缀为 cnuc- 的所有 Compute Engine 虚拟机。
    • 删除名称前缀为 abm-edge-boot 的 Cloud Storage 存储桶。
    • 删除防火墙规则 allow-pod-ingressallow-pod-egress
    • 删除 Secret Manager Secret install-pub-key

    后续步骤

    您可以通过添加其他边缘位置来扩展本指南。将 GCE_COUNT 环境变量设置为 6 并重新运行与前面部分相同的步骤,即会创建三个新的 Compute Engine 实例(cnuc-4cnuc-5cnuc-6)以及一个名为 cnuc-4 的新 GKE on Bare Metal 独立集群。

    您还可以尝试更新分支代码库中的集群配置,选择性地使用 ClusterSelectors 将销售终端应用的不同版本应用于两个集群(cnuc-1cnuc-4)。

    如需详细了解本指南中的各个步骤以及所涉及的脚本,请参阅 anthos-samples 代码库。