Kubernetes:无法拉取图像

Posted

技术标签:

【中文标题】Kubernetes:无法拉取图像【英文标题】:kubernetes: image can't be pulled 【发布时间】:2020-06-18 10:52:02 【问题描述】:

在加入企业级 k8s/AWS EKS 之前,我使用 docker-desktop 在 Mac 上使用以下 Dockerfile 进行本地 k8s 测试:

FROM openjdk:11-jre-slim
ARG JAR_FILE=target/*.jar
COPY $JAR_FILE app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

使用以下部署步骤到docker-desktop

docker build . -t cpchung/rema

kubectl create deployment rema --image=cpchung/rema --dry-run -o=yaml > deployment.yaml
echo --- >> deployment.yaml
kubectl create service clusterip rema --tcp=8080:8080 --dry-run -o=yaml >> deployment.yaml
kubectl apply -f deployment.yaml

这会生成 deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: rema
  name: rema
spec:
  replicas: 1
  selector:
    matchLabels:
      app: rema
  strategy: 
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: rema
    spec:
      containers:
      - image: cpchung/rema
        name: rema
        resources: 
status: 
---
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: rema
  name: rema
spec:
  ports:
  - name: 8080-8080
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: rema
  type: ClusterIP
status:
  loadBalancer: 

并使用以下运行状况检查测试部署:

kubectl port-forward svc/rema 8080:8080
curl localhost:8080/actuator/health

但我收到此错误:

robinhood $ kubectl get all
NAME                        READY   STATUS             RESTARTS   AGE
pod/rema-57df6cf5fc-px8pc   0/1     ImagePullBackOff   0          4m29s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP    18h
service/rema         ClusterIP   10.100.78.60   <none>        8080/TCP   152m

NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/rema   0/1     1            0           4m29s

NAME                              DESIRED   CURRENT   READY   AGE
replicaset.apps/rema-57df6cf5fc   1         1         0       4m29s


robinhood $ kubectl logs rema-57df6cf5fc-px8pc
Error from server (BadRequest): container "rema" in pod "rema-57df6cf5fc-px8pc" is waiting to start: image can't be pulled

但我确实有来自码头工人的图像:

robinhood $ docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
cpchung/rema                                    latest              14a4957873cd        2 hours ago         224MB

这里可能有什么问题?我正在使用带有 docker-desktop 的 mac。

【问题讨论】:

Kubernetes 在哪里运行以及如何运行?映像需要位于集群配置访问的存储库中。 你可以在这里添加你的deployment.yaml文件 【参考方案1】:

https://***.com/a/52763242/3514300 应该会为你解决问题

在您的部署中添加imagePullPolicy: Never

默认情况下,没有标签的图像在 docker 中被赋予latest 标签。默认情况下,Kubernetes 会尝试为 latest 标签提取图像,但无法在 dockerhub 中找到该图像。 https://kubernetes.io/docs/concepts/containers/images/#updating-images

另一种方法是将您的图像也推送到 dockerhub。

【讨论】:

添加imagePullPolicy: Never 有效,但随后出现此错误:``` curl localhost:8080/actuator/health "timestamp":"2020-03-05T18:52:37.055+0000", "status":404,"error":"Not Found","message":"No message available","path":"/actuator/health" ``` 从 pod 日志,我看到服务正在运行.那么这里有什么问题呢? 再次检查您是否正确启用了执行器docs.spring.io/spring-boot/docs/current/reference/html/… 即使我使用curl localhost:8080/api 这是一个已实现的端点,它也不起作用。当我使用 docker run 运行它时它可以工作 在部署中添加容器端口kubernetes.io/docs/concepts/services-networking/…

以上是关于Kubernetes:无法拉取图像的主要内容,如果未能解决你的问题,请参考以下文章

测试容器无法拉取 ryuk 镜像:无法访问 quay.io

Elastic Beanstalk Docker 映像无法拉取

Android 模拟器:无法拉取选择

Clappr 似乎无法拉取视频(使用 rtmp/nginx)

解决Jenkins maven SNAPSHOT相关jar无法拉取问题

git修改密码后无法拉取提交代码