K8S系列学习之私有镜像库搭建和使用

Kubernetes学习路上的那些事儿,很有必要分享出来

K8S系列学习之私有镜像库搭建和使用

 

为什么要搭建私有镜像仓库

无论我们使用docker pull 【具体镜像名称】命令拉取镜像,还是在Kubernetes中编写yaml文件的时候,使用image: 【具体镜像名称】,其实都是从docker公共镜像仓库拉取的,一般公共镜像仓库中有很多通用的镜像文件,比如MySQL,Redis,Nginx,busybox等等。

但是对于一个私有项目来说,不可能将定制化的应用镜像放到docker的公共镜像仓库中,这时,搭建一个私有镜像仓库就非常有必要了。

本实验主要测试一下本地搭建的私有镜像仓库。

实验过程

实验准备:

1)本地私有镜像仓库,自行搭建.

2)Docker环境,使用docker命令测试镜像

3)K8S集群环境,用于测试从私有镜像拉取nginx镜像

步骤一:安装docker-registry,搭建本地镜像仓库

yum install docker-registry     //安装docker-registry

docker run --name registry -d  -p 5000:5000 --restart=always  -v /opt/registry:/var/lib/registry registry

 

这个条命令挺长,对应介绍如下:

利用官网registry镜像运行一个私有镜像仓库容器,自定义名称registry,-d默认是本机,-p指定映射端口5000,-v是指定安装目录,默认是该容器的/var/lib/registry下,自定义修改目录/opt/registry,后续push上来的自定义镜像都在/opt/registry这个目录下。

 

K8S系列学习之私有镜像库搭建和使用

为了快捷的显示“自定义镜像”,还是从本地已有的公共镜像tag一个出来吧。

docker images    //查看下载在本地的镜像

docker tag 84581e99d807 192.168.0.10:5000/nginx-2 //利用本地nginx镜像,“自定义”一个名叫nginx-2的镜像,私有镜像仓库地址为192.168.0.10:5000。

 

K8S系列学习之私有镜像库搭建和使用

步骤二:验证私有镜像仓库的镜像推送和拉取。

docker push 192.168.0.10:5000/nginx-2   //将自定义镜像nginx-2推送到私有镜像仓库192.168.0.10:5000

docker rmi 192.168.0.10:5000/nginx-2   //为了避免干扰验证结果,先把本地tag的自定义镜像删除

docker pull 192.168.0.10:5000/nginx-2   //从私有镜像仓库拉取自定义镜像

docker images   //查看本地镜像,应该可以再次看到192.168.0.10:5000/nginx-2镜像

 

K8S系列学习之私有镜像库搭建和使用

也可以通过浏览器访问私有镜像仓库,通过http://[ip地址]:[端口]/v2/_catalog 访问。

步骤三:通过k8s集群测试私有镜像仓库。

登录到安装k8s集群的云主机上(192.168.0.8),此云主机跟部署docker私有镜像的云主机(192.168.0.10)属于一个私网网段,内网可以互通,通过docker pull测试一下,是否可以通过k8s云主机,从私有镜像中拉取镜像。(注意:如果遇到“实验总结”中的问题,需要修改/etc/docker/daemon.json文件,然后重启docker服务)

 

K8S系列学习之私有镜像库搭建和使用

测试内网可以拉取私有镜像,确保网络环境是OK的,然后开始测试k8s集群拉取本地镜像的操作。复制上一贴中的Deployment资源的yaml文件,稍加修改,自定义名称为dockerlocal-myregistry-dep.yaml.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myreg-dep
spec:
  replicas: 2
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
      - name: busybox
        image: 192.168.0.10:5000/nginx-2
        ports:
        - containerPort: 80

跟上一贴DockerHub搭建私有镜像仓库相比,本次实验搭建的本地私有镜像仓库没有设置用户名和密码,所以k8s集群中不需要创建Secret令牌,直接在Deployment中的镜像拉取设置中修改为本地镜像仓库地址。

K8S系列学习之私有镜像库搭建和使用

 

创建Deployment资源,并且查看利用自定义镜像“192.168.0.10:5000/nginx-2”创建的Pod信息。

kubectl apply -f dockerlocal-myregistry-dep.yaml

kubectl describe pod myreg-dep-749fc7d9f8-np6lw

K8S系列学习之私有镜像库搭建和使用

 

实验总结

1)如果出现以下错误,注意在修改客户端/etc/docker/daemon.json文件内容,然后重启docker服务。

K8S系列学习之私有镜像库搭建和使用

 

2)生产环境中,本地私有镜像仓库肯定会设置用户权限,比如登录名和账号,在k8s集群中拉取本地私有镜像时,自然也需要先创建Secret,然后才能够成功拉取自定义镜像。对比DockerHub和本地搭建两种形式,主要区别在镜像仓库上,DockerHub可以通过图像化web界面轻松完成账号、镜像仓库创建,而本地搭建是需要通过docker命令行进行部署,对于k8s集群拉取镜像,大体上的操作是一样的。

 

上一篇:如何理解事务一致性?


下一篇:2.编写IoDemo.java的Java应用程序,程序完成的功能是:首先读取text.txt文件内容,再通过键盘输入文件的名称为iodemo.txt,把text.txt的内容存入iodemo.txt