zoukankan      html  css  js  c++  java
  • K8S从私有仓库拉取镜像

    通常来讲,我们在通过公共镜像仓库拉取docker镜像的时候,不需要任何的认证操作,但我们在构建了企业的私有镜像以后,就不得不在拉取镜像之前通过用户名密码来完成认证。

    在docker单机环境中,我们可以直接在宿主机上执行docker login https://myhub.fdccloud.com类似这种命令的方式来完成认证。但在通过kubernetes来对docker做相关集群管理时,就不得不在所有的节点机上通过上面那种方式完成认证。这在大规模的应用架构中,是不可取的。

    当然,我们有另外一种稍微简便的方法。事实上,在执行docker login https://xxxxx完成认证的时候,实际是在当前用户的家目录的.docker目录下生成了一个config.json文件。我们查看该文件的内容如下:

        {
        	"auths": {
        		"https://myhub.fdccloud.com": {
        			"auth": "xxxx",
        			"email": "yanw02@mysoft.com.cn"
        		},
        	}
        }
    

    这个文件包含了认证信息。所以另一个可行的办法,就是直接将该文件通过自动化的方式,推送到所有节点机的相应目录即可。但在实际的测试中,这种方式推送的节点仍然会偶尔出现认证失败的情况,具体什么原因目前尚不清楚。

    kubernetes提供多种针对私有仓库认证的方式,在这里,我只说明其中的一种方法,也是我实际使用的方法,通过k8s的secret来实现。

    1. 在k8s master上通过docker login登录registry,生成config.json文件。然后执行如下命令,将文件转换成base64编码:
        cat /root/.docker/config.json|base64 -w 0
    
    1. 生成registrykey-myhub.yml的配置文件,内容如下:
        apiVersion: v1
        kind: Secret
        metadata:
          name: registrykey-myhub
          namespace: default
        type: kubernetes.io/dockerconfigjson
        data:
          .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJodHRwczovL215aHViLmZkY2Nsb3VkLmNvbS8iOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2VFhsemIyWjBPVFU1TXpnPSIsCgkJCSJlbWFpbCI6ICJ5YW53MDJAbXlzb2Z0LmNvbS5jbiIKCQl9Cgl9Cn0=
        
        #创建secret:
        kubectl create -f registrykey-myhub.yml
    
    1. 在创建pod时,指定imagePullSecrets,示例如下:
        apiVersion: v1
        kind: ReplicationController
        metadata:
          name: sqltools-ycz
          labels:
            name: sqltools-ycz
        spec:
          replicas: 1
          selector:
            name: sqltools-ycz
          template:
            metadata:
              labels:
                name: sqltools-ycz
            spec:
              containers:
              - name: sqltools-ycz
                image: myhub.fdccloud.com/common/sqltools
                ports:
                - containerPort: 80
                env:
                - name: DB_HOST
                  value: "mysql-ycz.default.svc.cluster.local"
                - name: DB_NAME
                  value: "config"
                - name: DB_USERNAME
                  value: "ycz"
                - name: DB_PASSWORD
                  value: "77TqrfPaMbwaZXYu"
                - name: CACHE_HOST
                  value: "memcached-ycz.default.svc.cluster.local"
                - name: CACHE_PORT
                  value: "11211"
                - name: CACHE_PREFIX
                  value: "ycz"
              nodeSelector:
                kubernetes.io/hostname: k8s-master
              imagePullSecrets:
              - name: registrykey-myhub
    

    官方文档配置说明如下:
    https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

    需要说明的是,按照官方文档的配置,验证是失败的,这一点确实是很奇怪。

  • 相关阅读:
    完美的隐藏软键盘方法
    Android开发——构建自定义组件
    android 中 系统日期时间的获取
    Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
    总结:调用startActivityForResult,onActivityResult无响应的问题
    Android 頁面中有 EditText ,進入時取消自動彈出鍵盤
    Android中 Bitmap和Drawable相互转换的方法
    ImageView的属性android:scaleType
    动态添加组件(XML)
    Openfire3.8.2在eclipse中Debug方式启动最简单的方式
  • 原文地址:https://www.cnblogs.com/breezey/p/9105622.html
Copyright © 2011-2022 走看看