我不知道您所说的在 AWS 中设置 Kubernetes 集群的 yaml 是什么意思。但是,我一直使用kops 设置我的AWS 集群。此外,我不明白您为什么要将 EFS 挂载到主节点和/或节点而不是容器。
但直接回答您的问题:您可以编写一个脚本将 Terraform 输出输出到 Helm 值文件并使用它来生成 k8s 配置。
我在寻找一种将 TF 输出获取到 Kubernetes 中指定的环境变量的方法时偶然发现了这个问题,我希望更多人这样做。我也怀疑这也是你的问题,或者至少它可以成为解决你问题的一种方法。所以:
您可以使用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}"
}
}
如果您有秘密参数,请使用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 k8syaml:
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