Kubernetes服务端点healtcheck
我创建了一个Kubernetes服务,其后端节点不是集群的一部分,而是一组固定的节点(具有固定的IP),因此我还创建了一个同名的Endpoints资源:Kubernetes服务端点healtcheck,kubernetes,kubernetes-health-check,Kubernetes,Kubernetes Health Check,我创建了一个Kubernetes服务,其后端节点不是集群的一部分,而是一组固定的节点(具有固定的IP),因此我还创建了一个同名的Endpoints资源: apiVersion: v1 kind: Service metadata: name: elk-svc spec: ports: - port: 9200 targetPort: 9200 protocol: TCP --- kind: Endpoints apiVersion: v1 metadata
apiVersion: v1
kind: Service
metadata:
name: elk-svc
spec:
ports:
- port: 9200
targetPort: 9200
protocol: TCP
---
kind: Endpoints
apiVersion: v1
metadata:
name: elk-svc
subsets:
-
addresses:
- { ip: 172.21.0.40 }
- { ip: 172.21.0.41 }
- { ip: 172.21.0.42 }
ports:
- port: 9200
服务和端点的说明:
$ kubectl describe svc elk-svc
Name: elk-svc
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"elk-svc","namespace":"default"},"spec":{"ports":[{"port":9200,"protocol":"TCP"...
Selector: <none>
Type: ClusterIP
IP: 10.233.17.18
Port: <unset> 9200/TCP
Endpoints: 172.21.0.40:9200,172.21.0.41:9200,172.21.0.42:9200
Session Affinity: None
Events: <none>
$ kubectl describe ep elk-svc
Name: elk-svc
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Endpoints","metadata":{"annotations":{},"name":"elk-svc","namespace":"default"},"subsets":[{"addresses":[{"ip":"172.21.0.40"...
Subsets:
Addresses: 172.21.0.40,172.21.0.41,172.21.0.42
NotReadyAddresses: <none>
Ports:
Name Port Protocol
---- ---- --------
<unset> 9200 TCP
Events: <none>
$kubectl描述svc麋鹿svc
名称:麋鹿
名称空间:默认值
标签:
注释:kubectl.kubernetes.io/last applicated configuration={“apiVersion”:“v1”,“种类”:“服务”,“元数据”:{“注释”:{},“名称”:“elk svc”,“命名空间”:“默认”},“规范”:{“端口”:[{“端口”:9200,“协议”:“TCP”。。。
选择器:
类型:集群
IP:10.233.17.18
端口:9200/TCP
终点:172.21.0.40:9200172.21.0.41:9200172.21.0.42:9200
会话关联:无
活动:
$kubectl描述ep麋鹿svc
名称:麋鹿
名称空间:默认值
标签:
注释:kubectl.kubernetes.io/last applicated configuration={“apiVersion”:“v1”,“kind”:“Endpoints”,“metadata”:{“Annotations”:{},“name”:“elk svc”,“namespace”:“default”},“subsets”:[{“addresses”:[{“ip”:“172.21.0.40”。。。
子集:
地址:172.21.0.40172.21.0.41172.21.0.42
NotReady地址:
端口:
名称端口协议
---- ---- --------
9200 TCP
活动:
我的吊舱能够使用内部集群IP 10.233.17.18与ElasticSearch通信。一切正常
我的问题是,是否有任何方法可以为我创建的服务使用某种healthCheck机制,因此如果我的ElasticSearch节点之一出现故障,即:172.21.0.40,那么该服务会意识到这一点,并且不再将流量路由到该节点,而是路由到其他节点。这可能吗
谢谢。这在k8s中不受支持。
有关更多说明,请参阅您的要求中提出的问题:
对于这个用例,最佳实践是使用像haproxy这样的负载平衡器,我的建议是在弹性节点前面有一个反向代理,比如nginx或haproxy,它将对这些节点进行健康检查。“有很多方法可以做到这一点,最好的选择是使用负载平衡器,而不是外部端点。”你是说创建负载平衡器服务,还是指位于我的ElasticSearch节点前面的完全外部负载平衡器,如nginx?关于这个想法”但是有很多方法可以定制,比如添加一个具有此功能的服务等效控制器,等等;)"你能举例说明你的意思吗?@MoisésBelchín对于评论1,这里提到的是外部负载平衡器,它可以对弹性搜索节点进行健康检查。对于评论2,它是针对定制应用程序的,开发人员应该实现控制器功能以跟踪其副本。这超出了您的用例范围。对于您来说,最佳实践是使用haproxy之类的负载平衡器。