安装和管理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:
角色:网络服务器
模板:
元数据:
标签:
角色:网络服务器
规范:
容器:
—名称:前端
图片: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集群中配置一个秘密。该秘密包含您的Docker Hub登录数据,Kubernetes需要将这些数据连接到您的私有Docker Hub存储库。
您可以使用kubectl创建密匙(请确保根据需要指定Docker Hub登录凭据):Kubectl create secret docker-registry privatecred——docker-server=
在这个例子中,我们将我们的秘密privatecred命名为。
然后,要在Kubernetes中使用这个私有存储库中的映像部署应用程序,请在imagePullSecrets部分中创建一个部署文件,指定您的凭据秘密的名称:apiVersion: v1
:豆荚
元数据:
名称:private-reg
规范:
容器:
—name: private-reg-container
图片:<专用映像>
imagePullSecrets:
—名称:privatecred
最后,使用kubectl apply部署文件。
码头工人注册表
码头工人注册表是Docker开发的开源容器注册表。它不应该与Docker Hub混淆,后者是一个托管注册表;相反,Docker Registry是一种软件,你可以下载并安装在自己的服务器上。
运行Docker Registry最简单的方法就是将它部署为一个独立的容器。你可以用一个命令做到这一点:Docker运行命令-d -p 5000:5000——name registry注册表:2 .单击“确定”
您可以使用docker CLI实用程序将图像推入和拉入注册表。
如果你想使用这个本地注册表中的映像在Kubernetes集群中部署应用程序,你需要为私有注册表设置一个秘密,类似于我们在上面的Docker Hub示例中所做的。
首先,在Kubernetes中创建一个秘密:Kubectl create secret docker-registry privatecred——docker-server=localhost:5000——docker-username=
注意,我们将注册服务器指定为localhost:5000,这与我们启动Docker registry容器时使用的端口相匹配。
生成秘密后,你可以创建一个部署文件,将Kubernetes指向它:apiVersion: v1然后使用kubectl apply部署该文件。
:豆荚
元数据:
名称:private-reg
规范:
容器:
—name: private-reg-container
图片:<专用映像>
imagePullSecrets:
—名称:privatecred
码头
码头是一个最初由CoreOS(现在是Red Hat的一部分)创建的注册表,作为Docker Hub和Docker registry的替代方案。Quay的托管版本是可用的,但您也可以将Quay自己部署为私有的、自托管的注册中心。
最简单的方法是在Kubernetes集群中运行Quay。可以使用操作符.
首先,在集群中为Quay创建一个CatalogSource:Kubectl create -n openshift-marketplace -f ./bundle/ quayoperator .catalogsource.yaml
然后,使用以下命令部署Quay:Kubectl create -n
Quay提供了一个基于web的仪表板,您可以使用它来管理对Quay存储库的访问。为了将图像从Quay拉到Kubernetes,你需要创建一个秘密,并通过UI将其下载为YAML文件:
来源:https://docs.projectquay.io/use_quay.html
JFrog Artifactory
JFrog Artifactory可以作为容器注册表,以及所有类型的二进制文件和工件的自动化管理工具。这意味着您不仅可以将Artifactory用作Kubernetes注册表,还可以管理与应用程序开发和部署相关的所有对象和资源。2022世界杯阿根廷预选赛赛程
Artifactory可以在Kubernetes上安装,只需要使用Helm图表的几个命令:Helm repo添加jfrog https://charts.jfrog.io
Helm回购更新
Helm upgrade—install artifactory—命名空间artifactory jfrog/artifactory
要创建Kubernetes需要连接到Artifactory的秘密,运行如下命令:Kubectl创建秘密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
:部署
...
规范:
...
模板:
规范:
容器:
—image: my-artifactory.jfrog.io/default-docker-virtual/my-app:1.0.1
imagePullSecrets:
—名称:privatecred
现在,您可以使用托管在Kubernetes内部的Artifactory实例来管理图像和您选择的任何其他数据。
除了Artifactory通过其管理所有类型工件的能力提供的灵活性(其他主要Kubernetes注册表缺乏的特性),Artifactory还提供了一个用户友好的界面来创建存储库和管理其中的图像:
来源://www.si-fil.com/confluence/display/JFROG/Docker+Registry
充分利用Kubernetes注册表
尽管Kubernetes默认配置为使用公共Docker Hub存储库作为映像源,但这并不总是可取的。如果你需要部分或全部的Kubernetes应用程序是私有的,你需要配置一个私有注册中心解决方案,要么使用私有Docker Hub存储库,要么使用Artifactory这样的平台运行自己的私有注册中心。
