详情页标题前

腾讯云容器服务TKE 使用 logrotate 切割 nginx-ingress 访问日志同尘科技

详情页1

使用场景

nginx-ingress 是使用 Nginx 作为反向代理和负载平衡器的 Kubernetes 的 Ingress 控制器,容器服务 TKE 提供了产品化的能力,可以直接在集群内安装和使用 Nginx-ingress。有关安装 Nginx-ingress 的详细信息,请参见 安装 Nginx-ingress 实例。使用 nginx-ingress,通常需要查看访问日志以定位问题。nginx-ingress 组件支持将日志直接采集到腾讯云的 CLS。nginx-ingress 实例默认配置的访问日志写入容器的 /var/log/nginx/nginx_access.log 文件中,然后配置日志采集规则,将该日志文件采集到 CLS。路径如下图所示:

腾讯云容器服务TKE 使用 logrotate 切割 nginx-ingress 访问日志同尘科技


nginx-ingress 默认不带有日志切割功能。如果运行时间长,nginx_access.log 文件会变得非常大,占用大量磁盘空间。由于日志直接写入容器内,最终会落在节点的容器存储目录中,占用 node 节点磁盘空间。如果容器存储目录没有单独挂盘,通常会直接使用系统盘。随着日志文件的增大,系统盘的可用磁盘空间会不断减少,此时可能会导致节点的 kubelet 驱逐。为了解决这个问题,需要对 nginx-ingress controller 容器的 /var/log/nginx/nginx_access.log 日志文件进行轮转切割。由于日志是容器的文件,因此可以部署一个 logrotate 的 sidecar 容器来轮转切割 nginx 的访问日志,以确保日志不会不断增加并变得非常大。

操作步骤

步骤1:拉取 logrotate 容器镜像

下面介绍如何在 nginx-ingress 中配置 logrotate 容器来轮转切割日志。本文中将使用 realz/logrotate 镜像来进行日志切割。1. 执行以下命令,拉取 logrotate 镜像:

docker pull realz/logrotate:latest

logrotate 的具体介绍请参见 官方 GitHub 文档。2. 您需要在容器中配置以下环境变量:

