【问题标题】:How to run multiple containers within the same pod in kubernetes clusture?如何在 kubernetes 集群的同一个 pod 中运行多个容器?
【发布时间】:2019-05-06 15:08:16
【问题描述】:

我有 2 个码头集装箱。一个包含 tomcat 服务器,另一个包含 MySQL 数据库。我想在单个 pod 上运行这些容器,因为 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

我使用

运行了这个 pod
kubectl apply -f pod.yaml

然后我暴露了 pod 使用

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 生命周期异常。

【问题讨论】:

  • 您几乎总是分别运行这两个东西:Tomcat 的 Deployment,以及带有附加 PersistentVolumeClaim 的用于 MySQL 的 StatefulSet,以及每个前面的 Service。
  • 你能给我举个例子吗?我的意思是如果我单独运行 yaml 文件应该是什么样子??
  • 实际上我也尝试使用 kompose convert 将 docker-compose.yaml 转换为 kubeternete,但我的 war 文件仍然无法启动

标签: docker kubernetes docker-compose


【解决方案1】:

YAML sn-p 中的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

【讨论】:

  • 我说错误:错误验证“pod.yaml”:错误验证数据:[ValidationError(Pod.metadata): io.k8s.apimachinery.pkg.apis.meta 中的未知字段“app”。 v1.ObjectMeta,ValidationError(Pod.spec.containers[0].ports):io.k8s.api.core.v1.Container.ports 的类型无效:得到“map”,预期“array”,ValidationError(Pod.spec .containers[1].ports):io.k8s.api.core.v1.Container.ports 的类型无效:得到“map”,预期为“array”];如果您选择忽略这些错误,请使用 --validate=false 关闭验证
【解决方案2】:

不建议在同一个 pod 中同时运行 ui 和数据库服务。它将实现 ui 和 db 之间的硬耦合。

最好在单独的 pod 中运行 ui 和 db。 ui 可以使用服务 dns 与 mysql 数据库通信。考虑在有状态的集合中运行mysql来维护应用程序状态

【讨论】:

  • 我虽然同一个 pod 中的容器可以使用共享卷进行通信??
  • 您可以在一个 pod 中运行多个容器。但这不是一个好习惯。
  • 如果我为 tomcat 和 statefulset 为具有持久卷的 mysql 创建部署......那会是一个好习惯吗??
  • 我试过那个方法,但是我的war文件没有在tomcat管理器应用程序中启动!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 2023-01-10
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-12-28
相关资源
最近更新 更多