Kubernetes aws — как лучше всего настроить содержимое docroot для Nginx

#nginx #kubernetes #amazon-eks

#nginx #kubernetes #amazon-eks

Вопрос:

Я реализовал веб-приложение с использованием контейнера Nginx docker на aws eks с использованием ingress. В настоящее время я создаю образ docker с содержимым docroot и использую Nginx для его обслуживания. Если в случае, если мой корневой контент do огромен, и я хочу сохранить его за пределами изображения, как я могу это сделать? Пожалуйста, поделитесь некоторыми примерами.

Вот содержимое файла docker

 FROM nginx
  
ADD . /usr/share/nginx/html/

COPY env.conf /etc/nginx/conf.d/

COPY nginx.conf /etc/nginx/

 

Содержимое из env.conf

 server {
      listen 80 ;
      server_name localhost;
      root   /usr/share/nginx/html;
      index  index.html;
      large_client_header_buffers 4 32k;
      #default_type text/html;

     # CSS
      location / {
        add_header Cache-Control public;
       # Equivalent to above:
        expires     15m; # Indicate that the resource can be cached for 86400 seconds (24 hours)
        etag on; # Add an ETag header with an identifier that can be stored by the client

        rewrite ^/.*$ /index.html;
      }
     location ~ /[^/]*.[^/]*$ { }
     location /ABC {
        rewrite ^/abc(/|)$ /abc/index.html break;
        rewrite ^/abc/.*$ /abc/index.html break;
      }
   }

 

Вот файл kubernetes yaml.

 apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-dev4
  namespace: abc
spec:
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nginx-dev4
  replicas: 3 # tells deployment to run 1 pods matching the template
  template: # create pods using pod definition in this template
    metadata:
      labels:
        app: nginx-dev4
    spec:
      containers:
      - name: nginx-dev4
        image: XXXX.amazonaws.com/pcl-pv/dev4
        ports:
        - containerPort: 80
        volumeMounts:
          - mountPath: "/usr/share/nginx/html"
            name: "task-pv-volume"
      volumes:
        - name: task-pv-volume
          persistentVolumeClaim:
            claimName: task-pv-claim

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-dev4
  namespace: pv
  labels:
    app: nginx-dev4
spec:
  ports:
  - name: http
    port: 9091
    targetPort: 80
  type: ClusterIP
  selector:
    app: nginx-dev4

---
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    ingress.kubernetes.io/ssl-passthrough: "true"
    ingress.kubernetes.io/ssl-redirect: "true"
  name: nginx-dev4
  namespace: pv
spec:
  rules:
    - host: XXXX.aws.com
      http:
        paths:
          - path: /
            backend:
              serviceName: nginx-dev4
              servicePort: 9091
 

добавлен объем сохранения, требование объема сохранения для достижения этой цели.

 apiVersion: v1
kind: PersistentVolume
metadata:
  name: task-pv-volume
  namespace: pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/home/ec2-user/nginx"


---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: task-pv-claim
  namespace: pv
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi
 

Комментарии:

1. если вы можете поделиться примером файла docker или не получать много контекстов. вы можете запустить модуль webapp pod и использовать ingress для пересылки трафика в него.

2. @HarshManvar: Я обновил свой вопрос, пожалуйста, взгляните.

3. возможно, вы можете использовать NFS для хранения в корневом каталоге doc, а pod будет монтироваться в NFS или в хранилище cloud storage.

4. В AWS вы можете сохранить содержимое в S3. Вы можете либо обслуживать его непосредственно из S3, не используя контейнер, либо настроить nginx для прокси-запросов к S3. Это не будет похоже на локальные файлы, но для данного варианта использования вам это необязательно.

5. Вы определились с каким — нибудь решением ? NFS Кажется, это хороший метод.

Ответ №1:

вы можете подключить NFS или облачное хранилище с помощью модуля POD в качестве опции для размещения большого содержимого на сервере.

вот один хороший пример : https://medium.com/grensesnittet/mounting-a-gcp-bucket-as-nfs-in-kubernetes-8f6d3faf4da3

вы также можете использовать EFS, NFS или облачное хранилище в соответствии с требованиями.

Комментарии:

1. Благодаря Харшу, я смог использовать persistence volume и persistence volume claim для реализации этого.

2. @NikhilBharati вы можете обновить статус вопроса, если ответ полезен, пожалуйста, проголосуйте, если он разрешил проблему, вы можете пометить ее как принятую.