构建名为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后退 重新启动失败的容器
答案 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
标志获取前一个容器的日志来诊断实际问题,因为较新的容器可能未遇到问题。