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

时间:2019-04-18 17:41:12

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

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

  • Dotnet Core 2.2
  • Asp.NET Core WebAPI 2.2
  • 启用了Kubernetes支持的Windows(Edge)Docker
  • 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]

2 个答案:

答案 0 :(得分:4)

您正在同一容器中运行两个容器,这两个容器都绑定到端口80。在同一容器中这是不可能的。 可以将Pod视为“服务器”,并且不能将两个进程绑定到同一端口。

您所处的解决方案:使用容器内的其他端口或使用单独的容器。在您的部署中,似乎没有像文件系统这样的共享资源,因此很容易将容器拆分为单独的Pod。

请注意,如果要使两个容器都在具有不同端口的同一容器中运行,则更改容器定义是不够的。容器中的应用程序也必须绑定到其他端口。

答案 1 :(得分:0)

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日志

检查崩溃循环返回的原因