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 安装完成之后清 ...
随机推荐
- 李嘉诚 《Are you ready》
当你们梦想着为伟大成功的时候,你有没有刻苦的准备? 当你们有野心作领袖的时候,你有没有服务于人的谦恭? 我们常常都想有所获得,但我们有没有付出的情操? 我们都希望别人听到自己的话,我们有没有耐性聆听别 ...
- 一起学习Boost标准库--Boost.StringAlgorithms库
概述 在未使用Boost库时,使用STL的std::string处理一些字符串时,总是不顺手,特别是当用了C#/Python等语言后trim/split总要封装一个方法来处理.如果没有形成自己的com ...
- Nginx+uWSGI+Django部署web服务器
目录 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py ...
- OpenGL超级宝典笔记——贝塞尔曲线和曲面(转)
http://my.oschina.net/sweetdark/blog/183721 参数方程表现形式 在中学的时候,我们都学习过直线的参数方程:y = kx + b;其中k表示斜率,b表示截距(即 ...
- django模板系统(下)
主要内容:母版,继承母版,块,组件,静态文件 母版 <!DOCTYPE html> <html lang="en"> <head> <me ...
- 使用JavaScript实现简单的小游戏-贪吃蛇
最近初学JavaScript,在这里分享贪吃蛇小游戏的实现过程, 希望能看到的前辈们能指出这个程序的不足之处. 大致思路 首先要解决的问题 随着蛇头的前进,尾巴也要前进. 用键盘控制蛇的运动方向. 初 ...
- Eclipse 中怎样自动格式化代码?
首先 有一个 检查代码风格的工具叫checkstyle,具体怎么下载,请自行百度.. 当你在eclipse安装好 checkstyle后,对于使用google标准的人来说,选择一个项目,右键,点击ch ...
- 【Android自动化】Subprocess.check_output()简单用法
# -*- coding:utf-8 -*- import os import sys import subprocess from uiautomator import device as d cm ...
- 开发指南专题十四:JEECG微云高速开发平台MiniDao 介绍
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhangdaiscott/article/details/27068645 开发指南专题十四:J ...
- 【转】 [置顶] Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)
在Android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ...