kubernetes集群中搭建registry的重要性就多说了,大家都懂的:),我们这样干:
下载k8s安装包解压,registry相关文件在 kubernetes/cluster/addons/registry 文件夹下面,用TLS方式部署。普通方式需要修改docker的启动参数和重启docker,线上环境这么折腾不太合适。
步骤基本按照目录下的 README.md 说明文档进行:
1、用本地文件的方式创建secret,registry容器后面会挂载secret资源里面的证书文件。证书是机构颁发证书的nginx使用的版本,我试了很多种自签证书的方法,到最后都是通不过,手上有机构颁布的证书何乐而不为,域名是reg.mydomain.com。
kubectl –namespace=kube-system create secret generic registry-tls-secret –from-file=reg.mydomain.com.crt=reg.mydomain.com.crt –from-file=reg.mydomain.com.key=reg.mydomain.com.key
注意:在执行命令的当前目录下有reg.mydomain.com.crt和reg.mydomain.com.key证书文件,不然需要指定路径。
创建完成后,可以查看刚创建的名为registry-tls-secret的secret资源:
kubectl describe secret registry-tls-secret --namespace kube-system Name: registry-tls-secret Namespace: kube-system Labels: <none> Annotations: <none> Type: Opaque Data ==== reg.mydomain.com.crt: 6486 bytes reg.mydomain.com.key: 1678 bytes
还需要将reg.hoodinn.com.crt证书拷贝到集群每个node的/etc/docker/certs.d/reg.mydomain.com/ 目录下。
2、获取registry 镜像,需要该节点有公网IP,kubernetes调度器通过一系列的算法计算出pod调度部署到某node节点,没有确定性。那么需要在每个节点都pull registry 镜像,但是集群内部的node基本都是没有公网IP的,可以用 docker save 和 docker load 一番腾挪让每个节点都有registry镜像。
docker pull registry:2 docker save -o registry2.tar registry:2 docker load –input registry2.tar
当然了还有更简单的方法,不需要每个节点都有registry镜像,就是kubernetes可以根据node的标签,将pod调度到指定的node上面,先给node打标签,然后创建pod的rc文件加入nodeSelector定义即可。
3、创建pod和service
kubernetes安装包kubernetes/cluster/addons/registry/tls 目录下面有对应的说明文档和yaml文件。 ➜ tls ls README.md registry-tls-rc.yaml registry-tls-svc.yaml ➜ tls
rc文件我按需求修改了3处地方,证书的公私钥文件名与registry-tls-secret中定义的一致:
- name: REGISTRY_HTTP_TLS_CERTIFICATE value: /certs/reg.mydomain.com.crt - name: REGISTRY_HTTP_TLS_KEY value: /certs/reg.mydomain.com.key
挂载点image-store挂载的卷默认用的是node的本地文件系统,由于pod运行节点不固定性(可以指定pod运行的node,但是不够灵活,如果指定的node只有一个,那么就会有单节点故障问题,如果大于2个可选node,那么本地文件系统提交的image怎么转移),挂载卷采用了ceph集群提供的rdb块设备,这样就可以解决以上问题了。
- name: image-store rbd: monitors: - 10.8.8.18:6789 - 10.8.8.28:6789 - 10.8.8.38:6789 pool: rbd image: dockreg user: admin keyring: "/etc/ceph/ceph.client.admin.keyring" fsType: ext4 readOnly: false
svc文件修改了一处地方,就是加入clusterIP定义固定registry的IP地址。
spec: clusterIP: 10.123.123.88 最后用kubectl由文件创建rc和svc。 kubectl create -f registry-tls-rc.yaml kubectl create -f registry-tls-svc.yaml
4、每个节点本地hosts文件加入reg.mydomain.com的记录,就可以用于pull和push仓库中的镜像(pull和push的url是reg.hoodinn.com:5000)。
评论前必须登录!
注册