×

请使用以下部分中的说明来访问注册表,包括查看日志和指标,以及保护和公开注册表。

您可以直接访问注册表以调用podman命令。这允许您使用诸如podman pushpodman pull之类的操作直接将镜像推送到集成注册表或从中拉取镜像。为此,您必须使用podman login命令登录到注册表。您可以执行的操作取决于您的用户权限,如下节所述。

先决条件

  • 您作为具有cluster-admin角色的用户可以访问集群。

  • 您必须已配置身份提供商 (IDP)。

  • 对于拉取镜像(例如,使用podman pull命令时),用户必须具有registry-viewer角色。要添加此角色,请运行以下命令

    $ oc policy add-role-to-user registry-viewer <user_name>
  • 对于写入或推送镜像(例如,使用podman push命令时)

    • 用户必须具有registry-editor角色。要添加此角色,请运行以下命令

      $ oc policy add-role-to-user registry-editor <user_name>
    • 您的集群必须具有一个现有的项目,可以将镜像推送到该项目。

直接从集群访问注册表

您可以从集群内部访问注册表。

步骤

使用内部路由从集群访问注册表

  1. 通过获取节点名称来访问节点

    $ oc get nodes
    $ oc debug nodes/<node_name>
  2. 要启用对节点上的ocpodman等工具的访问,请将根目录更改为/host

    sh-4.2# chroot /host
  3. 使用您的访问令牌登录到容器镜像注册表

    sh-4.2# oc login -u kubeadmin -p <password_from_install_log> https://api-int.<cluster_name>.<base_domain>:6443
    sh-4.2# podman login -u kubeadmin -p $(oc whoami -t) image-registry.openshift-image-registry.svc:5000

    您应该看到一条确认登录的消息,例如

    Login Succeeded!

    您可以为用户名传递任何值;令牌包含所有必要信息。传递包含冒号的用户名将导致登录失败。

    由于 Image Registry Operator 创建了路由,因此它可能类似于default-route-openshift-image-registry.<cluster_name>

  4. 对您的注册表执行podman pullpodman push操作

    您可以拉取任意镜像,但如果您添加了system:registry角色,则只能将镜像推送到项目中的注册表。

    在以下示例中,使用

    组件

    <registry_ip>

    172.30.124.220

    <port>

    5000

    <project>

    openshift

    <image>

    image

    <tag>

    省略(默认为latest

    1. 拉取任意镜像

      sh-4.2# podman pull <name.io>/<image>
    2. 使用<registry_ip>:<port>/<project>/<image>格式标记新镜像。为了OpenShift Container Platform能够正确放置并在以后访问注册表中的镜像,项目名称必须出现在此拉取规范中。

      sh-4.2# podman tag <name.io>/<image> image-registry.openshift-image-registry.svc:5000/openshift/<image>

      您必须拥有指定项目的system:image-builder角色,该角色允许用户写入或推送镜像。否则,下一步中的podman push将失败。为了测试,您可以创建一个新项目来推送镜像。

    3. 将新标记的镜像推送到您的注册表

      sh-4.2# podman push image-registry.openshift-image-registry.svc:5000/openshift/<image>

      将镜像推送到内部注册表时,仓库名称必须使用<project>/<name>格式。在仓库名称中使用多个项目级别会导致身份验证错误。

检查注册表 Pod 的状态

作为集群管理员,您可以列出在openshift-image-registry项目中运行的镜像注册表 Pod 并检查其状态。

先决条件
  • 您作为具有cluster-admin角色的用户可以访问集群。

步骤
  • 列出openshift-image-registry项目中的 Pod 并查看其状态

    $ oc get pods -n openshift-image-registry
    示例输出
    NAME READY STATUS RESTARTS AGE
    image-registry-79fb4469f6-llrln 1/1 Running 0 77m
    node-ca-hjksc 1/1 Running 0 73m
    node-ca-tftj6 1/1 Running 0 77m
    node-ca-wb6ht 1/1 Running 0 77m
    node-ca-zvt9q 1/1 Running 0 74m

查看注册表日志

您可以使用oc logs命令查看注册表的日志。

步骤
  • 使用带有部署的oc logs命令查看容器镜像注册表的日志

    $ oc logs deployments/image-registry -n openshift-image-registry
    示例输出
    2015-05-01T19:48:36.300593110Z time="2015-05-01T19:48:36Z" level=info msg="version=v2.0.0+unknown"
    2015-05-01T19:48:36.303294724Z time="2015-05-01T19:48:36Z" level=info msg="redis not configured" instance.id=9ed6c43d-23ee-453f-9a4b-031fea646002
    2015-05-01T19:48:36.303422845Z time="2015-05-01T19:48:36Z" level=info msg="using inmemory layerinfo cache" instance.id=9ed6c43d-23ee-453f-9a4b-031fea646002
    2015-05-01T19:48:36.303433991Z time="2015-05-01T19:48:36Z" level=info msg="Using OpenShift Auth handler"
    2015-05-01T19:48:36.303439084Z time="2015-05-01T19:48:36Z" level=info msg="listening on :5000" instance.id=9ed6c43d-23ee-453f-9a4b-031fea646002

访问注册表指标

OpenShift Container Registry 提供了一个用于Prometheus 指标的端点。Prometheus 是一款独立的开源系统监控和警报工具包。

指标在注册表端点的/extensions/v2/metrics路径下公开。

步骤

您可以使用集群角色运行指标查询来访问指标。

集群角色

  1. 如果您还没有访问指标的集群角色,请创建一个。

    $ cat <<EOF | oc create -f -
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: prometheus-scraper
    rules:
    - apiGroups:
      - image.openshift.io
      resources:
      - registry/metrics
      verbs:
      - get
    EOF
  2. 将此角色添加到用户,运行以下命令

    $ oc adm policy add-cluster-role-to-user prometheus-scraper <username>

指标查询

  1. 获取用户令牌。

    openshift:
    $ oc whoami -t
  2. 在节点或 Pod 内运行指标查询,例如

    $ curl --insecure -s -u <user>:<secret> \ (1)
        https://image-registry.openshift-image-registry.svc:5000/extensions/v2/metrics | grep imageregistry | head -n 20
    示例输出
    # HELP imageregistry_build_info A metric with a constant '1' value labeled by major, minor, git commit & git version from which the image registry was built.
    # TYPE imageregistry_build_info gauge
    imageregistry_build_info{gitCommit="9f72191",gitVersion="v3.11.0+9f72191-135-dirty",major="3",minor="11+"} 1
    # HELP imageregistry_digest_cache_requests_total Total number of requests without scope to the digest cache.
    # TYPE imageregistry_digest_cache_requests_total counter
    imageregistry_digest_cache_requests_total{type="Hit"} 5
    imageregistry_digest_cache_requests_total{type="Miss"} 24
    # HELP imageregistry_digest_cache_scoped_requests_total Total number of scoped requests to the digest cache.
    # TYPE imageregistry_digest_cache_scoped_requests_total counter
    imageregistry_digest_cache_scoped_requests_total{type="Hit"} 33
    imageregistry_digest_cache_scoped_requests_total{type="Miss"} 44
    # HELP imageregistry_http_in_flight_requests A gauge of requests currently being served by the registry.
    # TYPE imageregistry_http_in_flight_requests gauge
    imageregistry_http_in_flight_requests 1
    # HELP imageregistry_http_request_duration_seconds A histogram of latencies for requests to the registry.
    # TYPE imageregistry_http_request_duration_seconds summary
    imageregistry_http_request_duration_seconds{method="get",quantile="0.5"} 0.01296087
    imageregistry_http_request_duration_seconds{method="get",quantile="0.9"} 0.014847248
    imageregistry_http_request_duration_seconds{method="get",quantile="0.99"} 0.015981195
    imageregistry_http_request_duration_seconds_sum{method="get"} 12.260727916000022
    1 <user>对象可以是任意的,但<secret>标签必须使用用户令牌。

其他资源