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
字段。让我们在这种情况下尝试一下。