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




k8s如何查看pod镜像 k8s查看镜像版本_自定义


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

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

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

本实验主要测试一下在DockerHub上创建个人镜像仓库的操作。

实验过程

实验准备:

1)DockerHub,需要注册账号,本次实验使用的账号tianyangqi.

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

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

步骤一:在Docker环境下,向DockerHub上推送和拉取自定义镜像。进入docker环境,确定安装了docker,然后查看本地镜像。

docker version  //查看安装的Docker版本docker images  //查看下载到本地的镜像


k8s如何查看pod镜像 k8s查看镜像版本_json_02


既然看到了busybox镜像,那么就用这个镜像来制作“自定义镜像”,其实就是重命名一下。如果要制作一个纯的“自定义镜像”,那就要自己开发代码,然后通过dockerfile打包成镜像,由于本实验主要的目的是演示镜像仓库,所以就来个不纯的吧。

docker tag [本地镜像id] [账号]/[自定义镜像名称]  //打包镜像


k8s如何查看pod镜像 k8s查看镜像版本_dockerhub 查看镜像版本_03


然后推送自定义镜像到DockerHub中的tianyangqi账户下的镜像仓库中,在推动镜像之前,需要通过docker login命令登录DockerHub,根据提示输入用户名和密码。否则访问会被拒绝。

docker push tianyangqi/busybox-test:latest    //推送镜像


k8s如何查看pod镜像 k8s查看镜像版本_dockerhub 查看镜像版本_04


登录DockerHub官网,然后可以看到已推送的“自定义镜像”——busybox-test.


k8s如何查看pod镜像 k8s查看镜像版本_k8s如何查看pod镜像_05


验证一下拉取镜像,为了避免混淆,先删除本地刚才打包的“自定义镜像”——busybox-test,然后再从DockerHub的tianyangqi个人镜像仓库中拉取镜像。

docker pull tianyangqi/busybox-test:latest   //拉取镜像


k8s如何查看pod镜像 k8s查看镜像版本_自定义_06


步骤二:通过k8s集群,从DockerHub的个人镜像仓库拉取镜像。首先仍然确认docker login的,只有登录了,才会在当前账号的家目录下生成一个config.json文件,在k8s集群中要通过这个json文件制作secret凭证。

cat ~/.docker/config.json | base64 -w 0  //务必记录好生成的这串信息,不要换行

然后新建一个secret的yaml文件,就叫myregistry-secret.yaml.

apiVersion: v1kind: Secretmetadata:  name: mysecret  namespace: defaulttype: kubernetes.io/dockerconfigjsondata:  .dockerconfigjson: //替换成刚才用config.json生成的那串老长的信息。

创建并检查secret凭证

kubectl apply -f myregistry-secret.yaml  //创建secretkubectl get secret mysecret  //查看secret


k8s如何查看pod镜像 k8s查看镜像版本_json_07


创建Pod资源来测试一下,看看是否可以从DockerHub的tianyangqi镜像仓库中拉取busybox-test镜像。既然前面已经演示过Deployment资源了,就索性用Deployment创建pod完成测试。此测试文件命名为dockerhub-myregistry-dep.yaml.

apiVersion: apps/v1kind: Deploymentmetadata:  name: myreg-depspec:  replicas: 2  selector:    matchLabels:      app: busybox  template:    metadata:      labels:        app: busybox    spec:      containers:      - name: busybox        image: tianyangqi/busybox-test:latest      imagePullSecrets:  - name: mysecret

相关代码的主要解释如下图:


k8s如何查看pod镜像 k8s查看镜像版本_json_08


创建测试deployment资源,查看pod创建信息。

kubectl apply -f dockerhub-myregistry-dep.yaml  //创建kubectl get pod  //查看Podkubectl describe pod [pod名称]   //查看具体pod的描述信息


k8s如何查看pod镜像 k8s查看镜像版本_dockerhub 查看镜像版本_09


“自定义镜像”(tianyangqi/busybox-test)确实拉取成功了,之所以由Deployment创建的两个pod的运行状态不是Running,这跟busybox镜像本身有关,此镜像就是一个包含很多Linux命令的工具包,安装完成后就结束了。

实验总结

DockerHub中的tianyangqi相当于一个线上的私有镜像仓库,可以推送自定义镜像到该仓库中,而docker本身是负责推送和拉取镜像,以及打包镜像,k8s中的Secret资源就是一个在集群中的登录凭证,相当于令牌或密钥,里面包含了tianyangqi账号的相关登录信息;最后使用deployment创建pod测试镜像的拉取。

最后附上一个更换了Nginx镜像的实验截图,即tianyangqi/nginx-test(基于nginx镜像自定义的)。可以看到,Pod运行正常,处于Running状态了。


k8s如何查看pod镜像 k8s查看镜像版本_json_10


k8s如何查看pod镜像 k8s查看镜像版本_k8s如何查看pod镜像_11