【问题标题】:Add nginx.conf to Kubernetes cluster将 nginx.conf 添加到 Kubernetes 集群
【发布时间】:2017-06-24 00:03:36
【问题描述】:

如何将nginx.conf 配置文件传递给在 Kubernetes 集群中运行的 nginx 实例?

【问题讨论】:

    标签: nginx kubernetes


    【解决方案1】:

    您可以创建一个 ConfigMap 对象,然后将值作为文件挂载到您需要的位置:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nginx-config
    data:
      nginx.conf: |
        your config
        comes here
        like this
      other.conf: |
        second file
        contents
    

    在你的 pod 规格中:

    spec:
      containers:
        - name: nginx
          image: nginx
          volumeMounts:
            - name: nginx-config
              mountPath: /etc/nginx/nginx.conf
              subPath: nginx.conf
            - name: other.conf
              mountPath: /etc/nginx/other.conf
              subPath: other.conf
      volumes:
        - name: nginx-config
          configMap:
            name: nginx-config
    

    (注意 mountPath 中文件名的重复,使用完全相同的 subPath;与绑定挂载文件相同。)

    有关 ConfigMap 的更多信息,请参阅: https://kubernetes.io/docs/user-guide/configmap/

    注意:使用 ConfigMap 作为 subPath 卷的容器将不会收到 ConfigMap 更新。

    【讨论】:

      【解决方案2】:

      我还没有找到一个很好的方法来逃避 ConfigMap 中的 nginx 配置内容。对我来说最好的办法是使用文件创建 ConfigMap

      将以下内容另存为./data/nginx.conf

      user  nginx;
      worker_processes  1;
      
      error_log  /var/log/nginx/error.log warn;
      pid        /var/run/nginx.pid;
      
      events {
          worker_connections  1024;
      }
      
      
      http {
          include       /etc/nginx/mime.types;
          default_type  application/octet-stream;
      
          log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                              '$status $body_bytes_sent "$http_referer" '
                              '"$http_user_agent" "$http_x_forwarded_for"';
      
          access_log  /var/log/nginx/access.log  main;
      
          sendfile        on;
          #tcp_nopush     on;
      
          keepalive_timeout  65;
      
          #gzip  on;
      
          include /etc/nginx/conf.d/*.conf;
      }
      

      现在创建 configMap kubectl create configmap confnginx --from-file=./data/nginx.conf

      将以下部署和 pod yaml 保存为 nginx.yaml

      apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
      kind: Deployment
      metadata:
        name: nginx
        labels:
          app: nginx     
      spec:
        selector:
          matchLabels:
            app: nginx
        replicas: 1 # tells deployment to run 2 pods matching the template
        template: # create pods using pod definition in this template
          metadata:
            # unlike pod-nginx.yaml, the name is not included in the meta data as a unique name is
            # generated from the deployment name
            labels:
              app: nginx     
          spec:
            containers:
              - name: nginx
                image: nginx:alpine
                ports:
                - containerPort: 80        
                volumeMounts:
                  - name: nginx-config
                    mountPath: /etc/nginx/nginx.conf
                    subPath: nginx.conf
            volumes:
              - name: nginx-config
                configMap:
                  name: confnginx
      

      现在在 k8 中创建它 kubectl apply -f nginx.yaml

      【讨论】:

      • 问题可能是由于您的 nginx.conf 中的 cmets。我遇到了同样的问题,但是在删除了所有带有“#”的行后,配置映射按预期进行。特别是你的 tcp 没有 push 和 gzip 行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2020-02-04
      • 2019-09-15
      • 2015-11-26
      • 1970-01-01
      • 2021-09-28
      • 2021-01-08
      相关资源
      最近更新 更多