当前位置: 首页 > 知识库问答 >
问题:

如何在Kubernetes中配置多个服务/容器?

章昊
2023-03-14

我是码头工人和库伯内特斯的新手。使用的技术:

    < li >点网核心2.2 < li>Asp。NET Core WebAPI 2.2 < li >启用Kubernetes支持的Docker for windows(Edge) < li >代码

我将两个服务托管到两个docker容器容器1和容器2中。

下面是我的部署。yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: webapi-dockerkube
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: webapi-dockerkube
    spec:
      containers:
      - name: webapi-dockerkube
        image: "webapidocker:latest"
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /api/values
            port: 80
        readinessProbe:
          httpGet:
            path: /api/values
            port: 80
      - name: webapi-dockerkube2
        image: "webapidocker2:latest"
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        livenessProbe:
          httpGet:
            path: /api/other/values
            port: 80
        readinessProbe:
          httpGet:
            path: /api/other/values
            port: 80

当我运行命令时:

kubectl create -f .\deploy.yaml

我获得的状态为 CrashLoopBackOff

但是当我只配置了一个容器时,同样运行正常。检查日志时,我收到以下错误:来自服务器的错误(Bad请求):必须为pod webapi-dockerkube-86586998-9f8mk指定容器名称,选择其中之一:[webapi-dockerkube webapi-dockerkube2]

共有2个答案

郑和泰
2023-03-14
apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:

  restartPolicy: Never

  volumes:
  - name: shared-data
    emptyDir: {}

  containers:

  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html

  - name: debian-container
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh"]
    args: ["-c", "echo Hello from the debian container > /pod-data/index.html"] 

这里共享多容器的示例,您可以使用该模板

您还可以查看使用的日志

Kubectl日志

检查crash循环返回的原因

隆安然
2023-03-14

您在同一个pod中运行两个容器,这两个容器都绑定到端口80。这在同一个pod内是不可能的。把一个pod想象成一个“服务器”,你不能让两个进程绑定到同一个端口。

针对您的情况的解决方案:使用pod内部的不同端口或使用单独的pod。从您的部署来看,似乎没有像文件系统这样的共享资源,所以很容易将容器分割成单独的单元。

请注意,如果您想让两个容器在具有不同端口的同一个pod中运行,更改pod定义是不够的。容器中的应用程序也必须绑定到不同的端口。

 类似资料:
  • 我正在尝试使用单个Service yaml在多个节点上设置对Pods的访问。Pods都有相同的标签(例如),但分布在多个节点上,而不是在单个节点上。 据我所知,我可以设置一个服务,通过节点端口转发对Pod的访问,比如: 其中访问节点上的端口30000会转发到pod上的端口5000。 如果我在多个节点上有pod,有没有一种方法可以让客户端访问一个endpoint,例如服务本身,从而在循环中获得任何p

  • 从spring文档中,我看到我们可以一起拥有对等eureka服务器,因此对于Application.yml中的Eureka1,我可以拥有: 在Eureka服务器2中,我可以:

  • 我正在使用Eclipse Juno,并且通过windows安装程序在我的PC中安装了Apache Tomcat/8.0.0-RC5。当我尝试在Eclipse中定义新服务器时,在Apache下,我没有Tomcat v8.0选项。它在Tomcat v7.0停止。如何让Apache Tomcat v8.0在Eclipse中运行?

  • null 我的问题是: 是否需要创建文件,然后在文件中引用它们,或者部署文件也可以嵌入pod定义? K8S文档似乎暗示的部分相当于定义一个pod。那是正确的吗?如果我想声明性地描述多pod部署呢?是否需要多个deployment.yml文件?

  • 问题内容: 我想要我的Web应用程序的安全连接。因此,我想为我的wildfly 8.2.0服务器配置ssl。我已经在独立/配置文件夹中创建并存储了.keystore文件。 必须添加: 在standalone.xml文件中,但是有tag: 当我用上面指定的标签替换它时出现错误: 问题答案: 我已经为Wildfly 8.2.0配置了ssl。 步骤1:创建密钥库 步骤2:编辑configuration

  • 我想在Docker容器中启动两个不同的服务,并在其中一个退出后立即退出容器。我查看了supervisor,但找不到如何让它在一个托管应用程序退出后立即退出。它试图重启它们多达三次,就像标准设置一样,然后什么也不做。主管是否能够做到这一点,或者是否有其他工具可以做到这一点?如果还有一种方法可以让两个托管程序都写入到stdout,并标记它们的应用程序名,则会有好处,例如: