ARTIFACTORY:安装和管理Kubernetes注册表
Kubernetes可以做很多事情:调度节点上的应用程序,监视节点的健康状况,尝试自动解决应用程序问题等等。
但是Kubernetes本身没有做的一件事是为托管容器映像(其中包含您想要部署在Kubernetes上的应用程序)提供注册表。相反,Kubernetes希望您使用外部解决方案来存储和共享容器映像。
有多种Kubernetes注册表为了帮助您决定在Kubernetes中使用哪个注册表,本文研究了几个最流行的与Kubernetes兼容的容器注册表,并解释了如何将每个注册表与Kubernetes集成。
Kubernetes注册表是什么?
在深入研究可以与Kubernetes一起使用的注册表示例之前,让我们弄清楚术语“Kubernetes注册表”是什么意思,它是可以与Kubernetes一起使用的容器注册表。
容器注册中心是存储容器映像并在请求时提供它们的应用程序或服务。大多数容器注册表不是专门为Kubernetes设计的;它们只是为任何需要它们的系统存储容器映像。
同样,Kubernetes本身没有内置注册表功能(尽管一些Kubernetes发行版,如Red Hat OpenShift,附带了集成的注册表,托管在Kubernetes集群中)。在大多数情况下,由用户决定使用哪个注册表(或注册表)来为他们想要使用Kubernetes部署的应用程序托管容器映像,然后将这些注册表连接到Kubernetes。
使用Kubernetes提取图像
当你为Kubernetes设置注册表时,当你想要运行应用程序时,Kubernetes将从中下载容器映像。如果你是一个开发人员,你也可以上传图片到你的注册表,以便让它们对Kubernetes可用,尽管你不会使用Kubernetes来执行上传;你会使用一个单独的工具,比如Docker。
与其他容器工具不同,Kubernetes不要求用户在使用容器映像之前将它们“拉”到本地系统。在Kubernetes中,您可以通过创建部署来下载映像并从映像中运行应用程序,部署是一个YAML文件,它告诉Kubernetes要使用哪个或哪个容器映像。(YAML文件还可以指定一些额外的配置数据,例如为容器公开哪个网络端口。)
例如,如果你想运行一个基于Apache HTTPD Web Server容器镜像的应用程序,你首先要创建一个像这样的部署文件:apiVersion:应用程序/ v1
:部署
元数据:
名称:apache配置
标签:
角色:网络服务器
规范:
副本:4
选择器:
matchLabels:
角色:网络服务器
模板:
元数据:
标签:
角色:网络服务器
规范:
容器:
—name:前端
图片:httpd
港口:
—containerPort: 80
然后使用kubectl apply命令部署该文件,例如:Kubectl apply -f your_deployment_file.yml
Kubernetes注册表的类型
在Kubernetes中使用容器注册表有三种主要方式:
- 外部公共注册表:外部公共注册表是一个公开可用的注册表,比如Docker Hub,它托管在Kubernetes集群之外。
- 外部私有注册表:外部私有注册表一般不对公众开放,并且不托管在Kubernetes安装中。你可以选择让你的注册表只在你的本地网络上可用,或者可能设置一个Docker注册表实例,你部署在自己的容器中,独立于你的Kubernetes集群,或者你可以设置一个私有存储库作为公共注册表服务的一部分,比如Docker Hub。
- 私有内部注册表:私有内部注册表是您在Kubernetes集群中设置和托管的注册表。这意味着注册表软件与部署在Kubernetes中的其他应用程序一起运行。
外部公共注册中心是使注册中心对Kubernetes可用的最简单的方法。您不需要担心配置秘密(从私有注册表提取映像所需的访问信息)或自己设置注册表。
另一方面,如果您不希望容器映像对公众开放,而是希望选择用户在他们自己的Kubernetes集群上部署,那么私有注册表是必要的。如上所述,您可以在Kubernetes之外设置一个私有注册表,这是有利的,因为注册表的问题不会影响您的Kubernetes环境,但您也可以在Kubernetes本身中托管一个注册表。
默认的Kubernetes注册表
当人们谈论“默认的Kubernetes注册表”时,他们通常指的是Docker Hub。这是因为,默认情况下,Kubernetes假定您的映像托管在Docker Hub中,除非您在创建部署时另行指定。
例如,考虑这个部署文件:apiVersion:应用程序/ v1
:部署
元数据:
名称:nginx-deployment
规范:
选择器:
matchLabels:
应用:nginx
模板:
元数据:
标签:
应用:nginx
规范:
容器:
—名称:nginx
图片:nginx: 1.14.2
它告诉Kubernetes使用名为NGINX:1.14.2的映像来运行NGINX。由于没有指定关于注册表名称或在何处查找映像的其他信息,Kubernetes将假定该映像公开托管在Docker Hub上。
所以,虽然Docker Hub不是Kubernetes的一部分,但Kubernetes可以默认连接到它,而不需要任何额外的信息,这使得它成为Kubernetes的“默认”注册表。
5个流行的Kubernetes注册表
现在我们知道了Kubernetes注册表是如何工作的,让我们来看看可以与Kubernetes一起使用的一些流行的容器注册表。
码头工人中心
如上所述,Docker Hub是Kubernetes默认配置使用的容器注册表。这意味着你不需要做任何事情来使用Docker Hub作为Kubernetes注册表——只要你想要下载和运行的映像存储在公共Docker Hub存储库中,至少(这意味着存储库对公众开放,不需要任何登录)。
要在Kubernetes中使用私有Docker Hub存储库,你必须在Kubernetes集群中配置一个secret。这个秘密包含你的Docker Hub登录数据,Kubernetes需要连接到你的私有Docker Hub存储库。
你可以使用kubectl来创建secret(一定要根据需要指定你的Docker Hub登录凭据):——docker-server=< your-name>——docker-password=
在本例中,我们将秘密命名为privatecred。
然后,要使用这个私有存储库中的映像在Kubernetes中部署应用程序,请创建一个部署文件,在imagePullSecrets部分中指定您的凭据秘密的名称:apiVersion: v1
:豆荚
元数据:
名称:private-reg
规范:
容器:
—name: private-reg-container
图片:<专用映像>
imagePullSecrets:
—name: privatecred
最后,使用kubectl apply部署文件。
码头工人注册表
码头工人注册表是一个由Docker开发的开源容器注册表。它不应该与Docker Hub混淆,后者是一个托管注册表;相比之下,Docker Registry是一种可以下载并安装在自己服务器上的软件。
运行Docker Registry最简单的方法就是将其部署为一个独立的容器。你可以用一个命令做到这一点:Docker运行-d -p 5000:5000——name registry registry
您可以使用docker CLI实用程序将映像推入和拉入注册表。
如果你想使用这个本地注册表中的映像在Kubernetes集群中部署应用程序,你需要为私有注册表设置一个秘密,类似于我们在上面的Docker Hub示例中所做的。
首先,在Kubernetes中创建一个secret:——docker-server=localhost:5000——docker-username=
注意,我们将注册服务器指定为localhost:5000,这与我们启动Docker registry容器时使用的端口相匹配。
生成secret之后,你可以创建一个部署文件,将Kubernetes指向它:apiVersion: v1然后使用kubectl apply部署该文件。
:豆荚
元数据:
名称:private-reg
规范:
容器:
—name: private-reg-container
图片:<专用映像>
imagePullSecrets:
—name: privatecred
码头
码头是一个注册表,最初是由CoreOS(现在是Red Hat的一部分)创建的,作为Docker Hub和Docker registry的替代品。Quay的托管版本是可用的,但是您也可以将Quay自己部署为私有的、自托管的注册表。
最简单的方法是在Kubernetes集群中运行Quay。您可以使用操作符。
首先,在您的集群中为Quay创建一个CatalogSource:Kubectl创建-n openshift-marketplace -f ./bundle/ quayoperator .catalogsource.yaml
然后,部署Quay:-f ./config/samples/managed.quayregistry.yaml
Quay提供了一个基于web的指示板,您可以使用它来管理对Quay存储库的访问。要将图像从Quay拉到Kubernetes中,你需要创建一个secret,并通过UI将其作为YAML文件下载:
来源:https://docs.projectquay.io/use_quay.html
JFrog Artifactory
JFrog Artifactory可以作为容器注册中心,以及所有类型的二进制文件和工件的自动化管理工具。这意味着您不仅可以将Artifactory用作Kubernetes注册表,还可以管理与应用程序开发和部署相关的所有对象和资源。2022世界杯阿根廷预选赛赛程
Artifactory可以在Kubernetes上安装,只需使用Helm charts的几个命令:Helm repo添加jfrog https://charts.jfrog.io
Helm回购更新
安装artifactory——命名空间artifactory jfrog/artifactory
要创建Kubernetes连接Artifactory所需的秘密,运行如下命令:Kubectl创建secret docker-registry privatecred
——docker-server = my-artifactory.jfrog。io \
——docker-username =只读\
——docker-password = my-super-secret-pass \
——docker-email = johndoe@example.com \
- n my-app-ns
然后,只需将secret指令添加到部署文件中:apiVersion:应用程序/ v1
:部署
…
规范:
…
模板:
规范:
容器:
-镜像:my-artifactory.jfrog.io/default-docker-virtual/my-app:1.0.1
imagePullSecrets:
—name: privatecred
现在,您可以使用托管在Kubernetes中的Artifactory实例来管理图像和您选择的任何其他数据。
Artifactory通过管理所有类型的工件(这是其他主要Kubernetes注册表所缺乏的功能)提供的灵活性之外,Artifactory还提供了一个用户友好的界面,用于创建存储库和管理其中的映像:
来源://m.si-fil.com/confluence/display/JFROG/Docker+Registry
充分利用Kubernetes注册表
虽然Kubernetes默认配置为使用公共Docker Hub存储库作为其镜像源,但这并不总是理想的。如果你需要一些或所有的Kubernetes应用程序是私有的,你需要配置一个私有注册表解决方案,要么使用私有Docker Hub存储库,要么在Artifactory这样的平台上运行你自己的私有注册表。
