本文是使用Rancher部署JFrog Artifactory的续集。本文中我们将演示如何把 JFrog Artifctory 作为你 Docker 镜像的私有仓库。
注意: 使用 JFrog Artifactory 的功能前需要获得证书, 不过你可以先选择试用 30 天 ,然后继续按照下文的流程操作。
##为部署工作准备 GCP
如果你想在本地网络以外的地方使用 Artifactory,首先要有一个公有 IP 地址。在这一系列文章的上篇中,我们将集群部署到谷歌云,本文中我们将继续使用 GCP 资源。当然,你要使用其他公有云都是一样的。
你可以通过谷歌云 Shell 或者 gcloud 命令在本地环境中运行下面的命令,申请公共 IP:
输入名称用于取回 IP 地址(此次教程中我们取的名字是 artifactory-demo)
在 output 中查找 address 标签
为了给我们的部署服务获得满足需求的域名,我们将使用 Basecamp 的 xip.io 服务,在本教程中它的地址是 35.190.61.62.xip.io。
部署 Artifactory
你可以按照上一篇文章中的步骤来部署 Rancher 和 Artifactory,但是当你进入到应用程序部署页面中的配置部分时,还需要添加及修改下面的变量:
(可以复制/粘贴这块的文本到输入框里,Rancher 会自动转换)
一切完成后,应该会看到下面的样子:
点击 Launch 开始部署资源。
变量的概念解释
新 Artifactory 实例启动起来了,现在来看看刚刚我们都配置了什么。
ingress.enable=true
该变量允许创建一个 ingress 资源,它将作为 Artifactory 的代理,在我们的例子中,Ingresss 是带有 GCP 的负载均衡器。
ingress.hosts[0]=35.190.61.62.xip.io
这设置了 Artifactory 的主机名。xip.io 的一个神奇之处在于,我们可以创建任何子域并将其解析成 IP 地址,因此当我们使用 docker-demo.35.190.61.62.xip.io 时,在后面它都会被解析成 35.190.61.62。
artifactory.service.type=NodePort
在 Kubernetes 节点上的随机端口公开 Artifactory 的服务。Ingress 资源将向该端口发送流量。
nginx.enabled=false
我们是通过 Service 资源,利用 Ingress 和 Artifactory 进行通信的,因此我们希望禁止掉 nginx 代理,因为 Artifactory 在某些情况下会启动它。
ingress.annotations…
这就好比是将 Kubernetes 绑定到静态公共 IP 地址的粘合剂。我们将它设置成你保留的地址的名称,便于 Ingress 查找和使用正确的 IP。我们必须避免使用长长的内容,因为那是标注(annotations)的 name。如果不是这样的话,Kubernetes 可能会误解我们想要做什么。
检查部署
当部署完成后,查看 Workloads 选项卡。这里你会看到两个工作负载,一个是应用程序(artifactory-artifactory),另一个是 artifactory 使用的 PostgreSQL 数据库(artifactory-postgresql)
下一步查看 Load Balancing 选项卡,你会看到 Ingress 对象已经有了我们提供的主机名。
如果选择 View/Edit YAML 并滚动到下面,你可以看到指向 GCP 中地址名的标注(图片中的第 10 行)
在 Ingress 定义的下面你还可以看到 spec.rules.host 中的主机名匹配到了 status.loadBalancer.ingress.ip 的 IP 地址。
配置 Artifactory
关闭 View/Edit YAML 窗口,会返回 Load Balancing 选项卡,这里你可以看到一个带 xip.io 地址的链接。点开它打开 Artifactory,或者在浏览器中输入主机名。
单击 wizard,首先添加证书密钥,接着设置管理员密码。点击其余部分一直到 wizard 完成。
在左侧的菜单中,选择 Admin ,然后在 Repositories 下选择 Local 。
在这你可以看到经设置 wizard 后创建的默认仓库。在右上角选择+New 创建一个新的仓库,用 Docker 作为 package 类型,输入仓库的名称。在本例中,我们选择了 docker-demo,其余内容都使用的是默认值,然后选择 Save & Finish 来创建新的仓库。
这样一来,你选择的名称(即我们这里的 docker-demo)就成为了 xip.io 域名的子域。在我们此次的安装中,我们使用的是 docker-demo.35.190.61.62.xip.io。当然你配置的会和我不同,不过格式是相同的。
对镜像仓库进行测试
拥有了私有的 Docker 镜像仓库后,如果不使用它,那还有什么意义?
对生产部署,你将通过 SSL 证书来保护仓库的安全,这需要真实域名中的一个真实主机名。在本教程中,你可以直接使用新创建的仓库,不过要告诉 Docker 这是一个不安全的仓库。
按照文档创建或编辑 daemon.json:https://docs.docker.com/registry/insecure/。然后按照下面我的例子这样添加你的主机:
如果你使用的是 Windows 或者 Mac 的 Docker,在应用的偏好中进行设置:
重启 Docker 应用更改的内容,在启动之后,你就可以使用仓库:
继续我们的测试,pull 一个公共的容器镜像,re-tag 它,接着把它 push 到新的私有仓库中。
Pull 一个公共的容器镜像
Re-tag 镜像
你可以在系统中看到当前的镜像 id 和信息了:
Re-tag 它,这样 Docker 就知道要把它 push 到你的私有仓库了:
Push 镜像到私有仓库
当镜像有了 re-tag,使用 docker push 传到私有仓库:
在 Artifactory 中验证 Push
返回到 Artifactory UI,在菜单中选择 Artifacts:
这里就可以看到 nginx 镜像以及它的信息了。
下一步可以做什么
如果你有 Artifactory 的证书并且希望运行私有仓库,只需使用你自己的域名以及 ingress 上的 SSL 证书重复上面的教程即可。完成这些附加项之后,你就可以在任何 Docker 或者 Kubernetes 安装中使用私有仓库,而无需告诉主机它可能会出现和不安全仓库的通信。
清理
要想清理掉文中出现的资源,先从 Rancher 中删除 Kubernetes 集群,并且从 GCP 中删除 Rancher 服务器:
你还需要删除公共 IP 地址的分配:
结语
JFrog Artifactory 提供了用于开发生命周期核心部分的服务,你几乎可以存储和检索到开发团队产生的任何类型的工件,并把这些工件存在一个集中的、受管理的地方,这样对于任何 IP 基础设施,Artifactory 都是它重要的部分。
Rancher 可以轻松地将 Artifactory 部署到 Kubernetes 安装中。短短几分钟内,我们就创建并运行了 Artifactory,这安装所花费的时间甚至可能比实际上配置 Artifactory 本身所需的时间还短!
Rancher 的出现让 Kubernetes 更容易上手,Artifactory 更容易管理 binary 资源,把这两者结合起来,就能把你从繁琐的工序中解放出来,专注于你工作的中心,这种自由才是最重要的!
评论