как запустить docker-compose.yaml на kubernetes? - PullRequest
1 голос
/ 07 мая 2019

Мой файл docker-compose, состоящий из сервера tomcat7 и базы данных mysql


version: '3'
services:
      mysql:
        image: suji165475/vignesh:latest
        ports:
          - "3066:3066"

      tomcat:
        image: suji165475/vignesh:tomcatserver
        container_name: tomcat7hope
        ports:
          - "8080:8080"

Я построил образы с помощью файлов docker

FROM mysql
ENV MYSQL_ROOT_PASSWORD=root
ADD init.sql /docker-entrypoint-initdb.d
FROM picoded/tomcat7
COPY data-core-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/data-core-0.0.1-SNAPSHOT.war

как запустить это на кластере kubernetes??Я уже попробовал kompose convert, и мой war-файл не запускается в менеджере приложений tomcats. Но war-файл успешно запускается с использованием docker-compose.

Почему я сталкиваюсь с этой проблемой только в kubernetes, а не при непосредственном запуске docker-составьте. Пожалуйста, помогите мне, сообщив мне, какие изменения я должен внести в файлы yaml kubernetes.

mysql-deploy.yaml

 apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.18.0 (06a2e56)
  creationTimestamp: null
  labels:
    io.kompose.service: mysql
  name: mysql
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: mysql
    spec:
      containers:
      - image: suji165475/vignesh:latest
        name: mysql
        ports:
        - containerPort: 3066
        resources: {}
      restartPolicy: Always
status: {}

tomcat-deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.18.0 (06a2e56)
  creationTimestamp: null
  labels:
    io.kompose.service: tomcat
  name: tomcat
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        io.kompose.service: tomcat
    spec:
      containers:
      - image: suji165475/vignesh:tomcatserver
        name: tomcat7hope
        ports:
        - containerPort: 8080
        resources: {}
      restartPolicy: Always
status: {}

mysql-service.yaml

apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.18.0 (06a2e56)
  creationTimestamp: null
  labels:
    io.kompose.service: mysql
  name: mysql
spec:
  ports:
  - name: "3066"
    port: 3066
    targetPort: 3066
  selector:
    io.kompose.service: mysql
status:
  loadBalancer: {}

tomcat-service.yaml

apiVersion: v1
kind: Service
metadata:
  annotations:
    kompose.cmd: kompose convert
    kompose.version: 1.18.0 (06a2e56)
  creationTimestamp: null
  labels:
    io.kompose.service: tomcat
  name: tomcat
spec:
  ports:
  - name: "8080"
    port: 8080
    targetPort: 8080
  selector:
    io.kompose.service: tomcat
status:
  loadBalancer: {}

1 Ответ

2 голосов
/ 07 мая 2019

Позвольте мне прояснить, что вы не можете "запускать docker-compose" в Kubernetes.Если вы хотите это сделать, вам не следует использовать Kubernetes.

С учетом сказанного, использование kompose не такая уж хорошая идея.Все файлы yaml, создаваемые Docker, различаются, и kompose просто делает предположение о том, как будут выглядеть связанные манифесты Kubernetes.Если ваше приложение очень простое и вам повезло, kompose может дать вам ваши манифесты, готовые к развертыванию, но обычно это не так.

Может быть несколько причин, почему это не работает длявы:

  • ваше tomcat приложение неправильно ссылается на вашу mysql службу
  • в вашем mysql развертывании отсутствуют некоторые переменные или подключенные тома / файлы

Ваше приложение tomcat может ссылаться на ваши mysql db до mysql:3066, и вам может потребоваться добавить некоторые переменные среды в вашем развертывании tomcat, такие как имя db, имя пользователя db и пароль db для аутентификации.Вот ваши отредактированные tomcat манифесты:

deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: tomcat
  namespace: default
  labels:
    app: tomcat
spec:
  replicas: 1
  selector:
    matchLabels:
      app: tomcat
  template:
    metadata:
      labels:
        app: tomcat
    spec:
      containers:
      - image: suji165475/vignesh:tomcatserver
        name: tomcat7hope
        ports:
        - containerPort: 8080

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: tomcat
  namespace: default
  labels:
    app: tomcat
spec:
  ports:
  - name: "8080"
    port: 8080
    targetPort: 8080
  selector:
    app: tomcat

Для вашего mysql развертывания может потребоваться PersistentVolumeClaim или emptyDir для хранения ваших данных.Посмотрите на подключенные тома и убедитесь, что вы не пропустили ни одного монтирования тома или необходимых переменных среды.Вот ваши отредактированные mysql манифесты:

deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mysql
  namespace: default
  labels:
    app: mysql
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: suji165475/vignesh:latest
        name: mysql
        ports:
        - containerPort: 3066
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: root

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: default
  labels:
    app: mysql
spec:
  ports:
  - name: "3066"
    port: 3066
    targetPort: 3066
  selector:
    app: mysql
...