簡體   English   中英

使用 Kompose 轉換 docker-compose 以在 GKE 上部署工作負載

[英]Converting docker-compose using Kompose to deploy workloads on GKE

I have project written in Django Restframework, Celery for executing long running task, Redis as a broker and Flower for monitoring Celery task. 我寫了一個Dockerfile & docker-compose.yaml來創建一個網絡並在容器內運行此服務。

Dockerfile

FROM python:3.7-slim

ENV PYTHONUNBUFFERED 1

RUN apt-get update &&\
    apt-get install python3-dev default-libmysqlclient-dev gcc  -y &&\
    apt-get install -y libssl-dev libffi-dev &&\
    python -m pip install --upgrade pip &&\
    mkdir /ibdax

WORKDIR /ibdax

COPY ./requirements.txt /requirements.txt

COPY . /ibdax

EXPOSE 80

EXPOSE 5555

ENV ENVIRONMENT=LOCAL

#install dependencies
RUN pip install -r /requirements.txt

RUN pip install django-phonenumber-field[phonenumbers]
RUN pip install drf-yasg[validation]

docker-compose.yaml

version: "3"

services:
  redis:
    container_name: redis-service
    image: "redis:latest"
    ports:
      - "6379:6379"
    restart: always
    command: "redis-server"

  ibdax-backend:
    container_name: ibdax
    build:
      context: .
      dockerfile: Dockerfile
    image: "ibdax-django-service"
    volumes:
      - .:/ibdax
    ports:
      - "80:80"
    expose:
      - "80"
    restart: always
    env_file:
      - .env.staging
    command: >
      sh -c "daphne -b 0.0.0.0 -p 80 ibdax.asgi:application"
    links:
      - redis

  celery:
    container_name: celery-container
    image: "ibdax-django-service"
    command: "watchmedo auto-restart -d . -p '*.py' -- celery  -A ibdax worker -l INFO"
    volumes:
      - .:/ibdax
    restart: always
    env_file:
      - .env.staging
    links:
      - redis
    depends_on:
      - ibdax-backend

  flower:
    container_name: flower
    image: "ibdax-django-service"
    command: "flower -A ibdax --port=5555 --basic_auth=${FLOWER_USERNAME}:${FLOWER_PASSWORD}"
    volumes:
      - .:/ibdax
    ports:
      - "5555:5555"
    expose:
      - "5555"
    restart: always
    env_file:
      - .env
      - .env.staging
    links:
      - redis
    depends_on:
      - ibdax-backend

這個Dockerfiledocker-compose工作得很好,現在我想將此應用程序部署到 GKE。 我遇到了Kompose它將 docker-compose 轉換為 kubernetes docker-compose 我閱讀了文檔並開始按照步驟操作,第一步是運行kompose convert 這返回了一些警告並創建了一些文件,如下所示 -

WARN Service "celery" won't be created because 'ports' is not specified 
WARN Volume mount on the host "/Users/jeetpatel/Desktop/projects/ibdax" isn't supported - ignoring path on the host 
WARN Volume mount on the host "/Users/jeetpatel/Desktop/projects/ibdax" isn't supported - ignoring path on the host 
WARN Volume mount on the host "/Users/jeetpatel/Desktop/projects/ibdax" isn't supported - ignoring path on the host 
INFO Kubernetes file "flower-service.yaml" created 
INFO Kubernetes file "ibdax-backend-service.yaml" created 
INFO Kubernetes file "redis-service.yaml" created 
INFO Kubernetes file "celery-deployment.yaml" created 
INFO Kubernetes file "env-dev-configmap.yaml" created 
INFO Kubernetes file "celery-claim0-persistentvolumeclaim.yaml" created 
INFO Kubernetes file "flower-deployment.yaml" created 
INFO Kubernetes file "flower-claim0-persistentvolumeclaim.yaml" created 
INFO Kubernetes file "ibdax-backend-deployment.yaml" created 
INFO Kubernetes file "ibdax-backend-claim0-persistentvolumeclaim.yaml" created 
INFO Kubernetes file "redis-deployment.yaml" created 

我忽略了警告並轉到下一步,即運行命令

kubectl apply -f flower-service.yaml, ibdax-backend-service.yaml, redis-service.yaml, celery-deployment.yaml

但我得到這個錯誤 -

error: Unexpected args: [ibdax-backend-service.yaml, redis-service.yaml, celery-deployment.yaml]

因此我打算像這樣一個一個地申請——

kubectl apply -f flower-service.yaml

但我得到這個錯誤 -

The Service "flower" is invalid: spec.ports[1]: Duplicate value: core.ServicePort{Name:"", Protocol:"TCP", AppProtocol:(*string)(nil), Port:5555, TargetPort:intstr.IntOrString{Type:0, IntVal:0, StrVal:""}, NodePort:0}

不知道我哪里錯了。

此外, Kompose的先決條件是擁有一個Kubernetes集群,所以我創建了一個帶有公共網絡的 Autopilot 集群。 現在我不確定這個 apply 命令將如何識別我創建的集群並在其上部署我的應用程序。

kompose convert您的flower-service.yaml文件后,端口重復 - 這就是錯誤的意思。

...
  ports:
    - name: "5555"
      port: 5555
      targetPort: 5555
    - name: 5555-tcp
      port: 5555
      targetPort: 5555
...

您可以刪除端口name: "5555"name: 5555-tcp
例如,將端口塊替換為

  ports:
    - name: 5555-tcp
      port: 5555
      targetPort: 5555

並再次部署服務。
我還建議將端口名稱更改為更具描述性的名稱。


ibdax-backend-service.yaml文件也會發生同樣的事情。

...
  ports:
    - name: "80"
      port: 80
      targetPort: 80
    - name: 80-tcp
      port: 80
      targetPort: 80
...

您可以刪除其中一個定義,然后重新部署服務(還建議將端口名稱更改為更具描述性的名稱)。


kompose不是一個完美的工具,它總會給你一個完美的結果。 您應該檢查生成的文件是否存在任何可能的沖突和/或缺少的字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM