繁体   English   中英

Kompose for docker-compose 不使用卷

[英]Kompose for docker-compose not use volumes

我使用 Kompose 将 docker-compose 转换为 Kubernetes 文件。 当我使用在 Docker(无 Kubernetes)上运行的图像时,它使用 postgres 卷来保存持久数据。 现在,使用相同的 docker-compose,如果我使用用 Kompose 创建的文件运行 Kubernetes,则每次启动 Kubernetes 时,数据库都是空的。 这怎么可能? 如果我查看 Docker Desktop,实际上,我看到这些卷没有标签“IN USE”。

我怎么做?

先感谢您!

docker-compose.yaml:

version: '3'
services:
  eureka-server:
    image: com.petcare/eureka-server:0.0.1-SNAPSHOT
    container_name: eureka-server
    expose:
      - 8761

  auth-service:
    image: com.petcare/auth-service:0.0.1-SNAPSHOT
    container_name: auth-service
    expose:
      - 8081
    depends_on:
      - eureka-server
      - postgresqldb

  map-service:
    image: com.petcare/map-service:0.0.1-SNAPSHOT
    container_name: map-service
    expose:
      - 8082
    depends_on:
      - eureka-server
      - postgresqldb

  reservation-service:
    image: com.petcare/reservation-service:0.0.1-SNAPSHOT
    container_name: reservation-service
    expose:
      - 8083
    depends_on:
      - eureka-server
      - postgresqldb

  user-service:
    image: com.petcare/user-service:0.0.1-SNAPSHOT
    container_name: user-service
    expose:
      - 8084
    depends_on:
      - eureka-server
      - postgresqldb

  api-gateway:
    image: com.petcare/api-gateway:0.0.1-SNAPSHOT
    container_name: api-gateway
    expose:
      - 8080
    depends_on:
      - eureka-server
    labels:
      kompose.service.type: NodePort
      kompose.service.nodeport.port: "30000"

  postgresqldb:
    image: postgres
    container_name: postgres
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_DB=websitepetcare
    volumes:
      - database-data:/var/lib/postgresql/data/
    labels:
      kompose.service.type: NodePort
      kompose.service.nodeport.port: "30002"

  pgadmin:
    container_name: pgadmin4_container
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: admin@admin.com
      PGADMIN_DEFAULT_PASSWORD: root
      PGADMIN_LISTEN_PORT: 50
    ports:
      - "5050:50"
    volumes:
      - pgadmin-data:/var/lib/pgadmin
    links:
      - "postgresqldb:pgsql-server"
    depends_on:
      - postgresqldb
    labels:
      kompose.service.type: NodePort
      kompose.service.nodeport.port: "30001"

volumes:
  database-data:
    external: true
  pgadmin-data:
    external: true

使用 kompose convert 创建的文件:

apiVersion: v1
items:
  - apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe convert -o kubernetes-services-deployments.yaml
        kompose.service.nodeport.port: "30001"
        kompose.service.type: NodePort
        kompose.version: 1.26.0 (40646f47)
      creationTimestamp: null
      labels:
        io.kompose.service: pgadmin
      name: pgadmin
    spec:
      replicas: 1
      selector:
        matchLabels:
          io.kompose.service: pgadmin
      strategy:
        type: Recreate
      template:
        metadata:
          annotations:
            kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe convert -o kubernetes-services-deployments.yaml
            kompose.service.nodeport.port: "30001"
            kompose.service.type: NodePort
            kompose.version: 1.26.0 (40646f47)
          creationTimestamp: null
          labels:
            io.kompose.service: pgadmin
        spec:
          containers:
            - env:
                - name: PGADMIN_DEFAULT_EMAIL
                  value: admin@admin.com
                - name: PGADMIN_DEFAULT_PASSWORD
                  value: root
                - name: PGADMIN_LISTEN_PORT
                  value: "50"
              image: dpage/pgadmin4
              name: pgadmin4-container
              ports:
                - containerPort: 50
              resources: {}
              volumeMounts:
                - mountPath: /var/lib/pgadmin
                  name: pgadmin-data
          restartPolicy: Always
          volumes:
            - name: pgadmin-data
              persistentVolumeClaim:
                claimName: pgadmin-data
    status: {}
  - apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: pgadmin-data
      name: pgadmin-data
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 100Mi
    status: {}
  - apiVersion: apps/v1
    kind: Deployment
    metadata:
      annotations:
        kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe convert -o kubernetes-services-deployments.yaml
        kompose.service.nodeport.port: "30002"
        kompose.service.type: NodePort
        kompose.version: 1.26.0 (40646f47)
      creationTimestamp: null
      labels:
        io.kompose.service: postgresqldb
      name: postgresqldb
    spec:
      replicas: 1
      selector:
        matchLabels:
          io.kompose.service: postgresqldb
      strategy:
        type: Recreate
      template:
        metadata:
          annotations:
            kompose.cmd: C:\ProgramData\chocolatey\lib\kubernetes-kompose\tools\kompose.exe convert -o kubernetes-services-deployments.yaml
            kompose.service.nodeport.port: "30002"
            kompose.service.type: NodePort
            kompose.version: 1.26.0 (40646f47)
          creationTimestamp: null
          labels:
            io.kompose.service: postgresqldb
        spec:
          containers:
            - env:
                - name: POSTGRES_DB
                  value: websitepetcare
                - name: POSTGRES_PASSWORD
                  value: postgres
                - name: POSTGRES_USER
                  value: postgres
              image: postgres
              name: postgres
              ports:
                - containerPort: 5432
              resources: {}
              volumeMounts:
                - mountPath: /var/lib/postgresql/data/
                  name: database-data
          restartPolicy: Always
          volumes:
            - name: database-data
              persistentVolumeClaim:
                claimName: database-data
    status: {}
  - apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: database-data
      name: database-data
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 100Mi
    status: {}
kind: List
metadata: {}

您在评论中写道:

当我想全部删除时,我运行以下命令:

 kubectl delete -f kubernetesFile.yaml

当我再次启动所有服务时:

 kubectl apply -f kubernetesFile.yaml

我的数据库是空的。

Kompose 转换的kubernetesFile.yaml包含所有 Kubernetes 资源,包括告诉它保存持久数据的 PersistentVolumeClaim。 因此,当您kubectl delete -f kubernetesFile.yaml时,它会删除 PersistentVolumeClaim 和数据,然后当您重新apply它时,您会得到一个新的空卷。

您无需在此处运行kubectl delete 只需在设置更改时运行kubectl apply -f kubernetesFile.yaml 任何更新的内容都将被更改,并且集群将根据需要删除并重新创建 Pod。 任何未更新的内容都将保持不变。 如果您删除部署或其他资源,则必须手动删除( kubectl delete deployment unused-deployment )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM