【问题标题】:How to configure multiple services/containers in Kubernetes?如何在 Kubernetes 中配置多个服务/容器?
【发布时间】:2019-09-09 02:20:30
【问题描述】:

我是 Docker 和 Kubernetes 的新手。 使用的技术:

  • Dotnet Core 2.2
  • Asp.NET Core WebAPI 2.2
  • Docker for windows(Edge) 已启用 Kubernetes 支持
  • Code

我将两个服务托管在两个 docker 容器 container1 和 container2 中。

下面是我的 deploy.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

但是当我只配置一个容器时,同样运行良好。 检查日志时出现以下错误: Error from server (BadRequest): a container name must be specified for pod webapi-dockerkube-8658586998-9f8mk, choose one of: [webapi-dockerkube webapi-dockerkube2]

【问题讨论】:

  • 你能发布 crashlooping pod 的“kubectl logs -p POD_NAME”的最后几行吗?
  • 服务器出错(BadRequest):必须为 pod webapi-dockerkube-8658586998-9f8mk 指定容器名称,请选择以下之一:[webapi-dockerkube webapi-dockerkube2]
  • 好的,您需要指定以下容器之一:“kubectl logs -p POD_NAME webapi-dockerkube”或“kubectl logs -p POD_NAME webapi-dockerkube2”
  • 对于这两个错误来自服务器(未找到):未找到豆荚“POD_NAME”
  • 您可以通过运行kubectl get po 获取您的 pod 名称,您将看到类似于 webapi-dockerkube-xxxx 的 pod 名称。将 POD_NAME 替换为该名称。

标签: docker asp.net-core kubernetes microservices docker-for-windows


【解决方案1】:

您在同一个 pod 中运行两个容器,它们都绑定到端口 80。这在同一个 pod 中是不可能的。 将 pod 想象为“服务器”,您不能将两个进程绑定到同一个端口。

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

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

【讨论】:

  • 我认为 cmets 已经在进行同样的讨论,请阅读并提供您的反馈
【解决方案2】:
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 日志

检查崩溃循环返回的原因

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2021-06-22
    • 2020-08-17
    • 2022-07-07
    • 2020-08-03
    • 2020-10-15
    • 2020-05-09
    相关资源
    最近更新 更多