kubernetes—容器忙于请求,然后请求应该路由到另一个容器

kubernetes—容器忙于请求,然后请求应该路由到另一个容器,kubernetes,load-balancing,kubernetes-ingress,kubernetes-pod,kubernetes-service,Kubernetes,Load Balancing,Kubernetes Ingress,Kubernetes Pod,Kubernetes Service,我对k8s和docker非常陌生。但我有k8s的任务。现在我坚持使用一个用例。即: 如果容器忙于处理请求。然后传入的请求应该重定向到另一个容器 部署。yaml apiVersion: apps/v1 kind: Deployment metadata: name: twopoddeploy namespace: twopodns spec: selector: matchLabels: app: twopod replicas: 1 template:

我对
k8s
docker
非常陌生。但我有k8s的任务。现在我坚持使用一个用例。即:

如果容器忙于处理请求。然后传入的请求应该重定向到另一个容器

部署。yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: twopoddeploy
  namespace: twopodns
spec:
  selector:
    matchLabels:
      app: twopod
  replicas: 1
  template:
    metadata:
      labels:
        app: twopod
    spec:
      containers:
      - name: secondcontainer
        image: "docker.io/tamilpugal/angmanualbuild:latest"
        env:
        - name: "PORT"
          value: "24244"
      - name: firstcontainer
        image: "docker.io/tamilpugal/angmanualbuild:latest"
        env:
        - name: "PORT"
          value: "24243"

          
apiVersion: v1
kind: Service
metadata:
  name: twopodservice
spec:
  type: NodePort
  selector:
    app: twopod
  ports:
  - nodePort: 31024
    protocol: TCP
    port: 82
    targetPort: 24243
服务。yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: twopoddeploy
  namespace: twopodns
spec:
  selector:
    matchLabels:
      app: twopod
  replicas: 1
  template:
    metadata:
      labels:
        app: twopod
    spec:
      containers:
      - name: secondcontainer
        image: "docker.io/tamilpugal/angmanualbuild:latest"
        env:
        - name: "PORT"
          value: "24244"
      - name: firstcontainer
        image: "docker.io/tamilpugal/angmanualbuild:latest"
        env:
        - name: "PORT"
          value: "24243"

          
apiVersion: v1
kind: Service
metadata:
  name: twopodservice
spec:
  type: NodePort
  selector:
    app: twopod
  ports:
  - nodePort: 31024
    protocol: TCP
    port: 82
    targetPort: 24243
deployment.yaml
,我创建了一个包含两个具有相同图像的容器的pod。因为,
firstcontainer
不可访问/不忙,那么
secondcontainer
应该处理传入的请求。
这是我们的想法和用例。因此(仅用于检查我们的用例)我使用
docker container rm-f id\u of_firstcontainer
删除
firstcontainer
。现在,直到docker重新创建
firstcontainer
,才能访问该站点。但是我需要k8s将请求重定向到
secondcontainer
,而不是等待
firstcontainer

然后,我在谷歌上搜索解决方案,找到了
ingres
Liveness-Readiness
。但是,
ingres
会根据路径而不是容器状态来路由请求<代码>活性-准备就绪也会重新创建容器
因此
也有一些问题,一些人正在使用
ngix
服务器。但是没有运气。这就是为什么我要提出一个新问题

所以我的问题是如何配置这两个容器以减少停机时间

什么是从谷歌获取解决方案的关键字来尝试自己

谢谢


Pugal.

一个服务可以在多个吊舱之间实现负载平衡。您应该删除部署规范中容器的第二个副本,但也要将其更改为具有
副本:2
。现在,您的部署将启动两个相同的POD,但服务将匹配这两个POD,请求将同时发送到这两个POD

apiVersion:apps/v1 种类:部署 元数据: 名称:onepoddeploy 名称空间:twopodns 规格: 选择器:{…} 副本:2个,而不是1个 模板: 元数据:{…} 规格: 容器: -名称:firstcontainer 图片:“docker.io/tamilpugal/angmanualbuild:latest” 环境: -名称:“港口” 值:“24243” #没有第二个容器 这意味着如果两个POD不足以处理您的负载,您可以
kubectl scale deployment-n twoopodns onepoddeploy--replicas=3
来增加副本数量。如果您可以从CPU利用率或其他指标判断何时达到“不够”,则可以配置来为您调整副本计数

(通常每个pod只需要一个容器。没有办法像您在这里建议的那样在容器之间共享流量,能够独立地扩展组件是很有帮助的。如果您查看有状态组件(如数据库)和无状态组件(如HTTP服务),这一点是双重的。mul的典型用途是tiple容器是日志转发器和网络代理之类的东西,它们在某种程度上是pod主操作的次要部分,可以与主容器一起扩展或终止。)

在一个服务后面运行多个pod副本有两个重要的注意事项。服务负载平衡器不是特别聪明,因此如果其中一个副本在密集型作业上工作,而另一个或多或少处于空闲状态,它们仍将获得大约一半的请求。此外,如果您的pod配置为HTTP运行状况检查(推荐),如果pod备份到无法处理请求的程度,它也将无法回答健康检查,Kubernetes将杀死它


您可以在这里帮助Kubernetes,努力“及时”回答所有HTTP请求(目标总是在1000毫秒以下),这可能意味着返回“尚未准备好”对触发大量计算的请求的响应。这也可能意味着重新安排主请求处理程序,以使HTTP请求线程不必等待某个任务完成。

您探讨过负载平衡吗()在k8s中?这将为您提供有关如何处理此类场景中的请求的线索我们知道
replica
字段。让我们在这种情况下尝试一下。