我希望将服务部署到运行在多个区域的Kubernetes集群,并希望能够使用环境变量将区域/区域标签注入我的pod。
我已经查看了向下的API,但这似乎只允许您从pod / service注入标签/元数据,而不是从正在运行pod的节点注入。
如果无法注入节点标签,我想到的另一个解决方案就是让容器查询kubernetes / AWS API以获取此信息,但这意味着我的容器会增加很多复杂性。
答案 0 :(得分:3)
实现此目的的一个选项是在每个节点上存储自定义文件,该文件包含所需环境变量的定义。然后将包含该文件的文件夹装入容器,并在容器启动过程中获取文件内容。
此处描述了Kubernetes秘密的类似方法:https://github.com/kubernetes/kubernetes/blob/master/docs/design/secrets.md#deferral-consuming-secrets-as-environment-variables
答案 1 :(得分:2)
我想过让容器查询kubernetes / AWS API来获取这些信息,但这意味着我的容器会增加很多复杂性。
目前,这是获取向下API中未提供信息的推荐方法。为了避免容器中的额外复杂性,您可以使用Tobias's solution上带有变体的“sidecar”。 sidecar将是pod中的另一个容器,connects to the kubernetes API查询您正在查找的信息(节点标签),并将输出写入共享卷。这可以实现为init container,或者与API持续同步的边车。
答案 2 :(得分:0)
作为Tim St. Clair的答案的衍生物,您也可以考虑在PostStart container hook内写出pod元数据。从a well known URL获取所需的元数据。然后把它写到k8s via the API。这样做的好处是它是一次性完成的执行。由于区域和区域信息不会发生变化,因此无需保持侧面车辆运行。
答案 3 :(得分:0)
如前所述,可以通过 kubernetes API 访问标签。
我继续制作了一个完整的工作版本来证明这一点(包括所需的 RBAC):https://github.com/scottcrossen/kube-node-labels
在此示例中,您可以在任何需要引用环境变量的地方引用节点标签。