CRON_EXPR="* * * * *"  LOGROTATE_LOGFILES=/var/lib/docker/containers/*/*.logLOGROTATE_FILESIZE=10MLOGROTATE_FILENUM=5

环境变量说明:CRON_EXPR:日志定时切割时间。LOGROTATE_LOGFILES:需要切割的日志。LOGROTATE_FILESIZE:日志文件达到某个大小时开始切割。LOGROTATE_FILENUM:最多保留几个日志文件。3. 启动容器。

步骤2:nginx-ingress 工作负载配置 sidecar 容器

使用 sidecar 容器的方案是通过 emptydir 共享 /var/log/nginx/ 目录,以便 logrotate 容器可以直接访问 nginx_access.log。下面介绍如何在控制台中进行配置。1. 登录 容器服务控制台,选择左侧导航栏中的集群。2.集群管理页面,选择集群,进入集群详情页。3.工作负载 > DaemonSet 中,命名空间选择 kube-system,找到 {xxx}-ingress-nginx-controller,单击右侧的更新 Pod 配置。如下图所示:

腾讯云容器服务TKE 使用 logrotate 切割 nginx-ingress 访问日志同尘科技


4.更新 Pod 配置页面中,添加一个数据卷,如下图所示:

腾讯云容器服务TKE 使用 logrotate 切割 nginx-ingress 访问日志同尘科技


新增数据卷中,数据卷类型选择使用临时目录,数据卷名称填写 logrotate。5. 在实例内容器中,选择 controller,并添加挂载点。如下图所示:

腾讯云容器服务TKE 使用 logrotate 切割 nginx-ingress 访问日志同尘科技


添加挂载点中,名称填写 logrotate,路径填写 /var/log/nginx/ 。6. 添加一个 logrotate 容器。如下图所示:

腾讯云容器服务TKE 使用 logrotate 切割 nginx-ingress 访问日志同尘科技


镜像选择 realz/logrotate,挂载点选择 logrotate数据卷,路径填写 /var/log/nginx/。在环境变量中,参考以下配置进行填写:

CRON_EXPR="* * * * *"  LOGROTATE_LOGFILES=/var/log/nginx/*.logLOGROTATE_FILESIZE=1MLOGROTATE_FILENUM=5

如下图所示:

腾讯云容器服务TKE 使用 logrotate 切割 nginx-ingress 访问日志同尘科技


7. 配置完成后,单击更新 Pod 配置。完整的 yaml 示例如下:

apiVersion: apps/v1kind: Deploymentmetadata:  labels:    k8s-app: nginx-intranet-ingress-nginx-controller    qcloud-app: nginx-intranet-ingress-nginx-controller  name: nginx-intranet-ingress-nginx-controller  namespace: kube-systemspec:  progressDeadlineSeconds: 600  replicas: 1  revisionHistoryLimit: 10  selector:    matchLabels:      k8s-app: nginx-intranet-ingress-nginx-controller      qcloud-app: nginx-intranet-ingress-nginx-controller  strategy:    rollingUpdate:      maxSurge: 25%      maxUnavailable: 25%    type: RollingUpdate  template:    metadata:      labels:        k8s-app: nginx-intranet-ingress-nginx-controller        qcloud-app: nginx-intranet-ingress-nginx-controller      name: nginx-intranet-ingress-nginx-controller      namespace: kube-system    spec:      containers:      - args:        - /nginx-ingress-controller        - --election-id=ingress-controller-leader        - --ingress-class=nginx-intranet        - --configmap=kube-system/nginx-intranet-ingress-nginx-controller        - --publish-service=kube-system/nginx-intranet-ingress-nginx-controller        - --validating-webhook=:8443        - --validating-webhook-certificate=/usr/local/certificates/cert        - --validating-webhook-key=/usr/local/certificates/key        - --tcp-services-configmap=kube-system/nginx-intranet-ingress-nginx-tcp        - --udp-services-configmap=kube-system/nginx-intranet-ingress-nginx-udp        env:        - name: POD_NAME          valueFrom:            fieldRef:              apiVersion: v1              fieldPath: metadata.name        - name: POD_NAMESPACE          valueFrom:            fieldRef:              apiVersion: v1              fieldPath: metadata.namespace        image: ccr.ccs.tencentyun.com/paas/nginx-ingress-controller:v0.41.0        imagePullPolicy: Always        lifecycle:          preStop:            exec:              command:              - /wait-shutdown        livenessProbe:          failureThreshold: 3          httpGet:            path: /healthz            port: 10254            scheme: HTTP          initialDelaySeconds: 10          periodSeconds: 10          successThreshold: 1          timeoutSeconds: 1        name: controller        ports:        - containerPort: 80          name: http          protocol: TCP        - containerPort: 443          name: https          protocol: TCP        - containerPort: 10254          name: metrics          protocol: TCP        - containerPort: 8443          name: webhook          protocol: TCP        readinessProbe:          failureThreshold: 3          httpGet:            path: /healthz            port: 10254            scheme: HTTP          initialDelaySeconds: 10          periodSeconds: 10          successThreshold: 1          timeoutSeconds: 1        resources: {}        securityContext:          allowPrivilegeEscalation: true          capabilities:            add:            - NET_BIND_SERVICE            drop:            - ALL          runAsUser: 101        terminationMessagePath: /dev/termination-log        terminationMessagePolicy: File        volumeMounts:        - mountPath: /usr/local/certificates/          name: webhook-cert          readOnly: true        - mountPath: /var/log/nginx          name: logrotate      - env:        - name: LOGROTATE_LOGFILES          value: /var/log/nginx/*.log        - name: CRON_EXPR          value: '* * * * *'        - name: LOGROTATE_FILESIZE          value: 1M        - name: LOGROTATE_FILENUM          value: "5"        image: realz/logrotate        imagePullPolicy: Always        name: logrotate        resources:          limits:            cpu: 500m            memory: 1Gi          requests:            cpu: 250m            memory: 256Mi        securityContext:          privileged: false        terminationMessagePath: /dev/termination-log        terminationMessagePolicy: File        volumeMounts:        - mountPath: /var/log/nginx          name: logrotate      dnsPolicy: ClusterFirst      initContainers:      - command:        - sh        - -c        - |-          sysctl -w net.core.somaxconn=65535          sysctl -w net.ipv4.ip_local_port_range="1024 65535"          sysctl -w net.ipv4.tcp_tw_reuse=1          sysctl -w fs.file-max=1048576        image: ccr.ccs.tencentyun.com/tkeimages/busybox:latest        imagePullPolicy: Always        name: setsysctl        resources: {}        securityContext:          privileged: true        terminationMessagePath: /dev/termination-log        terminationMessagePolicy: File      restartPolicy: Always      schedulerName: default-scheduler      securityContext: {}      serviceAccount: nginx-intranet-ingress-nginx      serviceAccountName: nginx-intranet-ingress-nginx      terminationGracePeriodSeconds: 300      volumes:      - name: webhook-cert        secret:          defaultMode: 420          secretName: nginx-intranet-ingress-nginx-admission      - emptyDir: {}        name: logrotate

步骤3:验证配置是否生效

当 nginx-ingress controller pod 运行正常后,您可以通过 ingress 域名访问后端服务,从而生成访问日志。

腾讯云容器服务TKE 使用 logrotate 切割 nginx-ingress 访问日志同尘科技


隔几分钟后,登录容器并查看日志,可以发现日志已被切割成多个文件。

腾讯云容器服务TKE 使用 logrotate 切割 nginx-ingress 访问日志同尘科技


通过以上配置,您已成功地使用 logrotate 切割了 nginx-ingress controller 的访问日志,并且这样不会影响 CLS 采集日志。
容器服务官网1折活动,限时活动,即将结束,速速收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/148528.html

(0)
上一篇 2023年12月9日 下午12:57
下一篇 2023年12月9日 下午12:57
详情页2

相关推荐

  • 腾讯云负载均衡实例类型对比

    负载均衡有两种实例类型:负载均衡(此前亦被称为“应用型负载均衡”)和传统型负载均衡。负载均衡:支持 TCP/UDP/HTTP/HTTPS 协议,提供基于域名和 URL 路径的均衡能力,支持灵活转发。传统型负载均衡:内网不支持 HTTP/HTTPS 协议,配置方法简单。负载均衡可覆盖传统型负载均衡的所有功能。从产品功能、产品性能等多方面考虑,建议您使用的实例类…

    腾讯云 2023年12月9日
  • 腾讯云云点播关于腾讯云视立方·播放器 SDK 视频播放功能授权校验说明的公告

    腾讯云视立方·播放器 SDK 移动端(Android & iOS & Flutter)10.1 版本后的 SDK 视频播放能力获得全面优化升级,同时新增了对视频播放功能的授权校验。播放器 SDK 移动端10.1及更高版本的视频播放功能,需购买直播 License、短视频 License 和视频播放 License中任意一款 License 获…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云容器服务TKE 标准集群动态(2023年)同尘科技

    2023年9月 动态名称 动态描述 相关文档 COS 挂载方式支持 GooseFS-Lite COS 挂载方式支持 GooseFS-Lite,可使用更高的大文件读写速度,不受本地磁盘的性能限制。 使用对象存储 COS 集群升级前置检查增加废弃 API Version的检查校验 集群升级前置检查增加废弃 API Version 的检查校验,避免升级过程中出…

    腾讯云 2023年12月9日
  • 腾讯云对象存储图片持久化处理

    简介 腾讯云对象存储(Cloud Object Storage,COS)集成了 数据万象(Cloud Infinite,CI)专业的一体化多媒体解决方案,涵盖以下图片处理功能,详情可见 图片处理概述。 服务 功能 说明 基础图片处理服务 缩放 等比缩放、设定目标宽高缩放等多种方式  裁剪 普通裁剪、缩放裁剪、内切圆、人脸智能裁剪  旋转 自适应旋转、普通…

    腾讯云 2023年12月9日
  • 腾讯云轻量应用服务器计费概述云小二

    轻量应用服务器计费分为 基础套餐、套餐外超额流量、自定义镜像、云硬盘 及 备份点配额 五部分。 基础套餐 轻量应用服务器提供服务器套餐售卖模式,套餐包含了 CPU、内存、SSD 云硬盘、网络流量包等云服务器资源,并以优惠价格售卖。如若套餐包含的云服务器资源无法满足用户的需求,用户还可以通过购买超出流量等形式申请额外的云服务资源。 计费模式 基础套餐目前仅支持…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。