k8s与harbor联合使用【k8s拉取harbor中镜像】

网友投稿 358 2022-10-25

k8s与harbor联合使用【k8s拉取harbor中镜像】

前提:已经搭建K8s集群、harbor服务,且已经在机器上配置可以从harbor中拉取上传镜像。 概要:要想k8s从harbor中拉取镜像,需要有harbor的用户、密码、服务器信息,然后在k8s指定namespace中创建docker-registry类型。 创建docker-registry,有两种方式,命令行和YAML第一种方式:命令行 kubectl create secret docker-registry test-deri-registry-secret --namespace=test-namespace \ --docker-server=hub.test.org.cn --docker-username=test2019 \ --docker-password=tests12019 --docker-email=admin@harbor.com 第二种方式:YAML,需要有一台已经成功登录过harbor服务器的机器,使用命令'cat ~/.docker/config.json',确认是否有harbor服务器的认证信息,例如 { "auths": { "hub.test.org.cn:443": { "auth": "YWRtaW46RGVxasdXXnsada" } }, "HttpHeaders": { "User-Agent": "Docker-Client/19.03.4 (linux)" } } 接下来k8s也可以直接使用该认证信息,使用命令'cat ~/.docker/config.json |base64 -w 0'将该认证信息BASE64编码【以下示例结果都是瞎写的,请使用自己返回的结果】。 [root@master ~]# cat .docker/config.json |base64 -w 0 ewoJImF1dGhzIjogewoJCSJodWIuZGVyaS5vcmcuY246NDQzIjogewoJCQkiYXV0aCI6ICJZV1J0YVc0NlJHVnlhU015TURFNSIKCHIUASDGUGDUGAUDUIAGDJIIGIUDZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTkSDISDhi7asd56523gHGSGH 编写test-registry-secret.yaml apiVersion: v1 kind: Secret metadata: name: test-registry-secret namespace: test-deri data: .dockerconfigjson: wraJImF1dGhzIjogeraJCSIxOTIuMTY4LjEzMC4yMyI6IHsKCQkJImF1dGgiOiAiYW5OaVpHVjJaV3h2Y0dWeU9rcHpZakV5TXpRMSIKCQl9Cgl9LAoJIkh0dHBIZWFkZXJzIjogewoJCSJVc2VyLUFnZW50IjogIkRvY2tlci1DbGllbnQvMTguMDkuMiAobGludXgpIgoJfQp9 type: kubernetes.io/dockerconfigjson 使用命令'kubectl create -f test-registry-secret.yaml'或者在dashboard中用上述YAML即可创建docker-registry。 使用命令查看结果 kubectl get secret -n test-namespace kubectl describe secret test-registry-secret -n test-namespace 如何使用刚刚创建的docker-registry呢?两种方式,一种是每次在创建pod或者deployment时指定imagePullSecrets,或者在该namespace的serviceaccount【默认default,如果是别的serviceaccount,需要在创建pod时指定spec.serviceAccount】中指定imagePullSecrets,这样用该serviceaccount创建的pod会自动加上spec: imagePullSecrets: - name: test-registry-secret 以创建namespace时自动创建的serviceaccount default为例,首先查看default的详细情况 [root@master ~]# kubectl describe sa test-deri -n test-namespace Name: test-deri Namespace: test-namespace Labels: Annotations: Image pull secrets: Mountable secrets: test-deri-token-rmxbn Tokens: test-deri-token-rmxbn Events: 可以看到当前的Image pull secrets:   ,需要为它指定成刚刚我们创建的secret。使用命令 kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "test-registry-secret"}]}' -n test-namespace 或者使用命令 kubectl edit sa default -n test-namespace 在打开的YAML文件中添加两行,保存退出。 imagePullSecrets: - name: test-registry-secret  最后再次查看default的详细情况,可以看到Image pull secrets:  test-registry-secret [root@master ~]# kubectl describe sa default -n test-namespace Name: default Namespace: test-namespace Labels: Annotations: Image pull secrets: test-registry-secret Mountable secrets: default-token-5fcn5 Tokens: default-token-5fcn5 Events: 接下来在test-namespace命名空间下用default这个serviceaccount创建的任何pods容器,都会自动在pod定义中附加上下面这样的密钥认证信息了。 另一种方式,每次创建pod时指定secret,例如 apiVersion: v1 kind: Pod metadata: name: test-baresystem namespace: test-namespace spec: containers: - name: test-baresystem image: hub.test.org.cn/dev-project/centos6-bare-system:v0 ports: - containerPort: 8080 hostPort: 30001 imagePullSecrets: - name: test-registry-secret 最后测试一下吧。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:k8s权限使用【ServiceAccount、Role、RoleBinding使用】
下一篇:SpringBoot整合PageHelper实现分页查询功能详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~