使用注册表镜像在裸金属上安装 Anthos 集群

本页面介绍如何使用注册表镜像(而不是使用 gcr.io)安装 Anthos clusters on Bare Metal。如需使用注册表镜像,您必须将容器运行时设置为 containerd

注册表镜像将被指定为镜像整个 gcr.io,而不只是 gcr.io/anthos-baremetal-release/,后者是通常用来存储 Anthos clusters on Bare Metal 映像的位置。

例如,如果您尝试拉取映像 gcr.io/kubernetes-e2e-test-images/nautilus:1.0,则只有当注册表服务在完全相同的路径(例如 172.18.0.20:5000/kubernetes-e2e-test-images/nautilus:1.0)中具有该映像时,此操作才有效。所有非 gcr.io 映像仍可正常使用,例如,您仍然可以拉取 k8s.gcr.io/pause:3.1

使用注册表镜像可节省流量,并在您需要将集群从 gcr.io 服务中断环境隔离出来时提供使用 gcr.io 的替代方案。您还可以自行执行漏洞扫描。

准备工作

  • 您必须在网络中设置容器注册表服务器。
  • 如果您的注册表服务器运行专用 TLS 证书,则您必须拥有证书授权机构 (CA) 文件。
  • 如果您的注册表服务器需要身份验证,则您必须具有适当的登录凭据或 Docker 配置文件。

下载 Anthos clusters on Bare Metal 的所有必需映像

下载页面下载最新版本的 bmctl 工具和映像软件包。

将容器映像上传到您的注册表服务器

通过运行以下命令将映像软件包中的映像上传到您的注册表服务器:

[HTTPS_PROXY=http://PROXY_IP:PORT] ./bmctl push images \
    --source=./bmpackages_1.8.0.tar.xz \
    --private-registry=REGISTRY_IP:PORT \
    [--cacert=CERT_PATH] \
    [--need-credential=false]

替换以下内容:

  • PROXY_IP:PORT 替换为代理的 IP 地址和端口(如果您需要使用代理来将映像从工作站上传到注册表服务器)。
  • REGISTRY_IP:PORT 替换为专用注册表服务器的 IP 地址和端口。
  • CERT_PATH 替换为 CA 证书文件的路径(如果您的注册表服务器使用专用 TLS 证书)。

出现提示时,输入您的用户名和密码,或选择 Docker 配置文件。如果您的注册表服务器不需要凭据,请指定 --need-credential=false

如需详细了解 bmctl push images 命令,请运行以下命令:

bmctl push images --help

使用您自己的命名空间

如果您想要在注册表服务器中使用您自己的命名空间(而非根命名空间),则可在 registryMirrors.endpoint 中提供您的私有注册表的 API 端点,以便系统可以从此子命名空间拉取 containerd。端点通常采用 <REGISTRY_IP:PORT>/v2/<NAMESPACE> 格式。请参阅私有注册表的用户指南,以了解特定详细信息。

例如,如果您只拥有 172.18.0.20:5000/test-namespace/ 的访问权限,则可以使用以下命令上传命名空间 test-namespace 下的所有映像:

./bmctl push images \
    --source=./bmpackages_1.8.0.tar.xz \
    --private-registry=172.18.0.20:5000/test-namespace
    --username=<USERNAME>
    --password=<PASSWORD>
    --cacert <path/to/cert.crt>

然后,您可以在集群 YAML 文件中输入以下内容,以从子命名空间拉取 containerd

registryMirrors:
  - endpoint: https://172.18.0.20:5000/v2/test-namespace

从注册表镜像创建集群

以下示例集群配置文件将使用您自己的注册表镜像服务器(而不是使用 gcr.io)。

如果您的注册表不需要专用 TLS 证书,则可以将 caCertPath 字段留空。

如果您的注册表服务器不需要身份验证 Docker 配置文件,则可以将 pullCredentialConfigPath 字段留空。

如需详细了解如何创建集群,请参阅创建集群

# Sample cluster config with registry mirror:
---
gcrKeyPath: /bmctl/bmctl-workspace/.sa-keys/my-gcp-project-anthos-baremetal-gcr.json
sshPrivateKeyPath: /root/ssh-key/id_rsa
registryMirrors:
  - endpoint: https://172.18.0.20:5000
    caCertPath: /root/ca.crt
    pullCredentialConfigPath: /root/.docker/config.json
---
apiVersion: v1
kind: Namespace
metadata:
  name: cluster-admin1
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
  name: admin1
  namespace: cluster-admin1
spec:
  nodeConfig:
    containerRuntime: containerd
...

此集群中的所有节点都将使用此注册表镜像 172.18.0.20:5000(而不是使用 gcr.io)。

故障切换到 gcr.io

如果无法从注册表镜像拉取您的集群,它将自动故障切换到 gcr.io。因此,我们建议在集群配置文件中提供 gcrKeyPath 的值。如果未提供该值,则在注册表镜像失败的情况下,将无法从 gcr.io 拉取您的集群。

如果您不需要拉取操作的故障切换功能,则无需将 gcrKeyPathgcr.io 添加到代理允许列表中。

更新注册表镜像端点、证书和拉取凭据

如需更新注册表镜像端点、证书或拉取凭据,请执行以下操作:

  1. 在集群配置文件中,更新端点、CA 证书文件和拉取凭据配置文件路径。

  2. 通过运行以下命令来应用更改:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    替换以下内容:

    • CLUSTER_NAME 替换为要更新的集群的名称。
    • ADMIN_KUBECONFIG 替换为其管理员集群的配置文件的路径。