gpt4 book ai didi

Kubernetes - Akka 集群部署

转载 作者:行者123 更新时间:2023-12-02 04:57:01 35 4
gpt4 key购买 nike

我们有一个 docker 镜像和相应的 yaml 文件,用于使用 kubernetes 进行部署。我们构建的应用程序是在 scala 中使用 akka-http 构建的。我们使用了akka-cluster。我们的配置文件中有一个特定的变量(在我们的例子中是种子节点 - akka cluster),该变量在使用 pod ip 的应用程序代码中使用。但是,除非部署完成,否则我们不会获得 pod ip。我们应该如何着手解决这个问题?环境变量会有帮助吗?如果有的话怎么办?

更具体地说,一旦将 docker 镜像部署到 pod 中的容器中,并且当容器启动时,pod ip 就已经分配了。那么,在容器中启动进程之前,我们是否可以通过编程或其他方式在代码或配置文件中配置 pod ip?

作为引用,这是我们的配置文件:

akka {
actor {
provider = "akka.cluster.ClusterActorRefProvider"
}
remote {
log-remote-lifecycle-events = off
netty.tcp {
hostname = "127.0.0.1"
port = 0
}
}
cluster {
seed-nodes = [
"akka.tcp://our-system@127.0.0.1:3000",
"akka.tcp://our-system@127.0.0.1:3001",
],
metrics {
enabled = off
}
}
}
service {
validateTokenService {
ml.pubkey.path = "<filePath>"
}
ml_repository {
url = <url address>
}
replication.factor = 3
http.service.interface = "0.0.0.0"
http.service.port = 8080
}

在上面的文件中,我们需要 pod-ip,而不是 akka.remote.netty.tcp.hostname 作为“127.0.0.1”。因此,我们可以在种子节点中使用它:

seed-nodes = [
"akka.tcp://our-system@hostname:3000",
"akka.tcp://our-system@hostname:3001",
],

我们怎样才能做到这一点?提前致谢。

最佳答案

我尝试过一些非常相似的东西。您可以做的是使用有状态集 Kubernetes-Stateful sets 。有状态集有一个命名约定,并且 Pod 将被相应地命名 - 您可以在链接中阅读有关该内容的更多信息。这样,您就可以对种子节点的值进行硬编码,因为您知道 Pod 将如何命名。但是,它们有一个缺点,有状态集尚不支持滚动更新(主要是因为它们是这样设计的。)本文有一个很好的逐步解释:stateful set - akka clustering本文解释了所有内容 - 因此发布链接而不是在此处复制步骤。希望这有帮助

关于Kubernetes - Akka 集群部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42528817/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com