gpt4 book ai didi

amazon-web-services - 在Kubernetes中使用Terraform输出

转载 作者:行者123 更新时间:2023-12-02 12:07:49 33 4
gpt4 key购买 nike

我使用稍微自定义的Terraform配置在AWS上生成Kubernetes集群。该配置包括附加到群集节点和主节点的EFS实例。为了让Kubernetes将此EFS实例用于卷,我的Kubernetes YAML需要Terraform生成的EFS实例的ID和端点/域。

当前,我的Terraform输出EFS ID和DNS名称,我需要在terraform apply之后和kubectl apply YAML之前使用这些值手动编辑我的Kubernetes YAML。

如何自动将这些Terraform输出值传递给Kubernetes?

最佳答案

我不知道用Yaml在AWS中建立Kubernetes集群的意思。但是,然后,我总是使用kops设置我的AWS集群。另外,我不明白为什么您要将EFS挂载到主服务器和/或节点而不是挂载到容器。

但是直接回答您的问题:您可以编写一个脚本,将Terraform输出输出到Helm值文件,并使用该脚本生成k8s配置。

我在寻找一种方法来获取TF输出到Kubernetes中指定的envvars时偶然发现了这个问题,我希望会有更多的人这样做。我还怀疑这确实是您的问题,或者至少可以说是解决您的问题的一种方法。所以:

您可以使用Kubernetes Terraform provider连接到您的集群,然后使用 kubernetes_config_map 资源创建配置映射。

provider "kubernetes" {}

resource "kubernetes_config_map" "efs_configmap" {
"metadata" {
name = "efs_config" // this will be the name of your configmap
}

data {
efs_id = "${aws_efs_mount_target.efs_mt.0.id}"
efs_dns = "${aws_efs_mount_target.efs_mt.0.dns_name}"
}
}

如果您有 secret 参数,请使用 kubernetes_secret 资源:
resource "kubernetes_secret" "some_secrets" {
"metadata" {
name = "some_secrets"
}

data {
s3_iam_access_secret = "${aws_iam_access_key.someresourcename.secret}"
rds_password = "${aws_db_instance.someresourcename.password}"
}
}

然后,在设置环境时可以 consume these in your k8s yaml:
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: some-app-deployment
spec:
selector:
matchLabels:
app: some
template:
metadata:
labels:
app: some
spec:
containers:
- name: some-app-container
image: some-app-image
env:
- name: EFS_ID
valueFrom:
configMapKeyRef:
name: efs_config
key: efs_id
- name: RDS_PASSWORD
valueFrom:
secretKeyRef:
name: some_secrets
key: rds_password

关于amazon-web-services - 在Kubernetes中使用Terraform输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48193193/

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