创建部署的Yaml失败

时间:2020-06-28 13:42:20

标签: docker kubernetes minikube

构建名为my-http的docker镜像后,我可以使用它来创建部署

kubectl创建部署http-部署--image = my-http

这不会拉图像,因为imagePullPolicy为Always。

然后运行

kubectl编辑部署http-部署

并将imagePullPolicy更改为“从不”,然后它将运行。

但是出于自动化目的,我创建了一个Yaml以创建部署并同时设置imagePullPolicy。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-deployment
spec:
    replicas: 3
    selector:
      matchLabels:
        app: http
    template:
      metadata:
        labels:
          app: http
      spec:
        containers:
        - name: my-http
          image: my-http
          imagePullPolicy: Never
          ports:
          - containerPort: 8080

然后套用-f并开始运行pod,但过一会儿,系统会以该消息开始Crashloopbackoff

机器上已经存在容器映像my-http

显然,它与容器端口有关,但是该端口如何用于使其运行?没有容器在运行...

编辑:已经存在的图像仅供参考,这是广告连播说明中的最后一行

警告后退7秒(x8超过91秒)kubelet,minikube后退 重新启动失败的容器

2 个答案:

答案 0 :(得分:3)

如果使用kubernetes集群,则只能在构建映像的节点上使用映像。

您必须将图像推送到容器注册表,然后kubernetes会尝试将图像拉到将运行容器的节点。

如果要在生成映像的节点中运行容器,则必须使用NodeSelector或PodAffinity。

https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/

答案 1 :(得分:1)

您的图像可能是私有图像,如果您未指定imagePullSecrets,Kubernetes将无法提取该图像。

但这不应该是问题,因为imagePullPolicy: Never只会在节点上使用图像。您可以通过kubectl describe pod pod_name或通过带有--previous标志获取前一个容器的日志来诊断实际问题,因为较新的容器可能未遇到问题。