婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > nginx-ingress-controller日志持久化方案的解決

nginx-ingress-controller日志持久化方案的解決

熱門標簽:廈門防封電銷電話卡 云南電商智能外呼系統哪家好 濰坊寒亭400電話辦理多少錢 外呼系統全國 四川保險智能外呼系統 宜賓銷售外呼系統軟件 高德地圖標注公司需要錢 地圖標注能更改嗎 地圖標注員有發展前景嗎

最近看到一篇公眾號講了nginx-ingress-controller的應用。下面有人評論如何做日志持久化,剛好工作上遇到該問題,整理一個方案,僅供參考。

nginx-ingress-controller的日志

nginx-ingress-controller的日志包括三個部分:

  • controller日志: 輸出到stdout,通過啟動參數中的–log_dir可已配置輸出到文件,重定向到文件后會自動輪轉,但不會自動清理
  • accesslog:輸出到stdout,通過nginx-configuration中的字段可以配置輸出到哪個文件。輸出到文件后不會自動輪轉或清理
  • errorlog:輸出到stderr,配置方式與accesslog類似。

給controller日志落盤

  • 給nginx-ingress-controller掛一個hostpath: /data/log/nginx_ingress_controller/ 映射到容器里的/var/log/nginx_ingress_controller/ ,
  • 給nginx-ingress-controller配置log-dir和logtostderr參數,將日志重定向到/var/log/nginx_ingress_controller/中。

controller的日志需要做定時清理。由于controller的日志是通過klog(k8s.io/klog)輸出的,會進行日志滾動,所以我們通過腳本定時清理一定時間之前的日志文件即可。

給nginx日志落盤

修改configmap: nginx-configuration。配置accesslog和errorlog的輸出路徑,替換默認的stdout和stderr。輸出路徑我們可以與controller一致,便于查找。

accesslog和errorlog都只有一個日志文件,我們可以使用logrotate進行日志輪轉,將輸出到宿主機上的日志進行輪轉和清理。配置如:

$ cat /etc/logrotate.d/nginx.log
/data/log/nginx_ingress_controller/access.log {
  su root list
  rotate 7
  daily
  maxsize 50M
  copytruncate
  missingok
  create 0644 www-data root
}

官方提供的模板中,nginx-ingress-controller默認都是以33這個用戶登錄啟動容器的,因此掛載hostpath路徑時存在權限問題。我們需要手動在機器上執行chown -R 33:33 /data/log/nginx_ingress_controller.

自動化ops

nginx日志落盤中,第2、3兩點均需要人工運維,有什么解決辦法嗎?

問題的關鍵是:有什么辦法可以在nginx-ingress-controller容器啟動之前加一個hook,將宿主機的指定目錄執行chown呢?

可以用initContainer。initcontainer必須在containers中的容器運行前運行完畢并成功退出。利用這一k8s特性,我們開發一個docker image,里面只執行如下腳本:

#!/bin/bash
logdir=$LOG_DIR
userID=$USER_ID
echo "try to set dir: $logdir 's group as $userID"
chown -R $userID:$userID $logdir

腳本讀取一些環境變量, 確認需要修改哪個目錄,改成怎樣的user group。

將腳本打包成dockerimage, 放在nginx-ingress-controller的deploy yaml中,作為initcontainers。 注意要對該initcontainer配置環境變量和volumeMount.

再說第二點,我們注意到nginx-ingress-controller的基礎鏡像中就自帶了logrotate,那么問題就簡單了,我們將寫好的logrotate配置文件以configmap的形式掛載到容器中就可以了。

一個deploy yaml如下:

---
apiVersion: v1
kind: Service
metadata:
 name: ingress-nginx
 namespace: kube-system
spec:
 type: ClusterIP
 ports:
 - name: http
  port: 80
  targetPort: 80
  protocol: TCP
 - name: https
  port: 443
  targetPort: 443
  protocol: TCP
 selector:
  app: ingress-nginx
---
apiVersion: v1
kind: Service
metadata:
 name: default-http-backend
 namespace: kube-system
 labels:
  app: default-http-backend
