Kubernetes 为什么一个seldon部署有两个服务
我注意到每当我部署一个模型时,就会有两个服务,例如Kubernetes 为什么一个seldon部署有两个服务,kubernetes,seldon,Kubernetes,Seldon,我注意到每当我部署一个模型时,就会有两个服务,例如 kubectl get service -n model-namespace NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE iris-model-default ClusterIP 10.96.82.232 <none> 8000/TCP
kubectl get service -n model-namespace
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
iris-model-default ClusterIP 10.96.82.232 <none> 8000/TCP,5001/TCP 8h
iris-model-default-classifier ClusterIP 10.96.76.141 <none> 9000/TCP 8h
从
CRD定义似乎很有用
k describe service/iris-model-default
Name: iris-model-default
Namespace: model-namespace
Labels: app.kubernetes.io/managed-by=seldon-core
seldon-app=iris-model-default
seldon-deployment-id=iris-model
Annotations: getambassador.io/config:
---
apiVersion: ambassador/v1
kind: Mapping
name: seldon_model-namespace_iris-model_default_rest_mapping
prefix: /seldon/model-namespace/iris-model/
rewrite: /
service: iris-model-default.model-namespace:8000
timeout_ms: 3000
---
apiVersion: ambassador/v1
kind: Mapping
name: seldon_model-namespace_iris-model_default_grpc_mapping
grpc: true
prefix: /(seldon.protos.*|tensorflow.serving.*)/.*
prefix_regex: true
rewrite: ""
service: iris-model-default.model-namespace:5001
timeout_ms: 3000
headers:
namespace: model-namespace
seldon: iris-model
Selector: seldon-app=iris-model-default
Type: ClusterIP
IP: 10.96.82.232
Port: http 8000/TCP
TargetPort: 8000/TCP
Endpoints: 172.18.0.17:8000
Port: grpc 5001/TCP
TargetPort: 8000/TCP
Endpoints: 172.18.0.17:8000
Session Affinity: None
Events: <none>
所以只涉及一个pod,我认为这些端口是从不同的容器映射的:
k get pods -o json | jq '.items[].spec.containers[] | .name, .ports' [0] 0s
"classifier"
[
{
"containerPort": 6000,
"name": "metrics",
"protocol": "TCP"
},
{
"containerPort": 9000,
"name": "http",
"protocol": "TCP"
}
]
"seldon-container-engine"
[
{
"containerPort": 8000,
"protocol": "TCP"
},
{
"containerPort": 8000,
"name": "metrics",
"protocol": "TCP"
}
]
一个更具体的问题是为什么需要这么多的端口?是的,看起来您的pod中有两个容器 第一项服务:
虹膜模型默认值
➡️ <代码>赛尔登集装箱引擎HTTP:8000:8000
和GRPC:5001:8000
第二项服务:
虹膜模型默认分类器
➡️ <代码>分类器HTTP:9000:9000
(内部使用的6000看起来像是度量)
您没有提到,但听起来像是部署了分类器:
apiVersion:machinelearning.seldon.io/v1
种类:塞尔登
元数据:
名称:虹膜模型
名称空间:seldon
规格:
姓名:iris
预测因素:
-图表:
实现:SKLEARN_服务器
modelUri:gs://seldon models/sklearn/iris
名称:分类器
名称:默认值
副本:1份
如果您想了解您可能已经深入研究的两个容器/服务背后的基本原理,请添加部署YAMLCOLD
kubectl描述…
服务并显示kubectl get pods——显示标签。如果我们可以看到服务选择的标签,我们就可以理解哪些pod用于什么。集群中是否还有其他东西应该使用clusterps?因为如果Pod中的容器需要相互通信,它们应该通过localhost
进行通信。这就是紧密耦合的微服务的多容器吊舱的便利性。我不知道。老实说,我对这种设置感到困惑。我将调查您创建的CR-可能有配置字段用于操纵此行为。奇怪的是,有两个ClusterIP服务没有在集群中使用。奇怪的是,有两个服务,但只有一个吊舱。这并不能解释为什么有两个服务。考虑到只有一个多集装箱吊舱,我认为这里没有真正的理由(就佳能而言)提供两种服务。Echo@Serge,同样的8000端口映射到8000端口,5001端口也很奇怪。就这个分类器而言,只涉及REST。@Rico,你有什么建议可以在操作员的指导下寻找更好的分类器吗?我对接线员不太熟悉
k get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
iris-model-default-0-classifier-579765fc5b-rm6np 2/2 Running 0 10h app.kubernetes.io/managed-by=seldon-core,app=iris-model-default-0-classifier,fluentd=true,pod-template-hash=579765fc5b,seldon-app-svc=iris-model-default-classifier,seldon-app=iris-model-default,seldon-deployment-id=iris-model,version=default
k get pods -o json | jq '.items[].spec.containers[] | .name, .ports' [0] 0s
"classifier"
[
{
"containerPort": 6000,
"name": "metrics",
"protocol": "TCP"
},
{
"containerPort": 9000,
"name": "http",
"protocol": "TCP"
}
]
"seldon-container-engine"
[
{
"containerPort": 8000,
"protocol": "TCP"
},
{
"containerPort": 8000,
"name": "metrics",
"protocol": "TCP"
}
]