kubernetes 在使用docker/k8s进行扩展期间,部署同一应用程序的多个node.js容器

wvyml7n5  于 2022-11-02  发布在  Kubernetes
关注(0)|答案(1)|浏览(135)

对于每1万个新用户,我们需要根据某个env变量(即offset: n)生成一个新的应用程序来处理这组新用户
我尝试使用docker-compose,但看起来我必须为每个容器手动创建yml进程,这没有多大帮助。
我是否可以使用k8s或其他工具,动态地部署一个具有动态设置的env属性的应用程序,这样我的应用程序就可以知道要为哪个用户块提供服务?
理想情况下,我希望有一个主节点(可以是一个lambda函数,也可以是一个EC2示例),它根据一些注册事件判断是否需要部署一个新示例,并通知编排器使用一些特定的env变量构建一个新的部署。

gkl3eglg

gkl3eglg1#

Kubernetes StatefulSet可以做类似的事情。StatefulSet的每个副本都有一个唯一的主机名,格式为name-0name-1,依此类推(保证从0开始并按顺序排列)。然后,你可以在类似于入口点 Package 器脚本的东西中找到它:


# !/bin/sh

# (run this script as your image's ENTRYPOINT)

if [ -z "$OFFSET" ]; then
  OFFSET=$(hostname | sed -ne 's/.*-\([0-9][0-9]*\)$/\1/p')
fi
if [ -z "$OFFSET" ]; then
  echo could not determine shard offset >&2
  exit 1
fi

exec "$@"

StatefulSet附带了您可能需要也可能不需要的其他属性;例如,更新image:将导致以非常特定的顺序重新创建底层Pod。
StatefulSet确实包含了一种向特定副本发送请求的方法,但是Kubernetes本身并不知道如何为您路由请求;您客户端代码将不得不自行完成此操作。

相关问题