【发布时间】:2017-03-01 10:10:40
【问题描述】:
我们有一个 docker 镜像和一个相应的 yaml 文件,用于使用 kubernetes 进行部署。我们构建的应用程序是在带有 akka-http 的 scala 中构建的。我们使用了akka-cluster。我们在配置文件中有一个特定的变量(在我们的例子中是种子节点 - akka 集群),它在我们使用 pod ip 的应用程序代码中使用。但是,除非部署完成,否则我们不会获得 pod ip。我们应该如何着手解决这个问题?环境变量会有帮助吗,如果是的话如何?
更具体地说,一旦 docker 镜像部署在容器中的容器中,并且容器启动时,容器 ip 就已经分配。那么,我们可以在容器中启动进程之前以编程方式或以其他方式在我们的代码或配置文件中配置 pod ips 吗?
供参考,这是我们的配置文件:
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",
],
我们怎样才能做到这一点? 提前致谢。
【问题讨论】:
-
查看这篇精彩的博文 paoloambrosio.net/2016/12/14/akka-location-transparency.html 及其相关的 GitHub 演示项目 github.com/paoloambrosio/experiments/tree/… 。一种解决方案是在 docker 映像启动期间运行发现并导出种子主机名。
标签: kubernetes akka-http akka-cluster