我有一个可创建多个 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 的命名空间
集群中的应用实例组成一个集群,集群中选举出一个应用实例为主实例,其他为从实例,实时从主实例复制数据,当主实例故障时,另一个从实例将被提升为主实例。
当容器中的应用程序提升为主应用程序时,我希望主应用程序实例调用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?
答案1
您可以让服务选择器选择一个"master"
标签,例如"role": "master"
- 然后您可以将主标签添加到被选为主的 pod。可以使用 PATCH 方法在正在运行的 pod 上更改标签。
我指定了 POD_NAME 作为选择器,但是服务找不到任何 POD。
该name
标签与选择器中的任何其他标签的处理方式相同。一种常见的做法是将名称标签添加到与元数据名称匹配的 Pod,然后在选择器中使用该标签,但如果 Pod 上没有该标签,选择器将找不到它。