博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
k8s之使用secret获取私有仓库镜像
阅读量:6118 次
发布时间:2019-06-21

本文共 4862 字,大约阅读时间需要 16 分钟。

一、前言

其实这次实践算不上特别复杂,只是在实践过程中遇到了一些坑,以及填坑的方法是非常值得在以后的学习过程中参考借鉴的

二、知识准备

1.harbor是一个企业级的镜像仓库,它比起docker registry提供了更多的功能

2.在私有仓库中的镜像是需要经过一系列的验证才能够被pull,比如insecure-registries等
3.本文主要描述通过k8s的secret来进行验证

三、环境准备

组件 版本
OS Ubuntu 18.04.1 LTS
docker 18.06.0-ce
k8s 1.10.1
harbor v1.5.3

四、创建secret

根据官方文档

root@k8s-master:~# kubectl create secret docker-registry regcred \>         --docker-server=repo.mrvolleyball.com/library \>         --docker-username=admin \>         --docker-password='Harbor12345' \>         --docker-email=chaisd63@163.comsecret "regcred" created
root@k8s-master:~# kubectl apply -f <(echo 'apiVersion: v1> kind: Pod> metadata:>   name: private-reg> spec:>   containers:>   - name: private-reg-container>     image: repo.mrvolleyball.com/library/busybox:latest>   imagePullSecrets:>   - name: regcred')pod "private-reg" created

根本没有难度啊,2条命令解决,当我满怀欣喜的查看状态的时候:

root@k8s-master:~# kubectl get pods private-regNAME          READY     STATUS             RESTARTS   AGEprivate-reg   0/1       ImagePullBackOff   0          11s
root@k8s-master:~# kubectl describe pods private-reg...Events:  Type     Reason                 Age                From                 Message  ----     ------                 ----               ----                 -------  Normal   Scheduled              40s                default-scheduler    Successfully assigned private-reg to k8s-master  Normal   SuccessfulMountVolume  40s                kubelet, k8s-master  MountVolume.SetUp succeeded for volume "default-token-v9nkm"  Normal   SandboxChanged         38s                kubelet, k8s-master  Pod sandbox changed, it will be killed and re-created.  Normal   Pulling                22s (x2 over 39s)  kubelet, k8s-master  pulling image "repo.mrvolleyball.com/library/busybox:latest"  Warning  Failed                 22s (x2 over 38s)  kubelet, k8s-master  Failed to pull image "repo.mrvolleyball.com/library/busybox:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for repo.mrvolleyball.com/library/busybox, repository does not exist or may require 'docker login'  Warning  Failed                 22s (x2 over 38s)  kubelet, k8s-master  Error: ErrImagePull  Normal   BackOff                6s (x4 over 36s)   kubelet, k8s-master  Back-off pulling image "repo.mrvolleyball.com/library/busybox:latest"  Warning  Failed                 6s (x4 over 36s)   kubelet, k8s-master  Error: ImagePullBackOff

这简直是给了当头一棒啊,我反反复复的检查之后,用户名、密码、仓库地址,官网提供的命令,都没问题啊,这TM到底是几个意思!!

在我一遍又一遍的check中发现了蛛丝马迹

root@k8s-master:~# kubectl get secret regcred  -o yamlapiVersion: v1data:  .dockercfg: eyJhdXRocyI6eyJqZC1yZXBvLmludC5hbmtlcmppZWRpYW4uY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IkhhcmJvcjEyMzQ1IiwiZW1haWwiOiJ5dXhpYW9jQGp1bWVpLmNvbSIsImF1dGgiOiJZV1J0YVc0NlNHRnlZbTl5TVRJek5EVT0ifX19kind: Secretmetadata:  creationTimestamp: 2018-10-29T09:33:40Z  name: regcred  namespace: default  resourceVersion: "7670942"  selfLink: /api/v1/namespaces/default/secrets/regcred  uid: b82b7527-db5d-11e8-9e67-b2aca3e7fa90type: kubernetes.io/dockercfg

官网提供的信息:

apiVersion: v1data:  .dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=kind: Secretmetadata:  ...  name: regcred  ...type: kubernetes.io/dockerconfigjson

细心的朋友已经看出来了:

通过命令创建的data是.dockercfg,并且类型也不同:type: kubernetes.io/dockercfg
而官网提供的的data是.dockerconfigjson,类型是:type: kubernetes.io/dockerconfigjson

细微差别,千里之外啊,赶紧改了试一试:

root@k8s-master:~# kubectl get secret regcred  -o yaml > secret.yaml

修改之:

root@k8s-master:~# more secret.yamlapiVersion: v1data:  .dockerconfigjson: eyJhdXRocyI6eyJqZC1yZXBvLmludC5hbmtlcmppZWRpYW4uY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IkhhcmJvcjEyMzQ1IiwiZW1haWwiOiJ5dXhpYW9jQGp1bWVpLmNvbSIsImF1dGgiOiJZV1J0YVc0NlNHRnlZbTl5TVRJek5EVT0ifX19kind: Secretmetadata:  name: regcred  namespace: default  selfLink: /api/v1/namespaces/default/secrets/regcredtype: kubernetes.io/dockerconfigjson

然后重建之:

root@k8s-master:~# kubectl delete secret regcredroot@k8s-master:~# kubectl create -f secret.yamlroot@k8s-master:~# kubectl delete -f <(echo 'apiVersion: v1kind: Podmetadata:  name: private-regspec:  containers:  - name: private-reg-container    image: repo.mrvolleyball.com/library/busybox:latest  imagePullSecrets:  - name: regcred')pod "private-reg" deletedroot@k8s-master:~# kubectl apply -f <(echo 'apiVersion: v1kind: Podmetadata:  name: private-regspec:  containers:  - name: private-reg-container    image: repo.mrvolleyball.com/library/busybox:latest  imagePullSecrets:  - name: regcred')pod "private-reg" created
root@k8s-master:~# kubectl get pods private-regNAME          READY     STATUS    RESTARTS   AGEprivate-reg   1/1       Running   0          15s

终于,达到了需要的效果

五、小结

● 再详细的文档也需要一步一步实践,只有实践了,才是自己的知识,否则就是人云亦云

● 看文档一定要非常仔细,而且要对比对比在对比,如果你确定了和文档的一样没问题,做出来的依然错误,就去提issue吧


至此,本文结束

在下才疏学浅,有撒汤漏水的,请各位不吝赐教...

转载于:https://www.cnblogs.com/MrVolleyball/p/9925307.html

你可能感兴趣的文章
MyBatis学习总结(三)——优化MyBatis配置文件中的配置
查看>>
Spring常用注解
查看>>
我的友情链接
查看>>
PCS子层有什么用?
查看>>
查看端口,关闭端口
查看>>
代码托管平台简介
查看>>
glbp详解
查看>>
一个简单好用的zabbix告警信息发送工具
查看>>
彻底解决SysFader:IEXPLORE.EXE应用程序错误
查看>>
正则表达式
查看>>
Unix/Linux下删除Oracle控制文件Controlfile为什么实例Instance没有立即奔溃?
查看>>
泄露门年终盘点:***用户网站间的“罗生门”
查看>>
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>
如何对网站进行归档
查看>>
数据库之MySQL
查看>>
2019/1/15 批量删除数据库相关数据
查看>>
数据类型的一些方法
查看>>
Mindjet MindManager 2019使用教程:
查看>>
游戏设计的基本构成要素有哪些?
查看>>