【问题标题】:Application not properly deployed using Kuberenetes未使用 Kubernetes 正确部署应用程序
【发布时间】:2018-11-20 11:50:09
【问题描述】:

我正在开发一个 Spring Boot 应用程序,我使用 docker-compose 来创建我的容器。对于 Kubernetes,我通过 minikubes 使用了 kompose。我将图像推送到 docker hub,并尝试以两种方式部署我的容器

组合起来

kompose 转换 -f docker-compose.yaml kubectl create -f (deplymentfiles)

但我得到了这个回应

WARN Volume mount on the host "/home/App/src/main/docker/postgres-data" isn't supported - ignoring path on the host 
INFO We are going to create Kubernetes Deployments, Services and PersistentVolumeClaims for your Dockerized application. If you need different kind of resources, use the 'kompose convert' and 'kubectl create -f' commands instead. 

INFO Deploying application in "default" namespace 
INFO Successfully created Service: adminer        
INFO Successfully created Service: app            
INFO Successfully created Service: mypostgres     
INFO Successfully created Deployment: adminer     
INFO Successfully created Deployment: app         
INFO Successfully created Deployment: mypostgres  
INFO Successfully created PersistentVolumeClaim: mypostgres-claim0 of size 100Mi. If your cluster has dynamic storage provisioning, you don't have to do anything. Otherwise you have to create PersistentVolume to make PVC work 

当我运行kubectl get pods

NAME                           READY     STATUS             RESTARTS   AGE
adminer-6cd96f8846-69qb8       1/1       Running            0          2m
app-5796c489ff-m46xk           0/1       ImagePullBackOff   0          2m
mypostgres-649865b4d8-nhglj    1/1       Running            0          2m

kubectl 描述 pod app-5796c489ff-m46xk

显示这个

Name:           app-5796c489ff-m46xk
Namespace:      default
Node:           minikube/192.168.99.100
Start Time:     Mon, 11 Jun 2018 11:02:32 +0200
Labels:         io.kompose.service=app
                pod-template-hash=1352704599
Annotations:    <none>
Status:         Pending
IP:             172.17.0.3
Controlled By:  ReplicaSet/app-5796c489ff
Containers:
  app:
    Container ID:   
    Image:          iroolapp
    Image ID:       
    Port:           8086/TCP
    Host Port:      0/TCP
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Environment:
      DATABASE_HOST:      mypostgres
      DATABASE_NAME:      test
      DATABASE_PASSWORD:  root
      DATABASE_PORT:      5432
      DATABASE_USER:      root
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-wdb8n (ro)
Conditions:
  Type           Status
  Initialized    True 
  Ready          False 
  PodScheduled   True 
Volumes:
  default-token-wdb8n:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-wdb8n
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     <none>
Events:
  Type     Reason                 Age              From               Message
  ----     ------                 ----             ----               -------
  Normal   Scheduled              3m               default-scheduler  Successfully assigned app-5796c489ff-m46xk to minikube
  Normal   SuccessfulMountVolume  3m               kubelet, minikube  MountVolume.SetUp succeeded for volume "default-token-wdb8n"
  Normal   Pulling                1m (x4 over 3m)  kubelet, minikube  pulling image "iroolapp"
  Warning  Failed                 1m (x4 over 3m)  kubelet, minikube  Failed to pull image "iroolapp": rpc error: code = Unknown desc = Error response from daemon: pull access denied for iroolapp, repository does not exist or may require 'docker login'
  Warning  Failed                 1m (x4 over 3m)  kubelet, minikube  Error: ErrImagePull
  Normal   BackOff                1m (x6 over 3m)  kubelet, minikube  Back-off pulling image "iroolapp"
  Warning  Failed                 1m (x6 over 3m)  kubelet, minikube  Error: ImagePullBackOff

最后这是我的 docker-compose 文件

version: '3'
services:
  app:
    image: iroolapp
    depends_on:
    - mypostgres
    ports:
     - "9000:8086"
    environment:
      - DATABASE_HOST=mypostgres
      - DATABASE_USER=root
      - DATABASE_PASSWORD=root
      - DATABASE_NAME=test
      - DATABASE_PORT=5432

    networks:
        default:

  mypostgres:
    image: postgres:9.6-alpine
    container_name: mypostgres

    ports:
     - "5433:5432"


    environment:
     - POSTGRES_PASSWORD=root
     - POSTGRES_USER=root
     - POSTGRES_DB=irooldb
    volumes:
    - ./postgres-data:/var/lib/postgresql/data

  adminer:
    image: adminer
    ports:
      - 8080:8080
    networks:
        default:

networks:
   default:
      external:
        name: mynetwork

我的问题是:ImagePullBackoff 指的是什么?使用 kompose 是一个好方法吗?在使用 kubernetes 之前将图像推送到 docker hub 是否是必要的步骤

【问题讨论】:

    标签: docker kubernetes docker-compose kompose


    【解决方案1】:

    第一季度

    ImagePullBackoff 指的是什么

    从日志中可以看到,它尝试了多次从注册表中拉取镜像“iroolapp”pod app-5796c489ff-m46xk 的容器需求(参见pod 的container 的字段image),均失败。 ImagePullBackoff 发生在这些失败之后。

    第二季度

    使用 kompose 是个好方法吗?

    没用过……

    第三季度

    在使用 kubernetes 之前将图像推送到 docker hub 是否是必要的步骤

    不是。如果只是为了简单的测试,您可以通过将imagePullPolicy 设置为IfNotPresetNever 来使用本地图像(确保图像已加载)。或者,您可以拥有自己的私人注册表。

    【讨论】:

    • 感谢您的回复。所以你建议我做什么?我该如何解决这个问题?
    【解决方案2】:

    ImagePullBackoff 表示无法获取图片。

    您真的阅读过错误信息吗?它说Failed to pull image "iroolapp": rpc error: code = Unknown desc = Error response from daemon: pull access denied for iroolapp, repository does not exist or may require 'docker login'

    您是否已登录 docker hub?您的图像在 docker hub 中吗?因为那是它试图拉取图像的地方。

    【讨论】:

    • 感谢您的回复。事实上,是的,我已登录到 docker hub,并且我确实将我的图像推送到了 docker hub“docker push /iroolapp”中,当我咨询我的 docker hub 帐户时,我的图像存在。
    【解决方案3】:

    我想通了,实际上在我的 docker-compose 文件中,我应该指定引用发布在 docker hub 中推送的存储库中的图像的图像:

    image: docker.io/<dockerHub username>/<imagename>
    

    【讨论】:

      【解决方案4】:

      我认为图像名称根本没有正确的方向。如果您存储在您的 repo 中,则提供完整路径,如 "username/repo:tag" 或首先在终端 "docker search imagename" 中通过命令搜索。 Kubernetes 一次又一次地拉取图像直到运行状态,所以可能是 RESTART 计数变高。所以给它正确的 url 或私有 repo 路径。

      【讨论】:

      • 如果您可以通过一些相关示例和步骤清楚地定义您的答案,那就太好了。
      • 镜像名称和路径应该是 :- index.docker.io//: 。这是从 dockerhub a/c 获取自己的图像的正确理想方法。如果您想获取其他图像,请尝试使用终端命令 - docker search httpd(imagename) ------ 之后选择其中任何一个来拉取。
      • 您能否编辑您的答案并在您的答案中添加上述评论!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-17
      • 2019-10-20
      • 2013-08-16
      • 2021-11-25
      • 2016-01-27
      • 2022-01-15
      • 2015-02-19
      相关资源
      最近更新 更多