OpenShift image registry 概述


0. 前言

docker 镜像管理之 overlay2 最佳实践 中介绍了 image 的底层逻辑联合文件系统和分层结构。

image 存储在 registry 中,对于不同平台使用 registry 的策略有所区别。本文基于 RedHat 的 OpenShift 平台,对 registry 做概述。大致介绍 openshift registry 的框架,详细了解可以参考:OpenShift Container Platform 4.9 Documentation

1. OpenShift image 实践

在 OpenShfit(OCP,Openshift Container Platform) 集群外执行 kubectl get route 以获取 openshift-image-registry namespace 下的 route:

[root@chunqiu ~]# kubectl get route -n openshift-image-registry --kubeconfig config
NAME            HOST/PORT                                     PATH   SERVICES         PORT    TERMINATION   WILDCARD
default-route   default-route-openshift-image-registry.apps          image-registry   <all>   reencrypt     None

其中,kubeconfig 选项的参数指定要访问的 OCP 集群,通过该配置完成集群的认证,鉴权。这里是在远端执行的访问操作,所以 kubeconfig 是需要的。

为什么查看 image registry 需要先看路由呢?接着往下看:

[root@chunqiu ~]# kubectl describe route default-route -n openshift-image-registry --kubeconfig config
Name:         default-route
Namespace:    openshift-image-registry
Kind:         Route
Spec:
  Host:  default-route-openshift-image-registry.apps
  Tls:
    Termination:  reencrypt
  To:
    Kind:           Service
    Name:           image-registry
    Weight:         100
  Wildcard Policy:  None
Status:
  Ingress:
    Conditions:
      Last Transition Time:     2021-09-18T02:16:01Z
      Status:                   True
      Type:                     Admitted
    Host:                       default-route-openshift-image-registry.apps
    Router Canonical Hostname:  router-default.apps
    Router Name:                default
...

route 路由定义了在集群外访问 Host default-route-openshift-image-registry.apps 的流量会转到 image-registry service。

OpenShift 为什么需要 Router 和 Route 详细介绍了 route, 关于 route 的理解可看这里

继续查看 service 绑定的 endpoint 是哪个 pod 的:

[root@chunqiu ~]# kubectl get service  -n openshift-image-registry --kubeconfig config
NAME                      TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)     AGE
image-registry            ClusterIP   172.30.0.1      <none>        5000/TCP    91d
image-registry-operator   ClusterIP   None            <none>        60000/TCP   95d

[root@chunqiu ~]# kubectl describe service image-registry -n openshift-image-registry --kubeconfig config
Name:              image-registry
Namespace:         openshift-image-registry

Type:              ClusterIP
IP:                172.30.0.1
Port:              5000-tcp  5000/TCP
TargetPort:        5000/TCP
Endpoints:         10.128.2.1:5000

[root@chunqiu ~]# kubectl get pods  -n openshift-image-registry --kubeconfig config -o wide | grep image-registry
cluster-image-registry-operator-6d456994f-djnnl   1/1     Running     12         17d     10.128.0.25   hzngdc-rm17-e1-02-master-00
image-registry-6849cd4476-47kq4                   1/1     Running     0          16d     10.128.2.1    hzngdc-rm17-e1-02-worker-13

可以看出,service 绑定的 Endpoint 是 pod image-registry-6849cd4476-47kq4 的 ip 地址,提供 registry 服务的实际上是该 pod。那么 push 的 image 又被存在哪里呢?查看该 pod 的描述:

[root@chunqiu ~]# kubectl describe pods image-registry-6849cd4476-47kq4 -n openshift-image-registry --kubeconfig config
Name:                 image-registry-6849cd4476-47kq4
Namespace:            openshift-image-registry
Volumes:
  registry-storage:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  registry-storage
    ReadOnly:   false

[root@chunqiu ~]# kubectl get pvc -n openshift-image-registry --kubeconfig config
NAME               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  AGE
registry-storage   Bound    pvc-03631962-4b9e-4913-a505-d732b9378157   120Gi      RWO            ocs-storagecluster-ceph-rbd   91d

从描述可以看出,提供 image registry 的服务绑定到 pvc registry-storage 上,该 pvc 的容量为 120Gi,push 的 image 将存储在这个 pvc。

至此,基本上这个框架已经清楚了,给出简易流程图如下:

OpenShift image registry 概述


上一篇:再见 2020,你好 2021!


下一篇:PHP经典高级工程师面试题