一种自定义实现可能是拥有像数据库这样的持久数据存储,并让每个 pod 发送一个 heartbeat 条目以指示其活跃性,并通过侦听应用程序生命周期事件来管理条目
我建议在 pod get join 时使用 POD 的 liveness probe 和 readiness probe ,相应的 DNS 条目将自动更新,而不是使用自定义解决方案检查 liveness。
要获取所有 POD IP 的列表,您可以使用类型为headless的 Kubernetes 服务。你必须使用spec.clusterIP
as None。
示例服务 YAML:
apiVersion: v1
kind: Service
metadata:
name: mongodb-headless-service
namespace: infrastructure
spec:
type: NodePort
clusterIP: None
selector:
app: mongodb
ports:
- name: mongodb
port: 27017
targetPort: 27017
protocol: TCP
selector:
app: mongodb
从您的自定义解决方案代码中,您已向 kuberneets 服务发送请求,如果无头:<servicename>.<namespace>.svc.cluster.local
。
mongo 的代码示例:
System.Net.IPAddress[] ipAddresses = Dns.GetHostAddresses("mongodb-headless-service");
string connectionString = "";
foreach(IPAddress in ipAddresses)
{
if(connectionString = "")
connectionString = "mongodb://";
else
connectionString += ",";
connectionString += $"{IPAddress.ToString()}:27017";
}
connectionString += "/database";
var client = new MongoClient(connectionString);
额外文件:https ://medium.com/swlh/discovering-running-pods-by-using-dns-and-headless-services-in-kubernetes-7002a50747f4