Kubernetes通过yaml配置文件创建实例时不使用本地镜像的原因

原文:https://www.58jb.com/html/154.html  

在笔记本上做实验的时候,没有把Docker的内网仓库主机启动,导致了Kubernetes在创建pod实例时失败。状态为ImagePullBackOff,我本机已经在上次操作时已经自动下载到有镜像了,为何还提示拉取镜像呢?

 

通过查看日志就可以知道问题大致是什么。

 
 
  1. Jun 12 17:02:03 k8s ntpd[789]: Listen normally on 18 veth5737c59 fe80::c4e0:e4ff:fe31:a648 UDP 123 
  2.  
  3. Jun 12 17:02:03 k8s ntpd[789]: new interface(s) found: waking up resolver 
  4.  
  5. Jun 12 17:02:03 k8s dockerd-current[1164]: time="2017-06-12T17:02:03.659830673+08:00" level=warning msg="Error getting v2 registry: Get https://reg.docker.lc/v2/: dial tcp 10.0.10.9:443: getsockopt: no route to host" 
  6.  
  7. Jun 12 17:02:03 k8s dockerd-current[1164]: time="2017-06-12T17:02:03.659899809+08:00" level=error msg="Attempting next endpoint for pull after error: Get https://reg.docker.lc/v2/: dial tcp 10.0.10.9:443: getsockopt: no route to host" 
  8.  
  9. Jun 12 17:02:06 k8s kube-scheduler[6154]: I0612 17:02:06.544109    6154 leaderelection.go:247] lock is held by k8s-node and has not yet expired 
  10.  
  11. Jun 12 17:02:06 k8s dockerd-current[1164]: time="2017-06-12T17:02:06.667426272+08:00" level=error msg="Attempting next endpoint for pull after error: Get https://reg.docker.lc/v1/_ping: dial tcp 10.0.10.9:443: getsockopt: no route to host" 
  12.  
  13. Jun 12 17:02:06 k8s kubelet[1345]: E0612 17:02:06.668855    1345 docker_manager.go:2295] container start failed: ErrImagePull: image pull failed for reg.docker.lc/share/nginx:latest, this may be because there are no credentials on this request.  details: (Get https://reg.docker.lc/v1/_ping: dial tcp 10.0.10.9:443: getsockopt: no route to host) 
  14.  
  15. Jun 12 17:02:06 k8s kubelet[1345]: E0612 17:02:06.668956    1345 pod_workers.go:184] Error syncing pod cb61d30a-4f4d-11e7-8ea8-000c29e9277a, skipping: failed to "StartContainer" for "nginx" with ErrImagePull: "image pull failed for reg.docker.lc/share/nginx:latest, this may be because there are no credentials on this request.  details: (Get https://reg.docker.lc/v1/_ping: dial tcp 10.0.10.9:443: getsockopt: no route to host)" 
  16.  
  17. Jun 12 17:02:06 k8s kubelet[1345]: E0612 17:02:06.942588    1345 docker_manager.go:2295] container start failed: ImagePullBackOff: Back-off pulling image "reg.docker.lc/share/nginx:latest" 
  18.  
  19. Jun 12 17:02:06 k8s kubelet[1345]: E0612 17:02:06.942643    1345 pod_workers.go:184] Error syncing pod cb61d30a-4f4d-11e7-8ea8-000c29e9277a, skipping: failed to "StartContainer" for "nginx" with ImagePullBackOff: "Back-off pulling image \"reg.docker.lc/share/nginx:latest\"" 

 

        后来对比了几个网上下载回来的yaml配置文件,有一个参数选项:imagePullPolicy: Always ,镜像的拉取策略,总是拉取;但是我的配置文件中并没有添加这个选项,根据这样可以想象到,默认就可能是Always的,于是网上搜了一下,同样有网友遇到这样的情况,都是会自动到远程拉取镜像,并不使用本地的镜像。

那么这个参数的可选项有哪些呢?

官方其实已经说明了,只是没有详细看文档;https://kubernetes.io/docs/concepts/containers/images/

