本页面介绍如何使用注册表镜像(而不是使用 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
拉取您的集群。
如果您不需要拉取操作的故障切换功能,则无需将 gcrKeyPath
或 gcr.io
添加到代理允许列表中。
更新注册表镜像端点、证书和拉取凭据
如需更新注册表镜像端点、证书或拉取凭据,请执行以下操作:
在集群配置文件中,更新端点、CA 证书文件和拉取凭据配置文件路径。
通过运行以下命令来应用更改:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
替换以下内容:
- 将 CLUSTER_NAME 替换为要更新的集群的名称。
- 将 ADMIN_KUBECONFIG 替换为其管理员集群的配置文件的路径。