• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Alexmarting

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

镜像拉取

 

 

• IfNotPresent:默认值,镜像在宿主机上不存在时才拉取

• Always:每次创建 Pod 都会重新拉取一次镜像

• Never: Pod 永远不会主动拉取这个镜像

# 查看已创建deployment的拉取策略

kubectl get deploy/nginx-deployment -o yaml | grep imagePull

imagePullPolicy: IfNotPresent

认证镜像仓库拉取方法

1、Node:修改需要认证的镜像仓库

 {"insecure-registries": ["需要认证的仓库地址"]}

vim /etc/docker/daemon.json

2、Node:登录镜像仓库(可提交项目镜像到私有仓库)

docker login 镜像仓库IP地址

3、Node:查看仓库docker认证信息、并编码

cat ~/.docker/config.json | base64 -w 0

4、Master:创建认证yaml文件、 .dockerconfigjson下就是Node config.json的编码信息

k8s集群拉取竟像时除了写

vim /etc/docker/daemon.json

 

{
"insecure-registries": ["k8s150.oldboyedu.com:5000"],
"registry-mirrors": ["https://tuv7rqqq.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}

还需要注意

docker container run -itdp 5000:5000  --name oldboyedu-registry --restart always registry

即要启动私有仓库,注意查看端口有没有

 

 

以下是从其它博主拷贝

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

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

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

{undefined

"auths": {undefined

"https://myhub.fdccloud.com": {undefined

"auth": "xxxx",

"email": "yanw02@mysoft.com.cn"

},

}

}

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

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

在k8s master上通过docker login登录registry,生成config.json文件。然后执行如下命令,将文件转换成base64编码:

cat /root/.docker/config.json|base64 -w 0

生成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

在创建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

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

 

posted on 2022-03-04 22:10  Alexmarting  阅读(274)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3