spec:
 ports:
 - port: 80
  targetPort: 8080
 selector:
  app: default-http-backend
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 name: default
 namespace: kube-system
spec:
 backend:
  serviceName: default-http-backend
  servicePort: 80
---
kind: ConfigMap
apiVersion: v1
metadata:
 name: nginx-configuration
 namespace: kube-system
 labels:
  app: ingress-nginx
data:
 use-forwarded-headers: "true"
 # 此處配置nginx日志的重定向目標
 access-log-path: /var/log/nginx_ingress_controller/access.log
 error-log-path: /var/log/nginx_ingress_controller/error.log

---

# 創建一個configmap,配置nginx日志的輪轉策略,對應的是nginx日志在容器內的日志文件
apiVersion: v1
data:
 nginx.log: |
  {{ user_nginx_log.host_path }}/access.log {
    rotate {{ user_nginx_log.rotate_count }}
    daily
    maxsize {{ user_nginx_log.rotate_size }}
    minsize 10M
    copytruncate
    missingok
    create 0644 root root
  }
  {{ user_nginx_log.host_path }}/error.log {
    rotate {{ user_nginx_log.rotate_count }}
    daily
    maxsize {{ user_nginx_log.rotate_size }}
    minsize 10M
    copytruncate
    missingok
    create 0644 root root
  }
kind: ConfigMap
metadata:
 name: nginx-ingress-logrotate
 namespace: kube-system
---

kind: ConfigMap
apiVersion: v1
metadata:
 name: tcp-services
 namespace: kube-system
---
kind: ConfigMap
apiVersion: v1
metadata:
 name: udp-services
 namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
 name: nginx-ingress-serviceaccount
 namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
 name: nginx-ingress-clusterrole
rules:
 - apiGroups:
   - ""
  resources:
   - configmaps
   - endpoints
   - nodes
   - pods
   - secrets
  verbs:
   - list
   - watch
 - apiGroups:
   - ""
  resources:
   - nodes
  verbs:
   - get
 - apiGroups:
   - ""
  resources:
   - services
  verbs:
   - get
   - list
   - watch
 - apiGroups:
   - "extensions"
  resources:
   - ingresses
  verbs:
   - get
   - list
   - watch
 - apiGroups:
   - ""
  resources:
    - events
  verbs:
    - create
    - patch
 - apiGroups:
   - "extensions"
  resources:
   - ingresses/status
  verbs:
   - update
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role
metadata:
 name: nginx-ingress-role
 namespace: kube-system
rules:
 - apiGroups:
   - ""
  resources:
   - configmaps
   - pods
   - secrets
   - namespaces
  verbs:
   - get
 - apiGroups:
   - ""
  resources:
   - configmaps
  resourceNames:
   # Defaults to "<election-id>-<ingress-class>"
   # Here: "<ingress-controller-leader>-<nginx>"
   # This has to be adapted if you change either parameter
   # when launching the nginx-ingress-controller.
   - "ingress-controller-leader-nginx"
  verbs:
   - get
   - update
 - apiGroups:
   - ""
  resources:
   - configmaps
  verbs:
   - create
 - apiGroups:
   - ""
  resources:
   - endpoints
  verbs:
   - get
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
 name: nginx-ingress-role-nisa-binding
 namespace: kube-system
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: Role
 name: nginx-ingress-role
subjects:
 - kind: ServiceAccount
  name: nginx-ingress-serviceaccount
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
 name: nginx-ingress-clusterrole-nisa-binding
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: nginx-ingress-clusterrole
subjects:
 - kind: ServiceAccount
  name: nginx-ingress-serviceaccount
  namespace: kube-system
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
 name: ingress-nginx
 namespace: kube-system
