我有一个创建多个 POD 的复制控制器。在每个 POD 中,都有一个运行应用程序的容器。
现在在容器中,它可以调用 Kubernetes API,如下所示。
KUBE_TOKEN=$(</var/run/secrets/kubernetes.io/serviceaccount/token)
curl --silent --insecure --header "Authorization: Bearer $KUBE_TOKEN" \
https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/api/v1/namespaces/$POD_NAMESPACE/pods/$POD_NAME
POD_NAME
是 POD 的名称;
POD_NAMESPACE
是 POD 的命名空间
contains 中的应用程序实例组成一个集群。他们选择一个应用程序实例作为主实例,其他实例是从主实例,实时复制主实例的数据。当主实例失败时,另一个从实例将被提升为主实例。
当容器中的应用程序提升为master时,我希望master应用程序实例调用kubernetes API,以便所有流量都流向这个POD/容器。
{
"kind": "Service",
"apiVersion": "v1",
"metadata": {
"name": "my-cluster"
},
"spec": {
"ports": [{
"port": 33379,
"targetPort": 33379
}],
"type" : "None",
"selector": {
"name": "<POD_NAME>"
}
}
}
我将 指定POD_NAME
为选择器,但服务找不到任何 POD。
如何配置服务以使所有流量都流向该 POD?
您可以让您的服务选择器选择一个
"master"
标签,例如"role": "master"
- 然后您可以将主标签添加到被选为主节点的任何 pod。可以使用 PATCH 方法在正在运行的 pod 上更改标签。name
标签被视为与选择器中的任何其他标签相同。一种常见的做法是将名称标签添加到与元数据名称匹配的 pod,然后在选择器中使用它,但如果 pod 上没有标签,选择器将找不到它。