如何在kubernetes集群的同一容器中运行多个容器?

时间:2019-05-06 15:08:17

标签: docker kubernetes docker-compose

我有2个Docker容器。一个包含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

当前,我只能使用https://serveripaddress:nodeport访问tomcat主页,而不能使用https://serveripaddress:nodeport/data-core-0.0.1-SNAPSHOT访问我的spring boot应用程序?

注意:使用docker-compose.yaml然后使用docker-compose up命令运行容器时,该应用程序可以正常运行并完美运行。但是,当我在kubernetes上运行它时,在启动我的war文件时,我在tomcat的管理器应用程序中得到了Catalina生命周期异常。

3 个答案:

答案 0 :(得分:0)

YAML代码段中的containers:行是集合的名称,应使用同一列上的短划线来枚举集合中的项目。

您应该尝试类似的操作

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

答案 1 :(得分:0)

不建议在同一容器中同时运行ui和数据库服务。这将使ui和db之间实现硬耦合。

最好在单独的Pod中运行ui和db。 UI可以使用服务dns通信mysql数据库。考虑在状态集中运行mysql以维持应用程序状态

答案 2 :(得分:0)

好吧,我为持久性卷和持久性卷声明创建了mysql状态集。运行此命令后,该Pod处于待处理状态,因为该Pod具有未绑定的立即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