spec:
 selector:
  matchLabels:
   app: ingress-nginx
 template:
  metadata:
   labels:
    app: ingress-nginx
   annotations:
    prometheus.io/port: '10254'
    prometheus.io/scrape: 'true'
  spec:
   serviceAccountName: nginx-ingress-serviceaccount
   tolerations:
   - key: dedicated
    value: ingress-nginx
    effect: NoSchedule
   affinity:
    nodeAffinity:
     requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
       - key: "system/ingress"
        operator: In
        values:
        - "true"
   dnsPolicy: ClusterFirstWithHostNet
   hostNetwork: true
   # 配置initcontainer,確保在nginx-ingress-controller容器啟動前將日志目錄的權限配置好
   initContainers:
   - name: adddirperm
    image: "{{ image_registry.addr }}/{{ image.adddirperm }}"
    env:
    - name: LOG_DIR
     value: /var/log/nginx_ingress_controller
    - name: USER_ID
      value: "33"
    volumeMounts:
    - name: logdir
     mountPath: /var/log/nginx_ingress_controller
   containers:
   - name: nginx-ingress-controller
    image: "{{ image_registry.addr }}/{{ image.ingress }}"
    imagePullPolicy: IfNotPresent
    args:
    - /nginx-ingress-controller
    - --default-backend-service=$(POD_NAMESPACE)/default-http-backend
    - --configmap=$(POD_NAMESPACE)/nginx-configuration
    - --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
    - --udp-services-configmap=$(POD_NAMESPACE)/udp-services
    - --publish-service=$(POD_NAMESPACE)/ingress-nginx
    - --annotations-prefix=nginx.ingress.kubernetes.io
    
    # 設置controller日志的輸出路徑和方式
    - --log_dir=/var/log/nginx_ingress_controller
    - --logtostderr=false
    securityContext:
     capabilities:
       drop:
       - ALL
       add:
       - NET_BIND_SERVICE
     # www-data -> 33
     runAsUser: 33
    env:
     - name: POD_NAME
      valueFrom:
       fieldRef:
        fieldPath: metadata.name
     - name: POD_NAMESPACE
      valueFrom:
       fieldRef:
        fieldPath: metadata.namespace
    ports:
    - name: http
     containerPort: 80
    - name: https
     containerPort: 443
    resources:
     requests:
      cpu: 100m
      memory: 256Mi
    livenessProbe:
     failureThreshold: 3
     httpGet:
      path: /healthz
      port: 10254
      scheme: HTTP
     initialDelaySeconds: 10
     periodSeconds: 10
     successThreshold: 1
     timeoutSeconds: 1
    readinessProbe:
     failureThreshold: 3
     httpGet:
      path: /healthz
      port: 10254
      scheme: HTTP
     periodSeconds: 10
     successThreshold: 1
     timeoutSeconds: 1
    volumeMounts:
    # 配置掛載容器中控制器組件和nginx的日志輸出路徑
    - name: logdir
     mountPath: /var/log/nginx_ingress_controller
    # 配置nginx日志的logrotate配置掛載路徑
    - name: logrotateconf
     mountPath: /etc/logrotate.d/nginx.log
     subPath: nginx.log
   volumes:
   # 控制器組件和nginx的日志輸出路徑為宿主機的hostpath
   - name: logdir
    hostPath:
     path: {{ user_nginx_log.host_path }}
     type: ""
   # nginx日志的輪轉配置文件來自于configmap
   - name: logrotateconf
    configMap:
     name: nginx-ingress-logrotate
     items:
     - key: nginx.log
      path: nginx.log
---

apiVersion: apps/v1
kind: DaemonSet
metadata:
 name: default-http-backend
 namespace: kube-system
 labels:
  app: default-http-backend
spec:
 selector:
  matchLabels:
   app: default-http-backend
 template:
  metadata:
   labels:
    app: default-http-backend
  spec:
   terminationGracePeriodSeconds: 60
   tolerations:
   - key: dedicated
    value: ingress-nginx
    effect: NoSchedule
   affinity:
    nodeAffinity:
     requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
       - key: "system/ingress"
        operator: In
        values:
        - "true"
   containers:
   - name: default-http-backend
    # Any image is permissible as long as:
    # 1. It serves a 404 page at /
    # 2. It serves 200 on a /healthz endpoint
    image: "{{ image_registry.addr }}/{{ image.http_backend }}"
    imagePullPolicy: IfNotPresent
    livenessProbe:
     httpGet:
      path: /healthz
      port: 8080
      scheme: HTTP
     initialDelaySeconds: 30
     timeoutSeconds: 5
    ports:
    - containerPort: 8080
    resources:
     limits:
      cpu: 10m
      memory: 20Mi
     requests:
      cpu: 10m
      memory: 20Mi
