gpt4 book ai didi

docker - 使用 Terraform 和 Kubernetes 部署时如何修改 Docker 容器中的文件?

转载 作者:行者123 更新时间:2023-12-02 12:10:57 25 4
gpt4 key购买 nike

作为更大模块的一部分,我想部署一个 nginx 容器并替换其默认的 nginx.conf。新配置应使用部署时生成的 Terraform 资源 数据构建。有办法吗?

最佳答案

我按照以下步骤用动态生成的 nginx.conf 替换了标准的 nginx.conf:

  1. 创建一个带有动态数据占位符的模板配置文件
  2. 使用 Terraform 的 template_file 解析文件 data source
  3. 将解析后的数据存储在 ConfigMap 中,并将该映射挂载为 Nginx 容器的卷

一步一步:

创建名为 nginx-conf.tpl 的 nginx.conf 模板:

events {
worker_connections 4096; ## Default: 1024
}
http {
server {
listen 80;
listen [::]:80;

server_name ${server_name};

location /_plugin/kibana {
proxy_pass https://${elasticsearch_kibana_endpoint};
}
location / {
proxy_pass https://${elasticsearch_endpoint};
}
}
}

使用以下 Terraform 代码解析 nginx-conf.tpl 模板:

data "template_file" "nginx" {
template = "${file("${path.module}/nginx-conf.tpl")}"
vars = {
elasticsearch_endpoint = "${aws_elasticsearch_domain.example-name.endpoint}"
elasticsearch_kibana_endpoint = "${aws_elasticsearch_domain.example-name.kibana_endpoint}"
server_name = "${var.server_name}"
}
}

创建一个 ConfigMap 并使用 nginx.conf 键将解析后的模板存储在那里:

resource "kubernetes_config_map" "nginx" {
metadata {
name = "nginx"
}
data = {
"nginx.conf" = data.template_file.nginx.rendered
}
}

最后,将 ConfigMap key 挂载为容器卷:

# ...
spec {
# ...
container {
# ...
volume_mount {
name = "nginx-conf"
mount_path = "/etc/nginx"
}
}
volume {
name = "nginx-conf"
config_map {
name = "nginx"
items {
key = "nginx.conf"
path = "nginx.conf"
}
}
}
}
# ...

就是这样。 Nginx 服务器将开始使用提供的配置。

有用的链接:Kubernetes ConfigMap as volume , Terraform temple_file data source doc .

关于docker - 使用 Terraform 和 Kubernetes 部署时如何修改 Docker 容器中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63104917/

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