k8s之使用secret获取私有仓库镜像
一、前言
其实这次实践算不上特别复杂,只是在实践过程中遇到了一些坑,以及填坑的方法是非常值得在以后的学习过程中参考借鉴的
二、知识准备
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
根据官方文档 https://v1-10.docs.kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
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.com
secret "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-reg
NAME READY STATUS RESTARTS AGE
private-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 yaml
apiVersion: v1
data:
.dockercfg: eyJhdXRocyI6eyJqZC1yZXBvLmludC5hbmtlcmppZWRpYW4uY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IkhhcmJvcjEyMzQ1IiwiZW1haWwiOiJ5dXhpYW9jQGp1bWVpLmNvbSIsImF1dGgiOiJZV1J0YVc0NlNHRnlZbTl5TVRJek5EVT0ifX19
kind: Secret
metadata:
creationTimestamp: 2018-10-29T09:33:40Z
name: regcred
namespace: default
resourceVersion: "7670942"
selfLink: /api/v1/namespaces/default/secrets/regcred
uid: b82b7527-db5d-11e8-9e67-b2aca3e7fa90
type: kubernetes.io/dockercfg
官网提供的信息:
apiVersion: v1
data:
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
kind: Secret
metadata:
...
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.yaml
apiVersion: v1
data:
.dockerconfigjson: eyJhdXRocyI6eyJqZC1yZXBvLmludC5hbmtlcmppZWRpYW4uY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IkhhcmJvcjEyMzQ1IiwiZW1haWwiOiJ5dXhpYW9jQGp1bWVpLmNvbSIsImF1dGgiOiJZV1J0YVc0NlNHRnlZbTl5TVRJek5EVT0ifX19
kind: Secret
metadata:
name: regcred
namespace: default
selfLink: /api/v1/namespaces/default/secrets/regcred
type: kubernetes.io/dockerconfigjson
然后重建之:
root@k8s-master:~# kubectl delete secret regcred
root@k8s-master:~# kubectl create -f secret.yaml
root@k8s-master:~# kubectl delete -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" deleted
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
root@k8s-master:~# kubectl get pods private-reg
NAME READY STATUS RESTARTS AGE
private-reg 1/1 Running 0 15s
终于,达到了需要的效果
五、小结
● 再详细的文档也需要一步一步实践,只有实践了,才是自己的知识,否则就是人云亦云
● 看文档一定要非常仔细,而且要对比对比在对比,如果你确定了和文档的一样没问题,做出来的依然错误,就去提issue吧
至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教...
k8s之使用secret获取私有仓库镜像的更多相关文章
- kubernetes入门之获取私有仓库镜像
一般情况下,我们项目构建的镜像统一会推送至私有仓库,那么这里大家可以参考阿里云的私有仓库搭建教程.那么我们可以通过以下步骤拉取: 1.推送及拉取镜像 1.1. 登录阿里云Docker Registry ...
- docker之私有仓库镜像管理
一.查看本地镜像 二.给镜像打标记(tag ) [root@node03 ~]# docker tag wordpress:v1 192.168.1.197:5000/wordpress:v1 2.删 ...
- docker 查询或获取私有仓库(registry)中的镜像
docker 查询或获取私有仓库(registry)中的镜像,使用 docker search 192.168.1.8:5000 命令经测试不好使. 解决: 1.获取仓库类的镜像: [root@sha ...
- Python Docker 查看私有仓库镜像【转】
文章来源:python Docker 查看私有仓库镜像 pip 安装: # 首先安装epel扩展源: yum -y install epel-release # 更新完成之后,就可安装pip: yum ...
- Docker registry 私有仓库镜像查询、删除、上传、下载 shell
#Docker官方私有仓库registry #官方只提供了API接口,不方便使用,就写了个shell #docker-registry安装配置http://www.cnblogs.com/elvi/p ...
- Docker——Registry 通过Shell管理私有仓库镜像
使用方法: 复制代码保存为 image_registry.sh sh image_registry.sh -h #查看帮助 HUB=10.0.29.104:5000 改为自己的地址 #!/bin ...
- docker 私有仓库镜像的存储位置
docker 私有仓库的镜像 是存储在5739360d1030 registry "docker-registry" 3 days ago Up 28 hours 0.0.0.0: ...
- Docker删除私有仓库镜像
V2 安装删除脚本 # curl https://raw.githubusercontent.com/burnettk/delete-docker-registry-image/master/dele ...
- python Docker 查看私有仓库镜像
pip 安装: 首先安装epel扩展源: yum -y install epel-release 更新完成之后,就可安装pip: yum -y install python-pip 安装完成之后清 ...
随机推荐
- 点击一个div ,把div里的某个参数的值,传到一个input里面
- VPC见解
VPC是什么? VPC:Virtual Private Cloud,即虚拟私有云.讨论VPC时,我们可以从两个方面来讨论: 从服务的角度来看:VPC是一种云,但是这个云不属于我们常见的公有云.私有 ...
- 乘风破浪:LeetCode真题_037_Sudoku Solver
乘风破浪:LeetCode真题_037_Sudoku Solver 一.前言 这次我们对于上次的模型做一个扩展并求解. 二.Sudoku Solver 2.1 问题 2.2 分析与解决 这道题 ...
- November 11th, 2017 Week 45th Saturday
Happiness is a direction, not a place. 快乐是一个方向,不是一个目的. Do you remember those moments in your life wh ...
- VS2017C++单元测试
0.欢迎食用 希望对点进来的你有所帮助. 全文记流水账,内心想法如示例项目名称. 1.建立需测试的项目 新建项目 正常书写.h 和.cpp文件 2.新建单元测试 右击解决方案 -> 添加 -&g ...
- Sqlserver数据库还原一直显示“正在还原…”解决方法
--恢复并且回到可访问状态,要执行 RESTORE database 数据库名 with recovery
- CF558E A Simple Task
题目大意: 给定一个长度不超过10^5的字符串(小写英文字母),和不超过5000个操作. 每个操作 L R K 表示给区间[L,R]的字符串排序,K=1为升序,K=0为降序. 最后输出最终的字符串 首 ...
- Spring boot注解使用
1:@SpringBootApplication 注解 a:scanBasePackages 与scanBasePackageClasses配置Spring启动时扫描的包路径或者扫描的字节码文件 b: ...
- Odoo进销存业务思路浅析
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9307485.html 一:采购业务(进) 1:根据采购对象和性质,采购业务主要分为四类: 生产性采购:采购企 ...
- Python2.7-struct模块
struct模块 处理二进制数据,与C语言交互,可以较为方便的对C语言的struct类型和python中的数据进行转换 主要是用于将int,char之类的C语言中基础数据pack至一个二进制流的字符串 ...