---

最后,有的人建議將initcontainer去掉,改為基于原有的nginx-ingress-controller鏡像加一層layer,將配置路徑權限的腳本放在該層執行。 個人認為這種方法既不美觀,也不方便。唯一的好處僅在于deploy yaml仍然簡潔(但少不了volumeMount之類的配置)。不過還是看個人使用感受吧~

到此這篇關于nginx-ingress-controller日志持久化方案的解決的文章就介紹到這了,更多相關nginx ingress controller日志持久化內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

標簽:德州 廣安 廊坊 湛江 紅河 回訪 巴彥淖爾 滁州

巨人網絡通訊聲明:本文標題《nginx-ingress-controller日志持久化方案的解決》,本文關鍵詞  nginx-ingress-controller,日志,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《nginx-ingress-controller日志持久化方案的解決》相關的同類信息!
  • 本頁收集關于nginx-ingress-controller日志持久化方案的解決的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩高清不卡一区二区三区| 欧洲色大大久久| 亚洲制服丝袜av| 国产自产视频一区二区三区| 国产乱对白刺激视频不卡| 色系网站成人免费| 自拍偷拍欧美激情| 国产福利91精品| 2020国产精品久久精品美国| 国产精品国产三级国产普通话99| 日本欧美久久久久免费播放网| 91麻豆国产在线观看| 日韩精品综合一本久道在线视频| 亚洲综合激情网| 欧美性色欧美a在线播放| 成人免费在线视频| 丰满少妇久久久久久久| 国产精品久久久久久久久久免费看| 亚洲午夜一区二区三区| 欧美主播一区二区三区| 午夜一区二区三区在线观看| 日本道色综合久久| 爽好多水快深点欧美视频| 欧美日韩亚洲高清一区二区| 亚洲一区二区综合| aaa欧美大片| 一区二区三区在线视频观看 | 亚洲精品老司机| 成人激情av网| 亚洲女同女同女同女同女同69| 蜜臀av一区二区在线免费观看| 欧美一卡2卡三卡4卡5免费| 美女性感视频久久| 国产欧美日韩视频在线观看| 91丝袜高跟美女视频| 视频一区视频二区中文| 亚洲欧美综合在线精品| 91精品国产欧美一区二区成人| 国产精品一二三| 免费在线观看一区| 有坂深雪av一区二区精品| 欧美大片免费久久精品三p| 在线免费观看日韩欧美| 不卡视频在线观看| 国内精品视频666| 青青草原综合久久大伊人精品 | 成人动漫一区二区在线| 日韩av二区在线播放| 亚洲一区二区三区美女| 国产欧美日韩精品一区| ww亚洲ww在线观看国产| 久久一夜天堂av一区二区三区| 日韩一区二区三区四区| 欧美一区二区三区视频免费 | 日韩电影在线一区| 亚洲成a人在线观看| 亚洲综合成人在线| 日韩黄色片在线观看| 久热成人在线视频| 成熟亚洲日本毛茸茸凸凹| av在线不卡免费看| 欧美日韩一区久久| 欧美精品一区视频| 亚洲日本青草视频在线怡红院| 亚洲美女一区二区三区| 免费在线观看成人| av在线播放一区二区三区| 欧美一区二区久久| 亚洲色图视频网| 国产美女在线精品| 欧美一区二区三区视频免费播放 | 色天天综合色天天久久| 日韩欧美中文一区| 亚洲va欧美va国产va天堂影院| 懂色av一区二区夜夜嗨| 欧美剧情电影在线观看完整版免费励志电影| 欧美疯狂做受xxxx富婆| 亚洲天天做日日做天天谢日日欢| 亚洲大片在线观看| 99久久亚洲一区二区三区青草| 制服视频三区第一页精品| 国产三级欧美三级日产三级99| 一区二区三区在线不卡| 精品午夜久久福利影院| a在线欧美一区| 中文字幕一区在线观看视频| 激情综合一区二区三区| 欧美一区二区三区不卡| 天天综合网天天综合色| 欧美日韩高清不卡| 欧美aaa在线| 国产亚洲欧美一级| 北岛玲一区二区三区四区| 亚洲日本va午夜在线影院| 99re成人精品视频| 亚洲午夜私人影院| 精品国产免费一区二区三区四区| 国产精品1区2区3区| 中文字幕一区二区三区蜜月 | 亚洲一区日韩精品中文字幕| 欧美伦理电影网| 国产高清在线观看免费不卡| 久久久久亚洲综合| 欧美偷拍一区二区| 成人黄色国产精品网站大全在线免费观看| 久久久久久久久久久久电影| 丁香天五香天堂综合| 亚洲午夜私人影院| 亚洲国产精品精华液2区45| 欧美日韩国产综合草草| 丁香亚洲综合激情啪啪综合| 青青草国产成人av片免费| 国产精品你懂的| 精品国产91乱码一区二区三区 | 欧美日韩中文字幕精品| 国内精品伊人久久久久影院对白| 亚洲蜜臀av乱码久久精品| 国产日产欧美一区二区三区 | 成人免费视频一区| 久久疯狂做爰流白浆xx| 天堂在线一区二区| 亚洲午夜久久久久久久久久久 | 精品三级在线看| 欧美一区二区久久久| 日韩精品资源二区在线| 欧美mv和日韩mv国产网站| 精品三级在线看| 一区二区三区高清不卡| 久久久亚洲午夜电影| aaa亚洲精品| 国产一区啦啦啦在线观看| 亚洲在线观看免费视频| 久久久久久**毛片大全| 欧美一激情一区二区三区| 欧美优质美女网站| 成人一区二区视频| 99re8在线精品视频免费播放| 国产成人av电影在线播放| 另类小说综合欧美亚洲| 日韩中文字幕av电影| 亚洲成a人片在线观看中文| 亚洲猫色日本管| 亚洲第一久久影院| 久久成人麻豆午夜电影| 91丨porny丨首页| 欧美日韩高清影院| 国产精品久久久久久久久快鸭 | 免费久久99精品国产| 国内精品视频666| 91蝌蚪porny成人天涯| 日韩欧美视频一区| 中文字幕在线一区免费| 九一久久久久久| 欧美午夜一区二区三区 | 丰满亚洲少妇av| 欧美伊人久久久久久久久影院| 欧美一激情一区二区三区| 一区二区三区四区国产精品| 久久国产精品99久久人人澡| 在线区一区二视频| 欧美国产成人精品| 精品在线免费观看| 欧美一区二区在线免费观看| 亚洲最新视频在线观看| 成人免费观看视频| 久久久精品综合| 国产在线精品一区二区不卡了 | 久久se精品一区二区| 欧美日韩电影在线播放| 亚洲精品国产品国语在线app| 久久电影网站中文字幕| 欧美色网站导航| 天天综合天天做天天综合| 91精品国产一区二区三区香蕉| 亚洲一区二区av在线| 欧美写真视频网站| 美女视频黄久久| 国产精品免费看片| 高清在线观看日韩| 亚洲小说春色综合另类电影| 欧洲国内综合视频| 久久99九九99精品| 亚洲免费在线看| 欧美日韩电影在线| 国产在线精品不卡| 亚洲色图另类专区| 日韩一二三区视频| 色综合久久88色综合天天免费| 亚洲人成电影网站色mp4| 在线观看欧美精品| 天堂在线亚洲视频| 国产激情偷乱视频一区二区三区| 国产偷国产偷精品高清尤物| 亚洲成在人线在线播放| 在线观看国产精品网站| 日韩中文字幕区一区有砖一区 | 91影院在线观看| 亚洲一级二级在线| 日韩精品一区二| 88在线观看91蜜桃国自产|