首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换码头-使用Kompose在GKE上部署工作负载

转换码头-使用Kompose在GKE上部署工作负载
EN

Stack Overflow用户
提问于 2022-01-24 09:26:52
回答 1查看 600关注 0票数 1

我有用Django Restframework编写的项目,用于执行长期运行任务的芹菜,作为代理的Redis和用于监视芹菜任务的Flower。我编写了一个Dockerfile & docker-compose.yaml来创建一个网络,并在容器中运行这个服务。

Dockerfile

代码语言:javascript
复制
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

代码语言:javascript
复制
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

这个Dockerfile & docker-compose运行得很好,现在我想将这个应用程序部署到GKE。我偶然发现了Kompose,它将docker-compose转换为kubernetes资源。我阅读了文档并开始执行这些步骤,第一步是运行kompose convert。这会返回少量警告,并创建几个文件,如下所示-

代码语言:javascript
复制
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 

我忽略了警告并移到下一步,即运行命令

代码语言:javascript
复制
kubectl apply -f flower-service.yaml, ibdax-backend-service.yaml, redis-service.yaml, celery-deployment.yaml

但我知道这个错误-

代码语言:javascript
复制
error: Unexpected args: [ibdax-backend-service.yaml, redis-service.yaml, celery-deployment.yaml]

所以我打算一个接一个地申请-

代码语言:javascript
复制
kubectl apply -f flower-service.yaml

但我知道这个错误-

代码语言:javascript
复制
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命令将如何识别我创建的集群并在其上部署我的应用程序。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-24 11:03:22

kompose convert之后,花-service.yaml文件有重复的端口--这就是错误的意思。

代码语言:javascript
复制
...
  ports:
    - name: "5555"
      port: 5555
      targetPort: 5555
    - name: 5555-tcp
      port: 5555
      targetPort: 5555
...

您可以删除端口name: "5555"name: 5555-tcp

例如,将端口块替换为

代码语言:javascript
复制
  ports:
    - name: 5555-tcp
      port: 5555
      targetPort: 5555

并再次部署服务。

我还建议将端口名更改为更具描述性的名称。

同样的情况发生在ibdax-后端-service.yaml文件中。

代码语言:javascript
复制
...
  ports:
    - name: "80"
      port: 80
      targetPort: 80
    - name: 80-tcp
      port: 80
      targetPort: 80
...

您可以删除其中一个定义,并重新部署服务(还建议将端口名更改为更具描述性的名称)。

kompose不是一个完美的工具,它总是给你一个完美的结果。您应该检查生成的文件中是否有冲突和/或缺少的字段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70831569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档