By default, the kubelet will try to pull each image from the specified registry. However, if the imagePullPolicy property of the container is set to IfNotPresent or Never, then a local image is used (preferentially or exclusively, respectively).

#默认情况是会根据配置文件中的镜像地址去拉取镜像,如果设置为IfNotPresent 和Never就会使用本地镜像。

IfNotPresent :如果本地存在镜像就优先使用本地镜像。

Never:直接不再去拉取镜像了,使用本地的;如果本地不存在就报异常了。

参数的作用范围:

 
 
  1. spec: 
  2.   containers: 
  3.     - name: nginx 
  4.       image: image: reg.docker.lc/share/nginx:latest 
  5.       imagePullPolicy: IfNotPresent   #或者使用Never 

 

因为此参数默认为:imagePullPolicy: Always ,如果你yaml配置文件中没有定义那就是使用默认的。

相关推荐
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为您提供一个参考Kubernetes YAML配置文件,用于创建MySQL集群:apiVersion: v1 kind: Service metadata: name: mysql-cluster spec: selector: app: mysql ports: - port: 3306 targetPort: 3306 name: mysql--- apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: mysql-cluster replicas: 3 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - image: mysql:5.7 name: mysql ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: mysql-persistent-storage spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 2Gi ### 回答2: 要编写一个KubernetesYAML配置文件创建mysql集群,可以按照以下步骤进行操作: 1. 创建一个命名空间(namespace):在YAML配置文件中,使用`kind: Namespace`来创建一个命名空间,并指定命名空间的名称。 2. 创建一个持久卷声明(PersistentVolumeClaim):在YAML配置文件中,使用`kind: PersistentVolumeClaim`来创建一个持久卷声明,并指定名称、存储类、存储大小等属性。 3. 创建一个配置文件(ConfigMap):在YAML配置文件中,使用`kind: ConfigMap`来创建一个配置文件,用于存储mysql集群的配置参数。 4. 创建一个服务(Service):在YAML配置文件中,使用`kind: Service`来创建一个服务,用于提供mysql集群的访问入口。 5. 创建一个状态fulset(StatefulSet):在YAML配置文件中,使用`kind: StatefulSet`来创建一个状态fulset,用于部署和管理mysql集群的多个实例。在状态fulset的模板中,需要指定容器镜像、容器端口、环境变量等属性。 6. 创建一个访问mysql的客户端(Deployment):在YAML配置文件中,使用`kind: Deployment`来创建一个部署,用于访问mysql集群的客户端。在部署的模板中,需要指定容器镜像、容器端口、环境变量等属性。 通过以上步骤,可以编写一个包含命名空间、持久卷声明、配置文件、服务、状态fulset和客户端部署的YAML配置文件,用于创建一个mysql集群。具体的配置细节根据实际需求进行调整和修改。 ### 回答3: 要编写一个KubernetesYAML配置文件创建MySQL集群,可以按照以下步骤进行操作: 1. 创建一个命名空间,用于部署MySQL集群: ```yaml apiVersion: v1 kind: Namespace metadata: name: mysql ``` 2. 创建一个ConfigMap,用于配置MySQL的环境变量和配置文件: ```yaml apiVersion: v1 kind: ConfigMap metadata: name: mysql-config namespace: mysql data: my.cnf: | [mysqld] server-id=1 log_bin ``` 3. 创建一个StatefulSet,用于创建MySQL的主实例和副本实例: ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql namespace: mysql spec: serviceName: mysql replicas: 3 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD value: password ports: - containerPort: 3306 volumeMounts: - name: mysql-pvc mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: mysql-pvc spec: storageClassName: standard accessModes: - ReadWriteOnce resources: requests: storage: 1Gi ``` 4. 创建一个Service,用于暴露MySQL服务: ```yaml apiVersion: v1 kind: Service metadata: name: mysql namespace: mysql spec: selector: app: mysql ports: - protocol: TCP port: 3306 targetPort: 3306 ``` 以上就是创建MySQL集群的Kubernetes YAML配置文件的简要示例,可以根据实际需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值