Как запустить несколько контейнеров в одном модуле в кластере kubernetes? - PullRequest
0 голосов
/ 06 мая 2019

У меня есть 2 док-контейнера.один, содержащий сервер Tomcat, а другой, содержащий базу данных MySQL.Я хочу запустить эти контейнеры на одном модуле, поскольку tomcat должен получить доступ к базе данных MySQL.

Что я пробовал:

pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: tomcat-mysql-pod
  labels:
  app: tomcat-mysql-pod
spec:
containers:
- name: kubernetestomcatcontainer
  image: suji165475/vignesh:tomcatserver
  ports:
- containerPort: 8080
containers:
- name: kubernetesmysqlcontainer
  image: suji165475/vignesh:latest
  ports:
- containerPort: 3306

Я запустилэтот модуль, используя

kubectl apply -f pod.yaml

, затем я открыл модуль, используя

kubectl expose pod tomcat-mysql-pod --type=NodePort --port=8080

В настоящее время я могу получить доступ только к домашней странице tomcat, используя https://serveripaddress:nodeport, но не мое приложение для весенней загрузки, используя https://serveripaddress:nodeport/data-core-0.0.1-SNAPSHOT.???

ПРИМЕЧАНИЕ : приложение работает и отлично работает при запуске контейнеров с помощью docker-compose.yaml и затем команды docker-compose up.Но когда я запускаю это на kubernetes, я получаю исключение жизненного цикла Catalina в приложении менеджера tomcat при запуске моего файла войны.

Ответы [ 3 ]

0 голосов
/ 06 мая 2019

Не рекомендуется запускать службы пользовательского интерфейса и базы данных в одном модуле. Это позволило бы жесткую связь между пользовательским интерфейсом и дБ.

Лучше запустить UI и DB в отдельных модулях. Пользовательский интерфейс может общаться с базой данных MySQL, используя службу DNS. Рассмотрите возможность запуска mysql в режиме Stateful для поддержания состояния приложения

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

хорошо, я создал набор состояний для mysql вместе с постоянным томом и постоянным требованием к объему.после запуска модуль находится в состоянии ожидания, так как модуль имеет немедленное освобождение от привязки. PersistentVolumeClaims.Как я могу решить эту проблему?

apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: statefulset-mydb
spec:
serviceName: mydb-pod
template:
 metadata:
  labels:
   name: mydb-pod
 spec:
  containers:
   - name: mysql-database
     image: suji165475/vignesh:latest
     ports:
      - containerPort: 3306
     volumeMounts:
      - name: volume-mydb
        mountPath: /docker-entrypoint-initdb.d
  volumes:
   - name: volume-mydb
     persistentVolumeClaim:
      claimName: config-mydb

---
kind: PersistentVolume
apiVersion: v1
metadata:
 name: sfg-dev-mysql-pv-volume
 labels:
   type: local
spec:

 capacity:
   storage: 1Gi
 accessModes:
   - ReadWriteOnce
 hostPath:
   path: "/tmp/data"  //this is where my sql script is present

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: config-mydb
spec:
accessModes:
 - ReadWriteOnce
resources:
 requests:
  storage: 3Gi

Я построил свои изображения, используя следующие файлы 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

0 голосов
/ 06 мая 2019

Эта строка containers: в вашем фрагменте YAML является именем коллекции, и элементы в ней должны перечисляться с использованием дефисов с отступом в том же столбце.

Вы должны попробовать что-то вроде:

apiVersion: v1
kind: Pod
metadata:
  name: tomcat-mysql-pod
  labels:
  app: tomcat-mysql-pod
spec:
  containers:
  - name: kubernetestomcatcontainer
    image: suji165475/vignesh:tomcatserver
    ports:
      containerPort: 8080
  - name: kubernetesmysqlcontainer
    image: suji165475/vignesh:latest
    ports:
      containerPort: 3306
...