如何使用 kubernetes StatefulSet 配置 DNS_PING

Wil*_*ong 6 dns jgroups infinispan kubernetes

我想在 kubernetes 环境中设置一个 inifinispan 集群。

DNS_PING 是发现协议。它适用于使用 DeploymentConfig 设置部署的 pod。但是,当我们将设置从 DeploymentConfig 切换到 StatefulSet 时,它不起作用。

这是因为我们不能直接通过名称(pod name)查询 pod 的 IP,而是使用(pod name).(headless service created)模式。

jgroups 对我来说是新的。感谢有人建议我们如何为这种情况正确配置 DNS_PING。非常感谢。

Alb*_*oto 0

我正在做类似的事情,希望对您有所帮助:

当您在 statefulset 上启动 pod 时,您可以使用内部 shell 检索本地 DNS 并显示主机文件,如下所示:

% kubectl exec custom-infinispan-0 -it -- sh
sh-4.4$ cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.xxx.xx.xx    stafulset-0.<your-service>.default.svc.cluster.local    statefulset-0
Run Code Online (Sandbox Code Playgroud)

如果是 infinispan,您需要使用 JAVA_OPTS 将正确的查询加载为 -D 参数。

可以使用如下所示的内容:

apiVersion: v1
kind: ConfigMap
metadata:
  name: <your-thingie>-infinispan
data:
  INFINISPAN_CACHE_STATISTICS: "true"
  USER: "admin"
  DB_ADDR: "mariadb"
  DB_PORT: "3306"
  DB_USER: "<>"
  DB_DATABASE: "<>"
  JAVA_OPTIONS: "-Dinfinispan.cluster.stack=k8s -Djgroups.dns.query=<your-thingie>-infinispan.default.svc.cluster.local"
Run Code Online (Sandbox Code Playgroud)

重要的是您需要生成自定义容器,因为 infinispan 并不总是包含集群堆栈的配置。您可以在https://github.com/infinispan/infinispan/tree/main/core/src/main/resources/default-configs找到它们

如果您需要有关您的解决方案的更多信息,您还可以执行以下操作:

% kubectl exec custom-infinispan-0 -it -- sh
sh-4.4$ cat /etc/hosts
# Kubernetes-managed hosts file.
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
fe00::0 ip6-mcastprefix
fe00::1 ip6-allnodes
fe00::2 ip6-allrouters
10.xxx.xx.xx    stafulset-0.<your-service>.default.svc.cluster.local    statefulset-0
Run Code Online (Sandbox Code Playgroud)