镜像拉取策略
Pod镜像拉取策略参数为imagePullPolicy
,其值有三个:
- IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
- Always:每次创建 Pod 都会重新拉取一次镜像
- Never: Pod 永远不会主动拉取这个镜像
Pod镜像拉取示例
如果要拉取公开镜像,直接使用下面示例即可,但要拉取私有的镜像,是必须认证镜像仓库才可以,文章末尾讲解拉取私人仓库。
1 2 3 4 5 6 7 8 9 10 11 12 |
apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx:latest imagePullPolicy: IfNotPresent #imagePullPolicy: Always #imagePullPolicy: Never |
Pod拉取镜像认证方法
如果要拉取私人镜像,则需要与镜像仓库进行认证,即docker login
,而在K8S集群中会有多个Node,显然这种方式是很不放方便的!为了解决这个问题,K8s实现了自动拉取镜像的功能。 以secret方式保存到K8S中,然后传给kubelet。
1.生成secret
在集群的主节点上使用 kubectl create 命令来生成secret
kubectl create secret docker-registry aliyun-registry --docker-username=useranme --docker-password=password --docker-server=registry.cn-shanghai.aliyuncs.com
docker-registry:指定生成secret的名称
–docker-username: 指定docker镜像仓库账号
–docker-password: 指定docker镜像仓库密码
–docker-server: 指定docke镜像仓库地址
–docker-email: 指定邮件地址(选填)
2.在配置清单中指定secret
使用参数是 imagePullSecrets
,ImagePullSecrets是一个可选的列表,其中包含对同一名称空间中秘密的引用,可用于提取这个PodSpec使用的任何图像。imagePullSecrets下的name
参数指定要引用的secrets的名字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
cat aliyun-registry.yaml apiVersion: v1 kind: Pod metadata: name: busybox spec: imagePullSecrets: - name: aliyun-registry containers: - name: busybox image: 指定私有镜像仓库地址 imagePullPolicy: IfNotPresent command: [ "/bin/sh", "-c", "tail -f /etc/passwd" ] |
3.创建配置清单并查看pod
1 2 3 4 |
kubectl apply -f aliyun-registry.yaml kubectl get pods -o wide | grep busybox busybox 1/1 Running 0 7m59s 10.244.3.44 k8s-node01 <none> |