From e144f42c016a697bafd0a8ff6564e56a345973ba Mon Sep 17 00:00:00 2001 From: Apoorva Jagtap <35304110+apoorvajagtap@users.noreply.github.com> Date: Fri, 31 Jan 2025 21:48:49 +0530 Subject: [PATCH] [dev-v2.9] rancher-logging 104.1.3+up4.8.0 create (#5062) Fixes the unknown field 'spec.securityContext.seLinuxOptions' --- .../rancher-logging-crd-104.1.3+up4.8.0.tgz | Bin 0 -> 170038 bytes .../rancher-logging-104.1.3+up4.8.0.tgz | Bin 0 -> 19600 bytes .../104.1.3+up4.8.0/Chart.yaml | 10 + .../104.1.3+up4.8.0/README.md | 2 + ...xtensions.banzaicloud.io_eventtailers.yaml | 2467 ++ ...extensions.banzaicloud.io_hosttailers.yaml | 2651 ++ .../logging.banzaicloud.io_clusterflows.yaml | 2166 ++ ...logging.banzaicloud.io_clusteroutputs.yaml | 14812 +++++++++++ .../logging.banzaicloud.io_flows.yaml | 2150 ++ ...ogging.banzaicloud.io_fluentbitagents.yaml | 2535 ++ ...logging.banzaicloud.io_fluentdconfigs.yaml | 3240 +++ .../logging.banzaicloud.io_loggingroutes.yaml | 106 + .../logging.banzaicloud.io_loggings.yaml | 20601 ++++++++++++++++ .../logging.banzaicloud.io_nodeagents.yaml | 4788 ++++ .../logging.banzaicloud.io_outputs.yaml | 14078 +++++++++++ ...g.banzaicloud.io_syslogngclusterflows.yaml | 360 + ...banzaicloud.io_syslogngclusteroutputs.yaml | 2911 +++ ...ogging.banzaicloud.io_syslogngconfigs.yaml | 8104 ++++++ .../logging.banzaicloud.io_syslogngflows.yaml | 364 + ...ogging.banzaicloud.io_syslogngoutputs.yaml | 2905 +++ .../104.1.3+up4.8.0/.helmignore | 26 + .../104.1.3+up4.8.0/Chart.yaml | 30 + .../rancher-logging/104.1.3+up4.8.0/README.md | 134 + .../104.1.3+up4.8.0/app-readme.md | 45 + .../104.1.3+up4.8.0/templates/NOTES.txt | 0 .../templates/_generic_fluentbitagent.yaml | 82 + .../templates/_generic_logging.yaml | 72 + .../104.1.3+up4.8.0/templates/_helpers.tpl | 197 + .../templates/clusterrole.yaml | 388 + .../templates/clusterrolebinding.yaml | 18 + .../104.1.3+up4.8.0/templates/crds.yaml | 6 + .../104.1.3+up4.8.0/templates/deployment.yaml | 79 + .../templates/extra-manifests.yaml | 4 + .../templates/logging/clusterflows.yaml | 14 + .../templates/logging/clusteroutputs.yaml | 14 + .../templates/logging/eventtailer.yaml | 41 + .../templates/logging/fluentbit.yaml | 17 + .../templates/logging/hosttailer.yaml | 31 + .../templates/logging/logging.yaml | 60 + .../loggings/aks/fluentbitagent.yaml | 17 + .../templates/loggings/aks/logging.yaml | 7 + .../loggings/eks/fluentbitagent.yaml | 18 + .../templates/loggings/eks/logging.yaml | 17 + .../loggings/gke/fluentbitagent.yaml | 17 + .../templates/loggings/gke/logging.yaml | 7 + .../templates/loggings/k3s/configmap.yaml | 57 + .../templates/loggings/k3s/daemonset.yaml | 110 + .../loggings/k3s/fluentbitagent.yaml | 18 + .../loggings/k3s/logging-k3s-openrc.yaml | 7 + .../loggings/kube-audit/fluentbitagent.yaml | 21 + .../loggings/kube-audit/logging.yaml | 11 + .../templates/loggings/rke/configmap.yaml | 29 + .../templates/loggings/rke/daemonset.yaml | 122 + .../templates/loggings/rke2/configmap.yaml | 69 + .../templates/loggings/rke2/daemonset.yaml | 116 + .../loggings/root/fluentbitagent.yaml | 29 + .../templates/loggings/root/logging.yaml | 67 + .../104.1.3+up4.8.0/templates/service.yaml | 20 + .../templates/service_monitor.yaml | 30 + .../templates/serviceaccount.yaml | 14 + .../templates/test_receiver.yaml | 53 + .../104.1.3+up4.8.0/templates/userrole.yaml | 39 + .../104.1.3+up4.8.0/templates/userroles.yaml | 35 + .../templates/validate-install-crd.yaml | 29 + .../templates/validate-install.yaml | 5 + .../templates/validate-psp-install.yaml | 7 + .../values-logging-example.yaml | 24 + .../104.1.3+up4.8.0/values.yaml | 484 + index.yaml | 48 + .../templates/_generic_fluentbitagent.yaml | 6 +- packages/rancher-logging/package.yaml | 2 +- release.yaml | 4 + 72 files changed, 87043 insertions(+), 4 deletions(-) create mode 100644 assets/rancher-logging-crd/rancher-logging-crd-104.1.3+up4.8.0.tgz create mode 100644 assets/rancher-logging/rancher-logging-104.1.3+up4.8.0.tgz create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/Chart.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/README.md create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging-extensions.banzaicloud.io_eventtailers.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging-extensions.banzaicloud.io_hosttailers.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_clusterflows.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_clusteroutputs.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_flows.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_fluentbitagents.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_fluentdconfigs.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_loggingroutes.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_loggings.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_nodeagents.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_outputs.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_syslogngclusterflows.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_syslogngclusteroutputs.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_syslogngconfigs.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_syslogngflows.yaml create mode 100644 charts/rancher-logging-crd/104.1.3+up4.8.0/templates/logging.banzaicloud.io_syslogngoutputs.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/.helmignore create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/Chart.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/README.md create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/app-readme.md create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/NOTES.txt create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/_generic_fluentbitagent.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/_generic_logging.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/_helpers.tpl create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/clusterrole.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/clusterrolebinding.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/crds.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/deployment.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/extra-manifests.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/logging/clusterflows.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/logging/clusteroutputs.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/logging/eventtailer.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/logging/fluentbit.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/logging/hosttailer.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/logging/logging.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/aks/fluentbitagent.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/aks/logging.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/eks/fluentbitagent.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/eks/logging.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/gke/fluentbitagent.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/gke/logging.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/configmap.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/daemonset.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/fluentbitagent.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/logging-k3s-openrc.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/kube-audit/fluentbitagent.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/kube-audit/logging.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke/configmap.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke/daemonset.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke2/configmap.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke2/daemonset.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/root/fluentbitagent.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/root/logging.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/service.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/service_monitor.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/serviceaccount.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/test_receiver.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/userrole.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/userroles.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/validate-install-crd.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/validate-install.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/templates/validate-psp-install.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/values-logging-example.yaml create mode 100644 charts/rancher-logging/104.1.3+up4.8.0/values.yaml diff --git a/assets/rancher-logging-crd/rancher-logging-crd-104.1.3+up4.8.0.tgz b/assets/rancher-logging-crd/rancher-logging-crd-104.1.3+up4.8.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..97a6e574ea7b431b46abd6838b8ae4554fad39ad GIT binary patch literal 170038 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®y1`!%$4-LDctUZZ{+!mmIUm=}&)$*$MkypRRQ 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¨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¥?zs+|+>%+q2fHWH&0K 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 OAB{E{5FmNqK>iQThs{a= literal 0 HcmV?d00001 diff --git a/assets/rancher-logging/rancher-logging-104.1.3+up4.8.0.tgz b/assets/rancher-logging/rancher-logging-104.1.3+up4.8.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..2cb1d14347b039abb47c35466c9bcc4feaf706d8 GIT binary patch literal 19600 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 LPR*XW0Pq0-p#7= 1.26.0-0 < 1.31.0-0' + catalog.cattle.io/namespace: cattle-logging-system + catalog.cattle.io/permits-os: linux,windows + catalog.cattle.io/provides-gvr: logging.banzaicloud.io.clusterflow/v1beta1 + catalog.cattle.io/rancher-version: '>= 2.9.0-0 < 2.10.0-0' + catalog.cattle.io/release-name: rancher-logging + catalog.cattle.io/type: cluster-tool + catalog.cattle.io/ui-component: logging + catalog.cattle.io/upstream-version: 4.8.0 +apiVersion: v2 +appVersion: 4.8.0 +description: Logging operator for Kubernetes based on Fluentd and Fluentbit. +home: https://kube-logging.github.io +icon: file://assets/logos/rancher-logging.svg +keywords: +- logging +- fluentd +- fluentbit +kubeVersion: '>=1.26.0-0' +name: rancher-logging +sources: +- https://github.com/kube-logging/logging-operator +- https://github.com/kube-logging/helm-charts/tree/main/charts/logging-operator +type: application +version: 104.1.3+up4.8.0 diff --git a/charts/rancher-logging/104.1.3+up4.8.0/README.md b/charts/rancher-logging/104.1.3+up4.8.0/README.md new file mode 100644 index 000000000..7f66f42ab --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/README.md @@ -0,0 +1,134 @@ +# logging-operator + +![type: application](https://img.shields.io/badge/type-application-informational?style=flat-square) ![kube version: >=1.22.0-0](https://img.shields.io/badge/kube%20version->=1.22.0--0-informational?style=flat-square) [![artifact hub](https://img.shields.io/badge/artifact%20hub-logging--operator-informational?style=flat-square)](https://artifacthub.io/packages/helm/kube-logging/logging-operator) + +Logging operator for Kubernetes based on Fluentd and Fluentbit. + +**Homepage:** + +## TL;DR; + +```bash +helm install --generate-name --wait oci://ghcr.io/kube-logging/helm-charts/logging-operator +``` + +or to install with a specific version: + +```bash +helm install --generate-name --wait oci://ghcr.io/kube-logging/helm-charts/logging-operator --version $VERSION +``` + +## Introduction + +This chart bootstraps a [Logging Operator](https://github.com/kube-logging/logging-operator) deployment on a [Kubernetes](http://kubernetes.io) cluster using the [Helm](https://helm.sh) package manager. + +## Prerequisites + +- Kubernetes 1.19+ + +## Installing CRDs + +Use `createCustomResource=false` with Helm v3 to avoid trying to create CRDs from the `crds` folder and from templates at the same time. + +## Values + +| Key | Type | Default | Description | +|-----|------|---------|-------------| +| replicaCount | int | `1` | | +| image.repository | string | `"ghcr.io/kube-logging/logging-operator"` | Name of the image repository to pull the container image from. | +| image.tag | string | `""` | Image tag override for the default value (chart appVersion). | +| image.pullPolicy | string | `"IfNotPresent"` | [Image pull policy](https://kubernetes.io/docs/concepts/containers/images/#updating-images) for updating already existing images on a node. | +| env | list | `[]` | | +| volumes | list | `[]` | | +| volumeMounts | list | `[]` | | +| extraArgs[0] | string | `"-enable-leader-election=true"` | | +| imagePullSecrets | list | `[]` | | +| nameOverride | string | `""` | A name in place of the chart name for `app:` labels. | +| fullnameOverride | string | `""` | A name to substitute for the full names of resources. | +| namespaceOverride | string | `""` | A namespace override for the app. | +| annotations | object | `{}` | Define annotations for logging-operator pods. | +| createCustomResource | bool | `false` | Deploy CRDs used by Logging Operator. | +| http.port | int | `8080` | HTTP listen port number. | +| http.service | object | `{"annotations":{},"clusterIP":"None","labels":{},"type":"ClusterIP"}` | Service definition for query http service. | +| rbac.enabled | bool | `true` | Create rbac service account and roles. | +| monitoring.serviceMonitor.enabled | bool | `false` | Create a Prometheus Operator ServiceMonitor object. | +| monitoring.serviceMonitor.additionalLabels | object | `{}` | | +| monitoring.serviceMonitor.metricRelabelings | list | `[]` | | +| monitoring.serviceMonitor.relabelings | list | `[]` | | +| podSecurityContext | object | `{}` | Pod SecurityContext for Logging operator. [More info](https://kubernetes.io/docs/concepts/policy/security-context/) # SecurityContext holds pod-level security attributes and common container settings. # This defaults to non root user with uid 1000 and gid 2000. *v1.PodSecurityContext false # ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ | +| securityContext | object | `{}` | Container SecurityContext for Logging operator. [More info](https://kubernetes.io/docs/concepts/policy/security-context/) | +| priorityClassName | object | `{}` | Operator priorityClassName. | +| serviceAccount.annotations | object | `{}` | Define annotations for logging-operator ServiceAccount. | +| resources | object | `{}` | CPU/Memory resource requests/limits | +| nodeSelector | object | `{}` | | +| tolerations | list | `[]` | Node Tolerations | +| affinity | object | `{}` | Node Affinity | +| podLabels | object | `{}` | Define which Nodes the Pods are scheduled on. | +| logging | object | `{"allowClusterResourcesFromAllNamespaces":false,"clusterDomain":"cluster.local.","clusterFlows":[],"clusterOutputs":[],"controlNamespace":"","defaultFlow":{},"enableRecreateWorkloadOnImmutableFieldChange":false,"enabled":false,"errorOutputRef":"","eventTailer":{},"flowConfigCheckDisabled":false,"flowConfigOverride":"","fluentbit":{},"fluentbitDisabled":false,"fluentd":{},"fluentdDisabled":false,"globalFilters":[],"hostTailer":{},"loggingRef":"","nodeAgents":{},"skipInvalidResources":false,"syslogNG":{},"watchNamespaceSelector":{},"watchNamespaces":[]}` | Logging resources configuration. | +| logging.enabled | bool | `false` | Logging resources are disabled by default | +| logging.loggingRef | string | `""` | Reference to the logging system. Each of the loggingRefs can manage a fluentbit daemonset and a fluentd statefulset. | +| logging.flowConfigCheckDisabled | bool | `false` | Disable configuration check before applying new fluentd configuration. | +| logging.skipInvalidResources | bool | `false` | Whether to skip invalid Flow and ClusterFlow resources | +| logging.flowConfigOverride | string | `""` | Override generated config. This is a raw configuration string for troubleshooting purposes. | +| logging.fluentbitDisabled | bool | `false` | Flag to disable fluentbit completely | +| logging.fluentbit | object | `{}` | Fluent-bit configurations https://kube-logging.github.io/docs/configuration/crds/v1beta1/fluentbit_types/ | +| logging.fluentdDisabled | bool | `false` | Flag to disable fluentd completely | +| logging.fluentd | object | `{}` | Fluentd configurations https://kube-logging.github.io/docs/configuration/crds/v1beta1/fluentd_types/ | +| logging.syslogNG | object | `{}` | Syslog-NG statefulset configuration | +| logging.defaultFlow | object | `{}` | Default flow for unmatched logs. This Flow configuration collects all logs that didn’t match any other Flow. | +| logging.errorOutputRef | string | `""` | GlobalOutput name to flush ERROR events to | +| logging.globalFilters | list | `[]` | Global filters to apply on logs before any match or filter mechanism. | +| logging.watchNamespaces | list | `[]` | Limit namespaces to watch Flow and Output custom resources. | +| logging.watchNamespaceSelector | object | `{}` | Limit namespaces to watch Flow and Output custom resources. | +| logging.clusterDomain | string | `"cluster.local."` | Cluster domain name to be used when templating URLs to services | +| logging.controlNamespace | string | `""` | Namespace for cluster wide configuration resources like ClusterFlow and ClusterOutput. This should be a protected namespace from regular users. Resources like fluentbit and fluentd will run in this namespace as well. | +| logging.allowClusterResourcesFromAllNamespaces | bool | `false` | Allow configuration of cluster resources from any namespace. Mutually exclusive with ControlNamespace restriction of Cluster resources | +| logging.nodeAgents | object | `{}` | NodeAgent Configuration | +| logging.configCheck | object | `{}` | configCheck provides possibility for timeout-based configuration checks https://kube-logging.dev/docs/whats-new/#timeout-based-configuration-checks | +| logging.enableRecreateWorkloadOnImmutableFieldChange | bool | `false` | EnableRecreateWorkloadOnImmutableFieldChange enables the operator to recreate the fluentbit daemonset and the fluentd statefulset (and possibly other resource in the future) in case there is a change in an immutable field that otherwise couldn’t be managed with a simple update. | +| logging.clusterFlows | list | `[]` | ClusterFlows to deploy | +| logging.clusterOutputs | list | `[]` | ClusterOutputs to deploy | +| logging.eventTailer.enabled | bool | `false` | | +| logging.eventTailer.name | string | `"event-tailer"` | | +| logging.eventTailer.image.repository | string | `nil` | repository of eventTailer image | +| logging.eventTailer.image.tag | string | `nil` | tag of eventTailer image | +| logging.eventTailer.image.pullPolicy | string | `nil` | pullPolicy of eventTailer image | +| logging.eventTailer.image.imagePullSecrets | list | `[]` | imagePullSecrets of eventTailer image | +| logging.eventTailer.pvc.enabled | bool | `true` | enable pvc for | +| logging.eventTailer.pvc.accessModes | list | `["ReadWriteOnce"]` | storage class for event tailer pvc | +| logging.eventTailer.pvc.volumeMode | string | `"Filesystem"` | storage class for event tailer pvc | +| logging.eventTailer.pvc.storage | string | `"1Gi"` | storage for event tailer pvc | +| logging.eventTailer.pvc.storageClassName | string | `nil` | storage class for event tailer pvc | +| logging.eventTailer.workloadMetaOverrides | string | `nil` | workloadMetaOverrides | +| logging.eventTailer.workloadOverrides | string | `nil` | workloadOverrides | +| logging.eventTailer.containerOverrides | string | `nil` | containerOverrides | +| logging.hostTailer.enabled | bool | `false` | HostTailer | +| logging.hostTailer.name | string | `"hosttailer"` | name of HostTailer | +| logging.hostTailer.image.repository | string | `nil` | repository of eventTailer image | +| logging.hostTailer.image.tag | string | `nil` | tag of eventTailer image | +| logging.hostTailer.image.pullPolicy | string | `nil` | pullPolicy of eventTailer image | +| logging.hostTailer.image.imagePullSecrets | list | `[]` | imagePullSecrets of eventTailer image | +| logging.hostTailer.workloadMetaOverrides | string | `nil` | workloadMetaOverrides of HostTailer | +| logging.hostTailer.workloadOverrides | string | `nil` | workloadOverrides of HostTailer | +| logging.hostTailer.fileTailers | list | `[]` | configure fileTailers of HostTailer example: - name: sample-file path: /var/log/sample-file disabled: false buffer_max_size: buffer_chunk_size: skip_long_lines: read_from_head: false containerOverrides: image: | +| logging.hostTailer.systemdTailers | list | `[]` | configure systemdTailers of HostTailer example: - name: system-sample disabled: false systemdFilter: kubelet.service maxEntries: 20 containerOverrides: image: | +| testReceiver.enabled | bool | `false` | | +| testReceiver.image | string | `"fluent/fluent-bit"` | | +| testReceiver.pullPolicy | string | `"IfNotPresent"` | | +| testReceiver.port | int | `8080` | | +| testReceiver.args[0] | string | `"-i"` | | +| testReceiver.args[1] | string | `"http"` | | +| testReceiver.args[2] | string | `"-p"` | | +| testReceiver.args[3] | string | `"port=8080"` | | +| testReceiver.args[4] | string | `"-o"` | | +| testReceiver.args[5] | string | `"stdout"` | | +| testReceiver.resources.limits.cpu | string | `"100m"` | | +| testReceiver.resources.limits.memory | string | `"50Mi"` | | +| testReceiver.resources.requests.cpu | string | `"20m"` | | +| testReceiver.resources.requests.memory | string | `"25Mi"` | | +| extraManifests | list | `[]` | Extra manifests to deploy as an array | + +## Installing Fluentd and Fluent-bit via logging + +The chart does **not** install `logging` resource to deploy Fluentd (or Syslog-ng) and Fluent-bit on the cluster by default, but +it can be enabled by setting the `logging.enabled` value to true. diff --git a/charts/rancher-logging/104.1.3+up4.8.0/app-readme.md b/charts/rancher-logging/104.1.3+up4.8.0/app-readme.md new file mode 100644 index 000000000..994c597ee --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/app-readme.md @@ -0,0 +1,45 @@ +# Rancher Logging + +This chart is based off of the upstream [Banzai Logging Operator](https://banzaicloud.com/docs/one-eye/logging-operator/) chart. The chart deploys a logging operator and CRDs, which allows users to configure complex logging pipelines with a few simple custom resources. There are two levels of logging, which allow you to collect all logs in a cluster or from a single namespace. + +For more information on how to use the feature, refer to our [docs](https://rancher.com/docs/rancher/v2.x/en/logging/v2.7/). + +## Upgrading to Kubernetes v1.25+ + +Starting in Kubernetes v1.25, [Pod Security Policies](https://kubernetes.io/docs/concepts/security/pod-security-policy/) have been removed from the Kubernetes API. + +As a result, **before upgrading to Kubernetes v1.25** (or on a fresh install in a Kubernetes v1.25+ cluster), users are expected to perform an in-place upgrade of this chart with `global.cattle.psp.enabled` set to `false` if it has been previously set to `true`. + +> **Note:** +> In this chart release, any previous field that was associated with any PSP resources have been removed in favor of a single global field: `global.cattle.psp.enabled`. + +> **Note:** +> If you upgrade your cluster to Kubernetes v1.25+ before removing PSPs via a `helm upgrade` (even if you manually clean up resources), **it will leave the Helm release in a broken state within the cluster such that further Helm operations will not work (`helm uninstall`, `helm upgrade`, etc.).** +> +> If your charts get stuck in this state, please consult the Rancher docs on how to clean up your Helm release secrets. + +Upon setting `global.cattle.psp.enabled` to false, the chart will remove any PSP resources deployed on its behalf from the cluster. This is the default setting for this chart. + +As a replacement for PSPs, [Pod Security Admission](https://kubernetes.io/docs/concepts/security/pod-security-admission/) should be used. Please consult the Rancher docs for more details on how to configure your chart release namespaces to work with the new Pod Security Admission and apply Pod Security Standards. + +## Namespace-level logging + +To collect logs from a single namespace, users create flows and these flows are connected to outputs or cluster outputs. + +## Cluster-level logging + +To collect logs from an entire cluster, users create cluster flows and cluster outputs. + +## CRDs + +- [Cluster Flow](https://banzaicloud.com/docs/one-eye/logging-operator/crds/v1beta1/clusterflow_types/) - A cluster flow is a CRD (`ClusterFlow`) that defines what logs to collect from the entire cluster. The cluster flow must be deployed in the same namespace as the logging operator. +- [Cluster Output](https://banzaicloud.com/docs/one-eye/logging-operator/crds/v1beta1/clusteroutput_types/) - A cluster output is a CRD (`ClusterOutput`) that defines how to connect to logging providers so they can start collecting logs. The cluster output must be deployed in the same namespace as the logging operator. The convenience of using a cluster output is that either a cluster flow or flow can send logs to those providers without needing to define specific outputs in each namespace for each flow. +- [Flow](https://banzaicloud.com/docs/one-eye/logging-operator/crds/v1beta1/flow_types/) - A flow is a CRD (`Flow`) that defines what logs to collect from the namespace that it is deployed in. +- [Output](https://banzaicloud.com/docs/one-eye/logging-operator/crds/v1beta1/output_types/) - An output is a CRD (`Output`) that defines how to connect to logging providers so logs can be sent to the provider. + +For more information on how to configure the Helm chart, refer to the Helm README. + +## Systemd Configuration +Some Kubernetes distributions log to journald. In order to collect these logs the `systemdLogPath` needs to be defined. While the `/run/log/journal` directory is used by default, some Linux distributions do not default to this path. For example Ubuntu defaults to `/var/log/journal`. To determine your `systemdLogPath` run `cat /etc/systemd/journald.conf | grep -E ^\#?Storage | cut -d"=" -f2` on one of your nodes. If `persistent` is returned your `systemdLogPath` should be `/var/log/journal`. If `volatile` is returned `systemdLogPath` should be `/run/log/journal`. If `auto` is returned check if `/var/log/journal` exists, and if it does then use `/var/log/journal`, otherwise use `/run/log/journal`. + +If any value not described here is returned, Rancher Logging will not be able to collect control plane logs. To address this issue set `Storage=volatile` in journald.conf, reboot your machine, and set `systemdLogPath` to `/run/log/journal`. diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/NOTES.txt b/charts/rancher-logging/104.1.3+up4.8.0/templates/NOTES.txt new file mode 100644 index 000000000..e69de29bb diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/_generic_fluentbitagent.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/_generic_fluentbitagent.yaml new file mode 100644 index 000000000..ee7a7fa21 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/_generic_fluentbitagent.yaml @@ -0,0 +1,82 @@ +{{- define "logging-operator.fluentbitagent.tpl" -}} +apiVersion: logging.banzaicloud.io/v1beta1 +kind: FluentbitAgent +metadata: + namespace: {{ .Release.Namespace }} + labels: +{{ include "logging-operator.labels" . | indent 4 }} +spec: + image: + repository: {{ template "logging-operator.fluentbitImageRepository" . }} + tag: {{ template "logging-operator.fluentbitImageTag" . }} + {{- if not .Values.disablePvc }} + {{- with .Values.fluentbit.bufferStorage }} + bufferStorage: {{- toYaml . | nindent 6 }} + {{- end }} + {{- with .Values.fluentbit.bufferStorageVolume }} + bufferStorageVolume: {{- toYaml . | nindent 6 }} + {{- end }} + {{- end }} + {{- if or .Values.global.cattle.psp.enabled .Values.global.seLinux.enabled }} + security: + {{- end }} + {{- if .Values.global.cattle.psp.enabled }} + podSecurityPolicyCreate: true + roleBasedAccessControlCreate: true + {{- end }} + {{- if .Values.global.seLinux.enabled }} + securityContext: + seLinuxOptions: + type: rke_logreader_t + {{- end }} + {{- if or .Values.fluentbit.inputTail.Buffer_Chunk_Size .Values.fluentbit.inputTail.Buffer_Max_Size .Values.fluentbit.inputTail.Mem_Buf_Limit .Values.fluentbit.inputTail.Multiline_Flush .Values.fluentbit.inputTail.Skip_Long_Lines }} + inputTail: + {{- if .Values.fluentbit.inputTail.Buffer_Chunk_Size }} + Buffer_Chunk_Size: {{ .Values.fluentbit.inputTail.Buffer_Chunk_Size | toString }} + {{- end }} + {{- if .Values.fluentbit.inputTail.Buffer_Max_Size }} + Buffer_Max_Size: {{ .Values.fluentbit.inputTail.Buffer_Max_Size | toString }} + {{- end }} + {{- if .Values.fluentbit.inputTail.Mem_Buf_Limit }} + Mem_Buf_Limit: {{ .Values.fluentbit.inputTail.Mem_Buf_Limit | toString }} + {{- end }} + {{- if .Values.fluentbit.inputTail.Multiline_Flush }} + Multiline_Flush: {{ .Values.fluentbit.inputTail.Multiline_Flush | toString | quote }} + {{- end }} + {{- if .Values.fluentbit.inputTail.Skip_Long_Lines }} + Skip_Long_Lines: {{ .Values.fluentbit.inputTail.Skip_Long_Lines | toString | quote }} + {{- end }} + {{- end }} + {{- with (concat (.Values.tolerations) (.Values.fluentbit.tolerations)) }} + tolerations: {{- toYaml . | nindent 6 }} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 6 }} + {{- end }} + {{- with .Values.fluentbit.resources }} + resources: {{- toYaml . | nindent 6 }} + {{- end }} +{{- end -}} + +{{- define "logging-operator.util.merge.fluentbitagent" -}} +{{/* Top context to expose fields like `.Release` and `.Values` */}} +{{- $top := first . -}} + +{{/* tpl is the template specific to the fluentbit implementation */}} +{{- $tpl := fromYaml (include (index . 1) $top) | default (dict ) -}} + +{{/* Generic is the shared rancher fluentbit setttings from `_generic_fluentbitagent.yaml` */}} +{{- $generic := fromYaml (include (index . 2) $top) | default (dict ) -}} + +{{/* values are from the values.yaml */}} +{{- $values := $top.Values.fluentbitAgentOverlay | default (dict ) -}} + +####### {{$generic}} + +{{/* the sources are merge right to left meaning tpl is the highest prcedence and values is the lowest */}} +{{- toYaml (merge $tpl $values $generic) -}} +{{- end -}} + +{{- define "logging-operator.fluentbitagent" -}} +{{- include "logging-operator.util.merge.fluentbitagent" (append . "logging-operator.fluentbitagent.tpl") -}} +{{- end -}} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/_generic_logging.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/_generic_logging.yaml new file mode 100644 index 000000000..a143cdd9b --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/_generic_logging.yaml @@ -0,0 +1,72 @@ +{{- define "logging-operator.logging.tpl" -}} +apiVersion: logging.banzaicloud.io/v1beta1 +kind: Logging +metadata: + namespace: {{ .Release.Namespace }} + labels: +{{ include "logging-operator.labels" . | indent 4 }} +spec: + controlNamespace: {{ .Release.Namespace }} + fluentd: + {{- with .Values.fluentd.logLevel }} + logLevel: {{ . }} + {{- end }} + image: + repository: {{ template "system_default_registry" . }}{{ .Values.images.fluentd.repository }} + tag: {{ .Values.images.fluentd.tag }} + configReloaderImage: + repository: {{ template "system_default_registry" . }}{{ .Values.images.config_reloader.repository }} + tag: {{ .Values.images.config_reloader.tag }} + {{- with .Values.fluentd.bufferStorageVolume }} + bufferStorageVolume: {{- toYaml . | nindent 6 }} + {{- end }} + disablePvc: {{ .Values.disablePvc }} + {{- if .Values.fluentd.replicas }} + scaling: + replicas: {{ .Values.fluentd.replicas }} + {{- end }} + security: + podSecurityContext: + {{- if .Values.global.cattle.psp.enabled }} + podSecurityPolicyCreate: true + roleBasedAccessControlCreate: true + {{- end }} + {{- with .Values.fluentd.env }} + envVars: {{- toYaml . | nindent 6 }} + {{- end }} + {{- with (default .Values.tolerations .Values.fluentd.tolerations) }} + tolerations: {{- toYaml . | nindent 6 }} + {{- end }} + {{- with (default .Values.nodeSelector .Values.fluentd.nodeSelector) }} + nodeSelector: {{- toYaml . | nindent 6 }} + {{- end }} + {{- with .Values.fluentd.resources }} + resources: {{- toYaml . | nindent 6 }} + {{- end }} + {{- with .Values.fluentd.livenessProbe }} + livenessProbe: {{- toYaml . | nindent 6 }} + {{- end }} +{{- end -}} + +{{- define "logging-operator.util.merge.logging" -}} +{{/* Top context to expose fields like `.Release` and `.Values` */}} +{{- $top := first . -}} + +{{/* tpl is the template specific to the logging implementation */}} +{{- $tpl := fromYaml (include (index . 1) $top) | default (dict ) -}} + +{{/* Generic is the shared rancher logging setttings from `_generic_logging.yaml` */}} +{{- $generic := fromYaml (include (index . 2) $top) | default (dict ) -}} + +{{/* values are from the values.yaml */}} +{{- $values := $top.Values.loggingOverlay | default (dict ) -}} + +####### {{$generic}} + +{{/* the sources are merge right to left meaning tpl is the highest prcedence and values is the lowest */}} +{{- toYaml (merge $tpl $values $generic) -}} +{{- end -}} + +{{- define "logging-operator.logging" -}} +{{- include "logging-operator.util.merge.logging" (append . "logging-operator.logging.tpl") -}} +{{- end -}} \ No newline at end of file diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/_helpers.tpl b/charts/rancher-logging/104.1.3+up4.8.0/templates/_helpers.tpl new file mode 100644 index 000000000..43b6a5413 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/_helpers.tpl @@ -0,0 +1,197 @@ +{{/* vim: set filetype=mustache: */}} +{{/* +Expand the name of the chart. +*/}} +{{- define "logging-operator.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "logging-operator.fullname" -}} +{{- if .Values.fullnameOverride -}} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- $name := default .Chart.Name .Values.nameOverride -}} +{{- if contains $name .Release.Name -}} +{{- .Release.Name | trunc 63 | trimSuffix "-" -}} +{{- else -}} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{- end -}} +{{- end -}} + +{{/* +Expand the name of the release. +*/}} +{{- define "logging-operator.releasename" -}} +{{- default .Release.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Provides the namespace the chart will be installed in using the builtin .Release.Namespace, +or, if provided, a manually overwritten namespace value. +*/}} +{{- define "logging-operator.namespace" -}} +{{- if .Values.namespaceOverride -}} +{{ .Values.namespaceOverride -}} +{{- else -}} +{{ .Release.Namespace }} +{{- end -}} +{{- end -}} + + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "logging-operator.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}} +{{- end -}} + +{{/* +Common labels +*/}} +{{- define "logging-operator.labels" -}} +app.kubernetes.io/name: {{ include "logging-operator.name" . }} +helm.sh/chart: {{ include "logging-operator.chart" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end -}} + +{{- define "system_default_registry" -}} +{{- if .Values.global.cattle.systemDefaultRegistry -}} +{{- printf "%s/" .Values.global.cattle.systemDefaultRegistry -}} +{{- else -}} +{{- "" -}} +{{- end -}} +{{- end -}} + +{{- define "windowsEnabled" }} +{{- if not (kindIs "invalid" .Values.global.cattle.windows) }} +{{- if not (kindIs "invalid" .Values.global.cattle.windows.enabled) }} +{{- if .Values.global.cattle.windows.enabled }} +true +{{- end }} +{{- end }} +{{- end }} +{{- end }} + +{{- define "windowsPathPrefix" -}} +{{- trimSuffix "/" (default "c:\\" .Values.global.cattle.rkeWindowsPathPrefix | replace "\\" "/" | replace "//" "/" | replace "c:" "C:") -}} +{{- end -}} + +{{- define "windowsKubernetesFilter" -}} +{{- printf "kubernetes.%s" ((include "windowsPathPrefix" .) | replace ":" "" | replace "/" ".") -}} +{{- end -}} + +{{- define "windowsInputTailMount" -}} +{{- (include "windowsPathPrefix" .) | replace "C:" "" -}} +{{- end -}} + +{{/* +Set the controlplane selector based on kubernetes distribution +*/}} +{{- define "controlplaneSelector" -}} +{{- $master := or .Values.additionalLoggingSources.rke2.enabled .Values.additionalLoggingSources.k3s.enabled -}} +{{- $defaultSelector := $master | ternary (dict "node-role.kubernetes.io/master" "true") (dict "node-role.kubernetes.io/controlplane" "true") -}} +{{ default $defaultSelector .Values.additionalLoggingSources.kubeAudit.nodeSelector | toYaml }} +{{- end -}} + +{{/* +Set kube-audit file path prefix based on distribution +*/}} +{{- define "kubeAuditPathPrefix" -}} +{{- if .Values.additionalLoggingSources.rke.enabled -}} +{{ default "/var/log/kube-audit" .Values.additionalLoggingSources.kubeAudit.pathPrefix }} +{{- else if .Values.additionalLoggingSources.rke2.enabled -}} +{{ default "/var/lib/rancher/rke2/server/logs" .Values.additionalLoggingSources.kubeAudit.pathPrefix }} +{{- else -}} +{{ required "Directory PathPrefix of the kube-audit location is required" .Values.additionalLoggingSources.kubeAudit.pathPrefix }} +{{- end -}} +{{- end -}} + +{{/* +Set kube-audit file name based on distribution +*/}} +{{- define "kubeAuditFilename" -}} +{{- if .Values.additionalLoggingSources.rke.enabled -}} +{{ default "audit-log.json" .Values.additionalLoggingSources.kubeAudit.auditFilename }} +{{- else if .Values.additionalLoggingSources.rke2.enabled -}} +{{ default "audit.log" .Values.additionalLoggingSources.kubeAudit.auditFilename }} +{{- else -}} +{{ required "Filename of the kube-audit log is required" .Values.additionalLoggingSources.kubeAudit.auditFilename }} +{{- end -}} +{{- end -}} + +{{/* +A shared list of custom parsers for the vairous fluentbit pods rancher creates +*/}} +{{- define "logging-operator.parsers" -}} +[PARSER] + Name klog + Format regex + Regex ^(?[IWEF])(?\d{4} \d{2}:\d{2}:\d{2}).\d{6} +?(?\d+) (?.+):(?\d+)] (?.+) + Time_Key timestamp + Time_Format %m%d %T + +[PARSER] + Name rancher + Format regex + Regex ^time="(?.+)" level=(?.+) msg="(?.+)"$ + Time_Key timestamp + Time_Format %FT%H:%M:%S +[PARSER] + Name etcd + Format json + Time_Key timestamp + Time_Format %FT%H:%M:%S.%L +{{- end -}} + +{{/* +Set kubernetes log options if they are configured +*/}} +{{- define "requireFilterKubernetes" -}} +{{- if or .Values.fluentbit.filterKubernetes.Merge_Log .Values.fluentbit.filterKubernetes.Merge_Log_Key .Values.fluentbit.filterKubernetes.Merge_Trim .Values.fluentbit.filterKubernetes.Merge_Parser -}} +true +{{- end -}} +{{- end -}} + +{{/*Fluent Bit Image Repository */}} +{{- define "logging-operator.fluentbitImageRepository" -}} +{{- if .Values.debug -}} +{{ template "system_default_registry" . }}{{ .Values.images.fluentbit_debug.repository }} +{{- else -}} +{{ template "system_default_registry" . }}{{ .Values.images.fluentbit.repository }} +{{- end -}} +{{- end -}} + +{{/*Fluent Bit Image Tag */}} +{{- define "logging-operator.fluentbitImageTag" -}} +{{- if .Values.debug -}} +{{ .Values.images.fluentbit_debug.tag }} +{{- else -}} +{{ .Values.images.fluentbit.tag }} +{{- end -}} +{{- end -}} + +{{/*Fluent Bit Image */}} +{{- define "logging-operator.fluentbitImage" -}} +{{ template "logging-operator.fluentbitImageRepository" . }}:{{ template "logging-operator.fluentbitImageTag" . }} +{{- end -}} + +{{/* +Formats the cluster domain as a suffix, e.g.: +.Values.clusterDomain == "", returns "" +.Values.clusterDomain == "cluster.local.", returns ".cluster.local." +*/}} +{{- define "logging-operator.clusterDomainAsSuffix" -}} +{{- if .Values.clusterDomain -}} +{{- printf ".%s" .Values.clusterDomain -}} +{{- end -}} +{{- end -}} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/clusterrole.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/clusterrole.yaml new file mode 100644 index 000000000..1e2652a7e --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/clusterrole.yaml @@ -0,0 +1,388 @@ +{{- if .Values.rbac.enabled }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "logging-operator.fullname" . }} +rules: +- apiGroups: + - "" + resources: + - configmaps + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - configmaps + - secrets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - endpoints + - namespaces + - nodes + - nodes/proxy + verbs: + - get + - list + - watch +- apiGroups: + - "" + resources: + - events + verbs: + - create + - get + - list + - watch +- apiGroups: + - "" + resources: + - persistentvolumeclaims + - pods + - serviceaccounts + - services + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + resources: + - serviceaccounts + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - "" + - events.k8s.io + resources: + - events + verbs: + - create + - get + - list + - watch +- apiGroups: + - apps + resources: + - daemonsets + - replicasets + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + - extensions + resources: + - daemonsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + - extensions + resources: + - deployments + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - apps + - extensions + resources: + - statefulsets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - batch + resources: + - jobs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: + - '*' +- apiGroups: + - events.k8s.io + resources: + - events + verbs: + - get + - list + - watch +- apiGroups: + - extensions + - networking.k8s.io + resources: + - ingresses + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - extensions + - policy + resources: + - podsecuritypolicies + verbs: + - create + - delete + - get + - list + - patch + - update + - use + - watch +- apiGroups: + - logging-extensions.banzaicloud.io + resources: + - eventtailers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - logging-extensions.banzaicloud.io + resources: + - eventtailers/status + verbs: + - get + - patch + - update +- apiGroups: + - logging-extensions.banzaicloud.io + resources: + - hosttailers + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - logging-extensions.banzaicloud.io + resources: + - hosttailers/status + verbs: + - get + - patch + - update +- apiGroups: + - logging.banzaicloud.io + resources: + - clusterflows + - clusteroutputs + - flows + - fluentbitagents + - fluentdconfigs + - loggings + - nodeagents + - outputs + - syslogngconfigs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - logging.banzaicloud.io + resources: + - clusterflows/status + - clusteroutputs/status + - flows/status + - fluentbitagents/status + - fluentdconfigs/status + - loggings/status + - nodeagents/status + - outputs/status + - syslogngconfigs/status + verbs: + - get + - patch + - update +- apiGroups: + - logging.banzaicloud.io + resources: + - loggingroutes + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - logging.banzaicloud.io + resources: + - loggingroutes/status + verbs: + - get + - patch + - update +- apiGroups: + - logging.banzaicloud.io + resources: + - loggings/finalizers + verbs: + - update +- apiGroups: + - logging.banzaicloud.io + resources: + - syslogngclusterflows + - syslogngclusteroutputs + - syslogngflows + - syslogngoutputs + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - logging.banzaicloud.io + resources: + - syslogngclusterflows/status + - syslogngclusteroutputs/status + - syslogngflows/status + - syslogngoutputs/status + verbs: + - get + - patch + - update +- apiGroups: + - monitoring.coreos.com + resources: + - prometheusrules + - servicemonitors + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - policy + resources: + - poddisruptionbudgets + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + - rolebindings + - roles + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterroles + verbs: + - create + - delete + - get + - list + - patch + - update + - watch +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/clusterrolebinding.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/clusterrolebinding.yaml new file mode 100644 index 000000000..89d17d094 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/clusterrolebinding.yaml @@ -0,0 +1,18 @@ +{{- if .Values.rbac.enabled }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ template "logging-operator.fullname" . }} + labels: +{{ include "logging-operator.labels" . | indent 4 }} +subjects: + - kind: ServiceAccount + name: {{ template "logging-operator.fullname" . }} + namespace: {{ include "logging-operator.namespace" . }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ template "logging-operator.fullname" . }} + + {{- end }} \ No newline at end of file diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/crds.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/crds.yaml new file mode 100644 index 000000000..f573652d0 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/crds.yaml @@ -0,0 +1,6 @@ +{{- if .Values.createCustomResource -}} +{{- range $path, $bytes := .Files.Glob "crds/*.yaml" }} +{{ $.Files.Get $path }} +--- +{{- end }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/deployment.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/deployment.yaml new file mode 100644 index 000000000..0cdf494e9 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/deployment.yaml @@ -0,0 +1,79 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "logging-operator.fullname" . }} + namespace: {{ include "logging-operator.namespace" . }} + labels: +{{ include "logging-operator.labels" . | indent 4 }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + app.kubernetes.io/name: {{ include "logging-operator.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "logging-operator.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} + {{- with .Values.podLabels }} + {{ toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.annotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + spec: + {{- if .Values.priorityClassName }} + priorityClassName: {{ .Values.priorityClassName }} + {{- end }} + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ template "system_default_registry" . }}{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" + args: + {{- range .Values.extraArgs }} + - {{ . }} + {{- end }} + imagePullPolicy: {{ .Values.image.pullPolicy }} + resources: + {{- toYaml .Values.resources | nindent 12 }} + ports: + - name: http + containerPort: {{ .Values.http.port }} + {{- with .Values.env }} + env: {{ toYaml . | nindent 12 }} + {{- end }} + {{- if .Values.securityContext }} + securityContext: {{ toYaml .Values.securityContext | nindent 12 }} + {{- end }} + {{- with .Values.volumeMounts }} + volumeMounts: {{ toYaml . | nindent 12 }} + {{- end }} + {{- with .Values.volumes }} + volumes: {{ toYaml . | nindent 8 }} + {{- end }} + {{- if .Values.podSecurityContext }} + securityContext: {{ toYaml .Values.podSecurityContext | nindent 8 }} + {{- end }} + + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- if .Values.rbac.serviceAccountName }} + serviceAccountName: {{ .Values.rbac.serviceAccountName }} + {{- else if .Values.rbac.enabled }} + serviceAccountName: {{ include "logging-operator.fullname" . }} + {{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/extra-manifests.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/extra-manifests.yaml new file mode 100644 index 000000000..567f7bf32 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/extra-manifests.yaml @@ -0,0 +1,4 @@ +{{ range .Values.extraManifests }} +--- +{{ tpl (toYaml .) $ }} +{{ end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/clusterflows.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/clusterflows.yaml new file mode 100644 index 000000000..3a1a46bee --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/clusterflows.yaml @@ -0,0 +1,14 @@ +{{ if .Values.logging.enabled -}} +{{- range $clusterflow := .Values.logging.clusterFlows }} +--- +apiVersion: logging.banzaicloud.io/v1beta1 +kind: ClusterFlow +metadata: + name: {{ $clusterflow.name }} + namespace: {{ $.Values.logging.controlNamespace | default $.Release.Namespace }} + labels: +{{ include "logging-operator.labels" $ | indent 4 }} +spec: +{{ toYaml $clusterflow.spec | indent 2 }} +{{- end -}} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/clusteroutputs.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/clusteroutputs.yaml new file mode 100644 index 000000000..60d9f30ae --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/clusteroutputs.yaml @@ -0,0 +1,14 @@ +{{ if .Values.logging.enabled -}} +{{- range $clusteroutput := .Values.logging.clusterOutputs }} +--- +apiVersion: logging.banzaicloud.io/v1beta1 +kind: ClusterOutput +metadata: + name: {{ $clusteroutput.name }} + namespace: {{ $.Values.logging.controlNamespace | default $.Release.Namespace }} + labels: +{{ include "logging-operator.labels" $ | indent 4 }} +spec: +{{ toYaml $clusteroutput.spec | indent 2 }} +{{- end -}} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/eventtailer.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/eventtailer.yaml new file mode 100644 index 000000000..830cf9b15 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/eventtailer.yaml @@ -0,0 +1,41 @@ +{{- with $.Values.logging.eventTailer }} +{{- if and $.Values.logging.enabled .enabled }} +apiVersion: logging-extensions.banzaicloud.io/v1alpha1 +kind: EventTailer +metadata: + name: {{ .name }} +spec: + controlNamespace: {{ $.Values.logging.controlNamespace | default $.Release.Namespace }} + {{- with .image }} + image: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .pvc }} + {{- if .enabled }} + positionVolume: + pvc: + spec: + accessModes: {{ .accessModes }} + resources: + requests: + storage: {{ .storage }} + volumeMode: {{ .volumeMode }} + {{- with .storageClassName }} + storageClassName: {{ . }} + {{- end }} + {{- end }}{{/* end if enabled */}} + {{- end }}{{/* end with pvc */}} + {{- with .workloadMetaOverrides }} + workloadMetaOverrides: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .workloadOverrides }} + workloadOverrides: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .containerOverrides }} + containerOverrides: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }}{{/* end if enabled */}} +{{- end }}{{/* end with event-tailer */}} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/fluentbit.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/fluentbit.yaml new file mode 100644 index 000000000..ad9bdcb31 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/fluentbit.yaml @@ -0,0 +1,17 @@ +{{- if and .Values.logging.enabled (not .Values.logging.fluentbitDisabled) -}} +{{- $fluentbitSpec := .Values.logging.fluentbit }} +{{- if .Values.logging.loggingRef }} + {{- $fluentbitSpec := set .Values.logging.fluentbit "loggingRef" (default .Values.logging.loggingRef .Values.logging.fluentbit.loggingRef) -}} +{{- end }} + +apiVersion: logging.banzaicloud.io/v1beta1 +kind: FluentbitAgent +metadata: + name: {{ include "logging-operator.releasename" . }} + labels: {{ include "logging-operator.labels" . | nindent 4 }} +{{- if $fluentbitSpec }} +spec: {{- toYaml $fluentbitSpec | nindent 2 }} +{{- else }} +spec: {} +{{- end }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/hosttailer.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/hosttailer.yaml new file mode 100644 index 000000000..a14d7c10b --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/hosttailer.yaml @@ -0,0 +1,31 @@ +{{- with .Values.logging.hostTailer }} +{{- if and $.Values.logging.enabled .enabled }} +--- +apiVersion: logging-extensions.banzaicloud.io/v1alpha1 +kind: HostTailer +metadata: + name: {{ .name }} +spec: + {{- with .fileTailers }} + fileTailers: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .systemdTailers }} + systemdTailers: + {{- toYaml . | nindent 4 }} + {{- end }} + enableRecreateWorkloadOnImmutableFieldChange: {{ $.Values.logging.enableRecreateWorkloadOnImmutableFieldChange }} + {{- with .workloadMetaOverrides }} + workloadMetaOverrides: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .workloadOverrides }} + workloadOverrides: + {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .image }} + image: + {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/logging.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/logging.yaml new file mode 100644 index 000000000..0adf992bf --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/logging/logging.yaml @@ -0,0 +1,60 @@ +{{ if .Values.logging.enabled -}} +apiVersion: logging.banzaicloud.io/v1beta1 +kind: Logging +metadata: + name: {{ include "logging-operator.releasename" . }} + labels: +{{ include "logging-operator.labels" . | indent 4 }} +spec: + {{- with .Values.logging.loggingRef }} + loggingRef: {{ . }} + {{- end }} + {{- with .Values.logging.flowConfigCheckDisabled }} + flowConfigCheckDisabled: {{ . }} + {{- end }} + {{- with .Values.logging.skipInvalidResources }} + skipInvalidResources: {{ . }} + {{- end }} + {{- with .Values.logging.flowConfigOverride }} + flowConfigOverride: {{ . }} + {{- end }} + {{- if (not .Values.logging.fluentdDisabled) }} + {{- if .Values.logging.fluentd }} + fluentd: {{- toYaml .Values.logging.fluentd | nindent 4 }} + {{- else }} + fluentd: {} + {{- end }} + {{- end }} + {{- with .Values.logging.syslogNG }} + syslogNG: {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.logging.defaultFlow }} + defaultFlow: {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.logging.errorOutputRef }} + errorOutputRef: {{ . }} + {{- end }} + {{- with .Values.logging.globalFilters }} + globalFilters: {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.logging.watchNamespaces }} + watchNamespaces: {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.logging.watchNamespaceSelector }} + watchNamespaceSelector: {{- toYaml . | nindent 4 }} + {{- end }} + clusterDomain: {{ .Values.logging.clusterDomain }} + controlNamespace: {{ .Values.logging.controlNamespace | default .Release.Namespace }} + {{- with .Values.logging.allowClusterResourcesFromAllNamespaces }} + allowClusterResourcesFromAllNamespaces: {{ . }} + {{- end }} + {{- with .Values.logging.nodeAgents }} + nodeAgents: {{- toYaml . | nindent 4 }} + {{- end }} + {{- with .Values.logging.enableRecreateWorkloadOnImmutableFieldChange }} + enableRecreateWorkloadOnImmutableFieldChange: {{ . }} + {{- end }} + {{- with .Values.logging.configCheck }} + configCheck: {{- toYaml . | nindent 4 }} + {{- end }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/aks/fluentbitagent.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/aks/fluentbitagent.yaml new file mode 100644 index 000000000..1663bc0f4 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/aks/fluentbitagent.yaml @@ -0,0 +1,17 @@ +{{- define "logging-operator.fluentbitagent.aks" -}} +{{- $logPath := "/var/log/azure/kubelet-status.log" -}} +metadata: + name: {{ .Release.Name }}-aks +spec: + disableKubernetesFilter: true + extraVolumeMounts: + - source: {{ $logPath }} + destination: {{ $logPath }} + readOnly: true + inputTail: + Tag: "aks" + Path: {{ $logPath }} +{{- end -}} +{{- if .Values.additionalLoggingSources.aks.enabled }} +{{- include "logging-operator.fluentbitagent" (list . "logging-operator.fluentbitagent.aks") -}} +{{- end }} \ No newline at end of file diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/aks/logging.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/aks/logging.yaml new file mode 100644 index 000000000..6341387a6 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/aks/logging.yaml @@ -0,0 +1,7 @@ +{{- define "logging-operator.logging.aks" -}} +metadata: + name: {{ .Release.Name }}-aks +{{- end -}} +{{- if .Values.additionalLoggingSources.aks.enabled }} +{{- include "logging-operator.logging" (list . "logging-operator.logging.aks") -}} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/eks/fluentbitagent.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/eks/fluentbitagent.yaml new file mode 100644 index 000000000..10d49bb58 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/eks/fluentbitagent.yaml @@ -0,0 +1,18 @@ +{{- define "logging-operator.fluentbitagent.eks" -}} +{{- $logPath := "/var/log/messages" -}} +metadata: + name: {{ .Release.Name }}-eks +spec: + disableKubernetesFilter: true + extraVolumeMounts: + - source: {{ $logPath }} + destination: {{ $logPath }} + readOnly: true + inputTail: + Tag: "eks" + Path: {{ $logPath }} + Parser: "syslog" +{{- end -}} +{{- if .Values.additionalLoggingSources.eks.enabled }} +{{- include "logging-operator.fluentbitagent" (list . "logging-operator.fluentbitagent.eks") -}} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/eks/logging.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/eks/logging.yaml new file mode 100644 index 000000000..5d396bd69 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/eks/logging.yaml @@ -0,0 +1,17 @@ +{{- define "logging-operator.logging.eks" -}} +metadata: + name: {{ .Release.Name }}-eks +spec: + fluentd: + {{- if .Values.loggingServiceAccountAnnotations.eks -}} + serviceAccount: + metadata: + annotations: + {{- with .Values.loggingServiceAccountAnnotations.eks }} + {{ toYaml . | indent 8 }} + {{- end }} + {{- end }} +{{- end -}} +{{- if .Values.additionalLoggingSources.eks.enabled }} +{{- include "logging-operator.logging" (list . "logging-operator.logging.eks") -}} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/gke/fluentbitagent.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/gke/fluentbitagent.yaml new file mode 100644 index 000000000..c54d50c70 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/gke/fluentbitagent.yaml @@ -0,0 +1,17 @@ +{{- define "logging-operator.fluentbitagent.gke" -}} +{{- $logPath := "/var/log/kube-proxy.log" -}} +metadata: + name: {{ .Release.Name }}-gke +spec: + disableKubernetesFilter: true + extraVolumeMounts: + - source: {{ $logPath }} + destination: {{ $logPath }} + readOnly: true + inputTail: + Tag: "gke" + Path: {{ $logPath }} +{{- end -}} +{{- if .Values.additionalLoggingSources.gke.enabled }} +{{- include "logging-operator.fluentbitagent" (list . "logging-operator.fluentbitagent.gke") -}} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/gke/logging.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/gke/logging.yaml new file mode 100644 index 000000000..3271599b9 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/gke/logging.yaml @@ -0,0 +1,7 @@ +{{- define "logging-operator.logging.gke" -}} +metadata: + name: {{ .Release.Name }}-gke +{{- end -}} +{{- if .Values.additionalLoggingSources.gke.enabled }} +{{- include "logging-operator.logging" (list . "logging-operator.logging.gke") -}} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/configmap.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/configmap.yaml new file mode 100644 index 000000000..aa454c8ad --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/configmap.yaml @@ -0,0 +1,57 @@ +{{- if and .Values.additionalLoggingSources.k3s.enabled (eq .Values.additionalLoggingSources.k3s.container_engine "systemd") }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-k3s + labels: +{{ include "logging-operator.labels" . | indent 4 }} +data: + fluent-bit.conf: | + [SERVICE] + Flush 1 + Grace 5 + Daemon Off + Log_Level info + Coro_Stack_Size 24576 + Parsers_File parsers.conf + + [INPUT] + Name systemd + Tag k3s + Path {{ .Values.systemdLogPath }} + Systemd_Filter _SYSTEMD_UNIT=k3s.service + {{- if .Values.additionalLoggingSources.k3s.stripUnderscores }} + Strip_Underscores On + {{- end }} + Systemd_Filter _SYSTEMD_UNIT=k3s-agent.service + + [FILTER] + Name parser + Match * + Key_Name MESSAGE + Parser klog + Reserve_Data On + + [FILTER] + Name parser + Match * + Key_Name MESSAGE + Parser rancher + Reserve_Data On + + [FILTER] + Name parser + Match * + Key_Name MESSAGE + Parser etcd + Reserve_Data On + + [OUTPUT] + Name forward + Match * + Host {{ .Release.Name }}-root-fluentd.{{ .Release.Namespace }}.svc + Port 24240 + Retry_Limit False + parsers.conf: | +{{ include "logging-operator.parsers" . | indent 4 }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/daemonset.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/daemonset.yaml new file mode 100644 index 000000000..e80c2b1c8 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/daemonset.yaml @@ -0,0 +1,110 @@ +{{- if and .Values.additionalLoggingSources.k3s.enabled (eq .Values.additionalLoggingSources.k3s.container_engine "systemd") }} +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: "{{ .Release.Name }}-k3s-journald-aggregator" + namespace: "{{ .Release.Namespace }}" +spec: + selector: + matchLabels: + name: {{ .Release.Name }}-k3s-journald-aggregator + template: + metadata: + annotations: + checksum/config: {{ include (print $.Template.BasePath "/loggings/k3s/configmap.yaml") . | sha256sum }} + name: "{{ .Release.Name }}-k3s-journald-aggregator" + namespace: "{{ .Release.Namespace }}" + labels: + name: {{ .Release.Name }}-k3s-journald-aggregator + spec: + containers: + - name: fluentbit + image: "{{ template "logging-operator.fluentbitImage" . }}" + {{- if .Values.global.seLinux.enabled }} + securityContext: + seLinuxOptions: + type: rke_logreader_t + {{- end }} + volumeMounts: + - mountPath: /fluent-bit/etc/ + name: config + - mountPath: {{ .Values.systemdLogPath | default "/var/log/journal" }} + name: journal + readOnly: true + - mountPath: /etc/machine-id + name: machine-id + readOnly: true + {{- with .Values.tolerations }} + tolerations: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: "{{ .Release.Name }}-k3s-journald-aggregator" + volumes: + - name: config + configMap: + name: "{{ .Release.Name }}-k3s" + - name: journal + hostPath: + path: {{ .Values.systemdLogPath | default "/var/log/journal" }} + - name: machine-id + hostPath: + path: /etc/machine-id +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: "{{ .Release.Name }}-k3s-journald-aggregator" + namespace: "{{ .Release.Namespace }}" +{{- if .Values.global.cattle.psp.enabled }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: "{{ .Release.Name }}-k3s-journald-aggregator" +rules: + - apiGroups: + - policy + resourceNames: + - "{{ .Release.Name }}-k3s-journald-aggregator" + resources: + - podsecuritypolicies + verbs: + - use +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: "{{ .Release.Name }}-k3s-journald-aggregator" +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: "{{ .Release.Name }}-k3s-journald-aggregator" +subjects: + - kind: ServiceAccount + name: "{{ .Release.Name }}-k3s-journald-aggregator" +--- +apiVersion: policy/v1beta1 +kind: PodSecurityPolicy +metadata: + name: "{{ .Release.Name }}-k3s-journald-aggregator" + namespace: "{{ .Release.Namespace }}" +spec: + allowPrivilegeEscalation: false + fsGroup: + rule: RunAsAny + readOnlyRootFilesystem: true + runAsUser: + rule: RunAsAny + seLinux: + rule: RunAsAny + supplementalGroups: + rule: RunAsAny + volumes: + - configMap + - emptyDir + - secret + - hostPath +{{- end }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/fluentbitagent.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/fluentbitagent.yaml new file mode 100644 index 000000000..9b3c08a0f --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/fluentbitagent.yaml @@ -0,0 +1,18 @@ +{{- define "logging-operator.fluentbitagent.k3s-openrc" -}} +{{- $logPath := "/var/log/k3s.log" -}} +metadata: + name: {{ .Release.Name }}-k3s +spec: + disableKubernetesFilter: true + extraVolumeMounts: + - source: {{ $logPath }} + destination: {{ $logPath }} + readOnly: true + inputTail: + Tag: "k3s" + Path: {{ $logPath }} + Path_Key: filename +{{- end -}} +{{- if and .Values.additionalLoggingSources.k3s.enabled (eq .Values.additionalLoggingSources.k3s.container_engine "openrc")}} +{{- include "logging-operator.fluentbitagent" (list . "logging-operator.fluentbitagent.k3s-openrc") -}} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/logging-k3s-openrc.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/logging-k3s-openrc.yaml new file mode 100644 index 000000000..efbde4292 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/k3s/logging-k3s-openrc.yaml @@ -0,0 +1,7 @@ +{{- define "logging-operator.logging.k3s-openrc" -}} +metadata: + name: {{ .Release.Name }}-k3s +{{- end -}} +{{- if and .Values.additionalLoggingSources.k3s.enabled (eq .Values.additionalLoggingSources.k3s.container_engine "openrc")}} +{{- include "logging-operator.logging" (list . "logging-operator.logging.k3s-openrc") -}} +{{- end }} \ No newline at end of file diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/kube-audit/fluentbitagent.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/kube-audit/fluentbitagent.yaml new file mode 100644 index 000000000..92f006b98 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/kube-audit/fluentbitagent.yaml @@ -0,0 +1,21 @@ +{{- define "logging-operator.fluentbitagent.kube-audit" -}} +metadata: + name: {{ .Release.Name }}-kube-audit +spec: + disableKubernetesFilter: true + extraVolumeMounts: + - source: {{ template "kubeAuditPathPrefix" . }} + destination: "/kube-audit-logs" + readOnly: true + inputTail: + Tag: {{ .Values.additionalLoggingSources.kubeAudit.fluentbit.logTag }} + Path: /kube-audit-logs/{{ template "kubeAuditFilename" . }} + Parser: json + {{- with (concat (.Values.tolerations) (.Values.fluentbit.tolerations) (.Values.additionalLoggingSources.kubeAudit.fluentbit.tolerations)) }} + tolerations: {{- toYaml . | nindent 6 }} + {{- end }} + nodeSelector: {{ include "controlplaneSelector" . | nindent 6 }} +{{- end -}} +{{- if .Values.additionalLoggingSources.kubeAudit.enabled }} +{{- include "logging-operator.fluentbitagent" (list . "logging-operator.fluentbitagent.kube-audit") -}} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/kube-audit/logging.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/kube-audit/logging.yaml new file mode 100644 index 000000000..1e063b9e6 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/kube-audit/logging.yaml @@ -0,0 +1,11 @@ +{{- define "logging-operator.logging.kube-audit" -}} +metadata: + name: {{ .Release.Name }}-kube-audit +spec: + {{- if .Values.additionalLoggingSources.kubeAudit.loggingRef }} + loggingRef: {{ .Values.additionalLoggingSources.kubeAudit.loggingRef }} + {{- end }} +{{- end -}} +{{- if .Values.additionalLoggingSources.kubeAudit.enabled }} +{{- include "logging-operator.logging" (list . "logging-operator.logging.kube-audit") -}} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke/configmap.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke/configmap.yaml new file mode 100644 index 000000000..252572a4e --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke/configmap.yaml @@ -0,0 +1,29 @@ +{{- if .Values.additionalLoggingSources.rke.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-rke + labels: +{{ include "logging-operator.labels" . | indent 4 }} +data: + fluent-bit.conf: | + [SERVICE] + Log_Level {{ .Values.additionalLoggingSources.rke.fluentbit.log_level }} + Parsers_File parsers.conf + + [INPUT] + Tag rke + Name tail + Path_Key filename + Parser docker + DB /tail-db/tail-containers-state.db + Mem_Buf_Limit {{ .Values.additionalLoggingSources.rke.fluentbit.mem_buffer_limit }} + Path /var/lib/rancher/rke/log/*.log + + [OUTPUT] + Name forward + Match * + Host {{ .Release.Name }}-root-fluentd.{{ .Release.Namespace }}.svc + Port 24240 + Retry_Limit False +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke/daemonset.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke/daemonset.yaml new file mode 100644 index 000000000..cc39a5cc4 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke/daemonset.yaml @@ -0,0 +1,122 @@ +{{- if .Values.additionalLoggingSources.rke.enabled }} +{{- $containers := printf "%s/containers/" (default "/var/lib/docker" .Values.global.dockerRootDirectory) }} +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: "{{ .Release.Name }}-rke-aggregator" + namespace: "{{ .Release.Namespace }}" +spec: + selector: + matchLabels: + name: {{ .Release.Name }}-rke-aggregator + template: + metadata: + name: "{{ .Release.Name }}-rke-aggregator" + namespace: "{{ .Release.Namespace }}" + labels: + name: {{ .Release.Name }}-rke-aggregator + spec: + containers: + - name: fluentbit + image: "{{ template "logging-operator.fluentbitImage" . }}" + volumeMounts: + - mountPath: /var/lib/rancher/rke/log/ + name: indir + - mountPath: {{ $containers }} + name: containers + - mountPath: /tail-db + name: positiondb + - mountPath: /fluent-bit/etc/fluent-bit.conf + name: config + subPath: fluent-bit.conf + {{- if .Values.global.seLinux.enabled }} + securityContext: + seLinuxOptions: + type: rke_logreader_t + {{- end }} + volumes: + - name: indir + hostPath: + path: /var/lib/rancher/rke/log/ + type: DirectoryOrCreate + - name: containers + hostPath: + path: {{ $containers }} + type: DirectoryOrCreate + - name: positiondb + emptyDir: {} + - name: config + configMap: + name: "{{ .Release.Name }}-rke" + serviceAccountName: "{{ .Release.Name }}-rke-aggregator" + {{- $total_tolerations := concat (.Values.tolerations) (.Values.fluentbit.tolerations) }} + {{- with $total_tolerations }} + tolerations: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: "{{ .Release.Name }}-rke-aggregator" + namespace: "{{ .Release.Namespace }}" +{{- if .Values.global.cattle.psp.enabled }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: "{{ .Release.Name }}-rke-aggregator" +rules: + - apiGroups: + - policy + resourceNames: + - "{{ .Release.Name }}-rke-aggregator" + resources: + - podsecuritypolicies + verbs: + - use +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: "{{ .Release.Name }}-rke-aggregator" +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: "{{ .Release.Name }}-rke-aggregator" +subjects: + - kind: ServiceAccount + name: "{{ .Release.Name }}-rke-aggregator" +--- +apiVersion: policy/v1beta1 +kind: PodSecurityPolicy +metadata: + name: "{{ .Release.Name }}-rke-aggregator" + namespace: "{{ .Release.Namespace }}" +spec: + allowPrivilegeEscalation: false + allowedHostPaths: + - pathPrefix: {{ $containers }} + readOnly: false + - pathPrefix: /var/lib/rancher/rke/log/ + readOnly: false + - pathPrefix: /var/lib/rancher/logging/ + readOnly: false + fsGroup: + rule: RunAsAny + readOnlyRootFilesystem: true + runAsUser: + rule: RunAsAny + seLinux: + rule: RunAsAny + supplementalGroups: + rule: RunAsAny + volumes: + - configMap + - emptyDir + - secret + - hostPath +{{- end }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke2/configmap.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke2/configmap.yaml new file mode 100644 index 000000000..3ca20be22 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke2/configmap.yaml @@ -0,0 +1,69 @@ +{{- if .Values.additionalLoggingSources.rke2.enabled }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Release.Name }}-rke2 + labels: +{{ include "logging-operator.labels" . | indent 4 }} +data: + fluent-bit.conf: | + [SERVICE] + Flush 1 + Grace 5 + Daemon Off + Log_Level info + Coro_Stack_Size 24576 + Parsers_File parsers.conf + + [INPUT] + Name systemd + Tag rke2 + Path {{ .Values.systemdLogPath }} + Systemd_Filter _SYSTEMD_UNIT=rke2-server.service + Systemd_Filter _SYSTEMD_UNIT=rke2-agent.service + {{- if .Values.additionalLoggingSources.rke2.stripUnderscores }} + Strip_Underscores On + {{- end }} + + [INPUT] + Name tail + Tag rke2 + Path /var/lib/rancher/rke2/agent/logs/kubelet.log + + [FILTER] + Name parser + Match * + Key_Name log + Parser klog + Reserve_Data On + + [FILTER] + Name parser + Match * + Key_Name MESSAGE + Parser klog + Reserve_Data On + + [FILTER] + Name parser + Match * + Key_Name MESSAGE + Parser rancher + Reserve_Data On + + [FILTER] + Name parser + Match * + Key_Name MESSAGE + Parser etcd + Reserve_Data On + + [OUTPUT] + Name forward + Match * + Host {{ .Release.Name }}-root-fluentd.{{ .Release.Namespace }}.svc + Port 24240 + Retry_Limit False + parsers.conf: | +{{ include "logging-operator.parsers" . | indent 4 }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke2/daemonset.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke2/daemonset.yaml new file mode 100644 index 000000000..8f54b718e --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/rke2/daemonset.yaml @@ -0,0 +1,116 @@ +{{- if .Values.additionalLoggingSources.rke2.enabled }} +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: "{{ .Release.Name }}-rke2-journald-aggregator" + namespace: "{{ .Release.Namespace }}" +spec: + selector: + matchLabels: + name: {{ .Release.Name }}-rke2-journald-aggregator + template: + metadata: + annotations: + checksum/config: {{ include (print $.Template.BasePath "/loggings/rke2/configmap.yaml") . | sha256sum }} + name: "{{ .Release.Name }}-rke2-journald-aggregator" + namespace: "{{ .Release.Namespace }}" + labels: + name: {{ .Release.Name }}-rke2-journald-aggregator + spec: + containers: + - name: fluentbit + image: "{{ template "logging-operator.fluentbitImage" . }}" + {{- if .Values.global.seLinux.enabled }} + securityContext: + seLinuxOptions: + type: rke_logreader_t + {{- end }} + volumeMounts: + - mountPath: /fluent-bit/etc/ + name: config + - mountPath: {{ .Values.systemdLogPath | default "/var/log/journal" }} + name: journal + readOnly: true + - mountPath: "/var/lib/rancher/rke2/agent/logs" + name: kubelet + readOnly: true + - mountPath: /etc/machine-id + name: machine-id + readOnly: true + {{- with .Values.tolerations }} + tolerations: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: {{- toYaml . | nindent 8 }} + {{- end }} + serviceAccountName: "{{ .Release.Name }}-rke2-journald-aggregator" + volumes: + - name: config + configMap: + name: "{{ .Release.Name }}-rke2" + - name: journal + hostPath: + path: {{ .Values.systemdLogPath | default "/var/log/journal" }} + - name: kubelet + hostPath: + path: "/var/lib/rancher/rke2/agent/logs" + - name: machine-id + hostPath: + path: /etc/machine-id +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: "{{ .Release.Name }}-rke2-journald-aggregator" + namespace: "{{ .Release.Namespace }}" +{{- if .Values.global.cattle.psp.enabled }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: "{{ .Release.Name }}-rke2-journald-aggregator" +rules: + - apiGroups: + - policy + resourceNames: + - "{{ .Release.Name }}-rke2-journald-aggregator" + resources: + - podsecuritypolicies + verbs: + - use +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: "{{ .Release.Name }}-rke2-journald-aggregator" +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: Role + name: "{{ .Release.Name }}-rke2-journald-aggregator" +subjects: + - kind: ServiceAccount + name: "{{ .Release.Name }}-rke2-journald-aggregator" +--- +apiVersion: policy/v1beta1 +kind: PodSecurityPolicy +metadata: + name: "{{ .Release.Name }}-rke2-journald-aggregator" + namespace: "{{ .Release.Namespace }}" +spec: + allowPrivilegeEscalation: false + fsGroup: + rule: RunAsAny + readOnlyRootFilesystem: true + runAsUser: + rule: RunAsAny + seLinux: + rule: RunAsAny + supplementalGroups: + rule: RunAsAny + volumes: + - configMap + - emptyDir + - secret + - hostPath +{{- end }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/root/fluentbitagent.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/root/fluentbitagent.yaml new file mode 100644 index 000000000..2816b7f91 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/root/fluentbitagent.yaml @@ -0,0 +1,29 @@ +{{- define "logging-operator.fluentbitagent.root" -}} +{{- $containerLogPath := printf "%s/containers/" (default "/var/lib/docker" .Values.global.dockerRootDirectory) }} +metadata: + name: "{{ .Release.Name }}-root" +spec: + {{- if .Values.global.dockerRootDirectory }} + mountPath: {{ $containerLogPath }} + extraVolumeMounts: + - source: {{ $containerLogPath }} + destination: {{ $containerLogPath }} + readOnly: true + {{- end }} + {{- if (include "requireFilterKubernetes" .) }} + filterKubernetes: + {{- if .Values.fluentbit.filterKubernetes.Merge_Log }} + Merge_Log: "{{ .Values.fluentbit.filterKubernetes.Merge_Log }}" + {{- end }} + {{- if .Values.fluentbit.filterKubernetes.Merge_Log_Key }} + Merge_Log_Key: "{{ .Values.fluentbit.filterKubernetes.Merge_Log_Key }}" + {{- end }} + {{- if .Values.fluentbit.filterKubernetes.Merge_Log_Trim }} + Merge_Log_Trim: "{{ .Values.fluentbit.filterKubernetes.Merge_Log_Trim }}" + {{- end }} + {{- if .Values.fluentbit.filterKubernetes.Merge_Parser }} + Merge_Parser: "{{ .Values.fluentbit.filterKubernetes.Merge_Parser }}" + {{- end }} + {{- end }} +{{- end -}} +{{- include "logging-operator.fluentbitagent" (list . "logging-operator.fluentbitagent.root") -}} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/root/logging.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/root/logging.yaml new file mode 100644 index 000000000..e225815e1 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/loggings/root/logging.yaml @@ -0,0 +1,67 @@ +{{- define "logging-operator.logging.root" -}} +metadata: + name: "{{ .Release.Name }}-root" +spec: + {{- if (include "windowsEnabled" .) }} + nodeAgents: + - name: win-agent + profile: windows + nodeAgentFluentbit: + daemonSet: + spec: + template: + spec: + containers: + - image: {{ template "system_default_registry" . }}{{ .Values.images.nodeagent_fluentbit.repository }}:{{ .Values.images.nodeagent_fluentbit.tag }} + name: fluent-bit + tls: + enabled: {{ .Values.nodeAgents.tls.enabled | default false }} + {{- if .Values.additionalLoggingSources.rke.enabled }} + - name: win-agent-rke + profile: windows + nodeAgentFluentbit: + filterKubernetes: + Kube_Tag_Prefix: "{{ template "windowsKubernetesFilter" . }}.var.lib.rancher.rke.log." + inputTail: + Path: "{{ template "windowsPathPrefix" . }}/var/lib/rancher/rke/log" + {{- if .Values.fluentbit.inputTail.Buffer_Chunk_Size }} + Buffer_Chunk_Size: {{ .Values.fluentbit.inputTail.Buffer_Chunk_Size | toString }} + {{- end }} + {{- if .Values.fluentbit.inputTail.Buffer_Max_Size }} + Buffer_Max_Size: {{ .Values.fluentbit.inputTail.Buffer_Max_Size | toString }} + {{- end }} + {{- if .Values.fluentbit.inputTail.Mem_Buf_Limit }} + Mem_Buf_Limit: {{ .Values.fluentbit.inputTail.Mem_Buf_Limit | toString }} + {{- end }} + {{- if .Values.fluentbit.inputTail.Multiline_Flush }} + Multiline_Flush: {{ .Values.fluentbit.inputTail.Multiline_Flush | toString | quote }} + {{- end }} + {{- if .Values.fluentbit.inputTail.Skip_Long_Lines }} + Skip_Long_Lines: {{ .Values.fluentbit.inputTail.Skip_Long_Lines | toString | quote }} + {{- end }} + extraVolumeMounts: + - source: "{{ template "windowsInputTailMount" . }}/var/lib/rancher/rke/log" + destination: "{{ template "windowsInputTailMount" . }}/var/lib/rancher/rke/log" + readOnly: true + daemonSet: + spec: + template: + spec: + containers: + - image: "{{ template "system_default_registry" . }}{{ .Values.images.nodeagent_fluentbit.repository }}:{{ .Values.images.nodeagent_fluentbit.tag }}" + name: fluent-bit + tls: + enabled: {{ .Values.nodeAgents.tls.enabled | default false }} + {{- end }} + {{- end }} + fluentd: + {{- if .Values.loggingServiceAccountAnnotations.root }} + serviceAccount: + metadata: + annotations: + {{- with .Values.loggingServiceAccountAnnotations.root }} + {{ toYaml . | indent 8 }} + {{- end }} + {{- end -}} +{{- end -}} +{{- include "logging-operator.logging" (list . "logging-operator.logging.root") -}} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/service.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/service.yaml new file mode 100644 index 000000000..f419ae2c4 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/service.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "logging-operator.fullname" . }} + namespace: {{ include "logging-operator.namespace" . }} + labels: +{{ include "logging-operator.labels" . | indent 4 }} +spec: + type: ClusterIP + {{- with .Values.http.service.clusterIP }} + clusterIP: {{ . }} + {{- end }} + ports: + - port: {{ .Values.http.port }} + targetPort: http + protocol: TCP + name: http + selector: + app.kubernetes.io/name: {{ include "logging-operator.name" . }} + app.kubernetes.io/instance: {{ .Release.Name }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/service_monitor.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/service_monitor.yaml new file mode 100644 index 000000000..fcd86b07a --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/service_monitor.yaml @@ -0,0 +1,30 @@ +{{ if and (.Capabilities.APIVersions.Has "monitoring.coreos.com/v1") .Values.monitoring.serviceMonitor.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ include "logging-operator.fullname" . }} + namespace: {{ include "logging-operator.namespace" . }} + labels: +{{ include "logging-operator.labels" . | indent 4 }} +{{- with .Values.monitoring.serviceMonitor.additionalLabels }} + {{- toYaml . | nindent 4 }} +{{- end }} +spec: + selector: + matchLabels: +{{ include "logging-operator.labels" . | indent 6 }} + endpoints: + - port: http + path: /metrics + {{- with .Values.monitoring.serviceMonitor.metricRelabelings }} + metricRelabelings: + {{- toYaml . | nindent 6 }} + {{- end }} + {{- with .Values.monitoring.serviceMonitor.relabelings }} + relabelings: + {{- toYaml . | nindent 4 }} + {{- end }} + namespaceSelector: + matchNames: + - {{ include "logging-operator.namespace" . }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/serviceaccount.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/serviceaccount.yaml new file mode 100644 index 000000000..bb97cf108 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/serviceaccount.yaml @@ -0,0 +1,14 @@ +{{- if .Values.rbac.enabled }} +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ template "logging-operator.fullname" . }} + namespace: {{ include "logging-operator.namespace" . }} + labels: +{{ include "logging-operator.labels" . | indent 4 }} +{{- with .Values.serviceAccount.annotations }} + annotations: +{{ toYaml . | indent 4 }} +{{- end }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/test_receiver.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/test_receiver.yaml new file mode 100644 index 000000000..af0b5f4dc --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/test_receiver.yaml @@ -0,0 +1,53 @@ +{{ if .Values.testReceiver.enabled -}} +apiVersion: v1 +kind: Service +metadata: + name: {{ include "logging-operator.releasename" . }}-test-receiver + namespace: {{ include "logging-operator.namespace" . }} +spec: + type: ClusterIP + ports: + - port: {{ .Values.testReceiver.port }} + targetPort: receiver + protocol: TCP + name: receiver + selector: + app.kubernetes.io/name: {{ include "logging-operator.releasename" . }}-test-receiver + app.kubernetes.io/instance: {{ .Release.Name }} +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "logging-operator.releasename" . }}-test-receiver + namespace: {{ include "logging-operator.namespace" . }} +spec: + selector: + matchLabels: + app.kubernetes.io/name: {{ include "logging-operator.releasename" . }}-test-receiver + app.kubernetes.io/instance: {{ .Release.Name }} + template: + metadata: + labels: + app.kubernetes.io/name: {{ include "logging-operator.releasename" . }}-test-receiver + app.kubernetes.io/instance: {{ .Release.Name }} + annotations: + fluentbit.io/exclude: "true" + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + containers: + - name: {{ .Chart.Name }} + image: "{{ .Values.testReceiver.image }}" + args: + {{- range .Values.testReceiver.args }} + - {{ . }} + {{- end }} + imagePullPolicy: {{ .Values.testReceiver.pullPolicy }} + resources: + {{- toYaml .Values.testReceiver.resources | nindent 12 }} + ports: + - name: receiver + containerPort: {{ .Values.testReceiver.port }} +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/userrole.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/userrole.yaml new file mode 100644 index 000000000..82c3200b9 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/userrole.yaml @@ -0,0 +1,39 @@ +{{- if .Values.rbac.enabled }} +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ template "logging-operator.fullname" . }}-edit + labels: + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" +rules: +- apiGroups: + - logging.banzaicloud.io + resources: + - flows + - outputs + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +- apiGroups: + - logging.banzaicloud.io + resources: + - syslogngflows + - syslogngoutputs + verbs: + - create + - delete + - deletecollection + - get + - list + - patch + - update + - watch +{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/userroles.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/userroles.yaml new file mode 100644 index 000000000..f4136b09a --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/userroles.yaml @@ -0,0 +1,35 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: "logging-admin" + labels: + rbac.authorization.k8s.io/aggregate-to-admin: "true" +rules: + - apiGroups: + - "logging.banzaicloud.io" + resources: + - flows + - outputs + verbs: + - "*" +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: "logging-view" + labels: + rbac.authorization.k8s.io/aggregate-to-admin: "true" + rbac.authorization.k8s.io/aggregate-to-view: "true" + rbac.authorization.k8s.io/aggregate-to-edit: "true" +rules: + - apiGroups: + - "logging.banzaicloud.io" + resources: + - flows + - outputs + - clusterflows + - clusteroutputs + verbs: + - get + - list + - watch diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/validate-install-crd.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/validate-install-crd.yaml new file mode 100644 index 000000000..5184c85c4 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/validate-install-crd.yaml @@ -0,0 +1,29 @@ +#{{- if gt (len (lookup "rbac.authorization.k8s.io/v1" "ClusterRole" "" "")) 0 -}} +# {{- $found := dict -}} +# {{- set $found "logging-extensions.banzaicloud.io/v1alpha1/EventTailer" false -}} +# {{- set $found "logging-extensions.banzaicloud.io/v1alpha1/HostTailer" false -}} +# {{- set $found "logging.banzaicloud.io/v1alpha1/ClusterFlow" false -}} +# {{- set $found "logging.banzaicloud.io/v1alpha1/ClusterOutput" false -}} +# {{- set $found "logging.banzaicloud.io/v1alpha1/Flow" false -}} +# {{- set $found "logging.banzaicloud.io/v1beta1/FluentbitAgent" false -}} +# {{- set $found "logging.banzaicloud.io/v1beta1/FluentdConfig" false -}} +# {{- set $found "logging.banzaicloud.io/v1beta1/LoggingRoute" false -}} +# {{- set $found "logging.banzaicloud.io/v1alpha1/Logging" false -}} +# {{- set $found "logging.banzaicloud.io/v1beta1/NodeAgent" false -}} +# {{- set $found "logging.banzaicloud.io/v1alpha1/Output" false -}} +# {{- set $found "logging.banzaicloud.io/v1beta1/SyslogNGClusterFlow" false -}} +# {{- set $found "logging.banzaicloud.io/v1beta1/SyslogNGClusterOutput" false -}} +# {{- set $found "logging.banzaicloud.io/v1beta1/SyslogNGConfig" false -}} +# {{- set $found "logging.banzaicloud.io/v1beta1/SyslogNGFlow" false -}} +# {{- set $found "logging.banzaicloud.io/v1beta1/SyslogNGOutput" false -}} +# {{- range .Capabilities.APIVersions -}} +# {{- if hasKey $found (toString .) -}} +# {{- set $found (toString .) true -}} +# {{- end -}} +# {{- end -}} +# {{- range $_, $exists := $found -}} +# {{- if (eq $exists false) -}} +# {{- required "Required CRDs are missing. Please install the corresponding CRD chart before installing this chart." "" -}} +# {{- end -}} +# {{- end -}} +#{{- end -}} \ No newline at end of file diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/validate-install.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/validate-install.yaml new file mode 100644 index 000000000..bd624cc4b --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/validate-install.yaml @@ -0,0 +1,5 @@ +#{{- if .Values.global.dockerRootDirectory }} +#{{- if or (hasSuffix "/containers" .Values.global.dockerRootDirectory) (hasSuffix "/" .Values.global.dockerRootDirectory) }} +#{{- required "global.dockerRootDirectory must not end with suffix: '/' or '/containers'" "" -}} +#{{- end }} +#{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/templates/validate-psp-install.yaml b/charts/rancher-logging/104.1.3+up4.8.0/templates/validate-psp-install.yaml new file mode 100644 index 000000000..a30c59d3b --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/templates/validate-psp-install.yaml @@ -0,0 +1,7 @@ +#{{- if gt (len (lookup "rbac.authorization.k8s.io/v1" "ClusterRole" "" "")) 0 -}} +#{{- if .Values.global.cattle.psp.enabled }} +#{{- if not (.Capabilities.APIVersions.Has "policy/v1beta1/PodSecurityPolicy") }} +#{{- fail "The target cluster does not have the PodSecurityPolicy API resource. Please disable PSPs in this chart before proceeding." -}} +#{{- end }} +#{{- end }} +#{{- end }} diff --git a/charts/rancher-logging/104.1.3+up4.8.0/values-logging-example.yaml b/charts/rancher-logging/104.1.3+up4.8.0/values-logging-example.yaml new file mode 100644 index 000000000..b7068af4a --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/values-logging-example.yaml @@ -0,0 +1,24 @@ +nameOverride: example + +# given we use `nameOverride: example` if testReceiver is enabled we can send http metrics to http://example-test-receiver:8080 +testReceiver: + enabled: true + +logging: + enabled: true + clusterFlows: + - name: all + spec: + match: + - select: {} + globalOutputRefs: ["http"] + clusterOutputs: + - name: http + spec: + http: + endpoint: http://example-test-receiver:8080 + content_type: application/json + buffer: + type: memory + timekey: 1s + timekey_wait: 1s diff --git a/charts/rancher-logging/104.1.3+up4.8.0/values.yaml b/charts/rancher-logging/104.1.3+up4.8.0/values.yaml new file mode 100644 index 000000000..525181c54 --- /dev/null +++ b/charts/rancher-logging/104.1.3+up4.8.0/values.yaml @@ -0,0 +1,484 @@ +# Default values for logging-operator. +# This is a YAML-formatted file. +# Declare variables to be passed into your templates. + +replicaCount: 1 + +image: + repository: rancher/mirrored-kube-logging-logging-operator + tag: 4.8.0 + pullPolicy: IfNotPresent + +env: [] +volumes: [] +volumeMounts: [] + +extraArgs: + - -enable-leader-election=true +imagePullSecrets: [] + +# -- A name in place of the chart name for `app:` labels. +nameOverride: "" + +# -- A name to substitute for the full names of resources. +fullnameOverride: "" + +# -- A namespace override for the app. +namespaceOverride: "" + +# -- Define annotations for logging-operator pods. +annotations: {} + +# -- Deploy CRDs used by Logging Operator. +createCustomResource: false + +http: + # -- HTTP listen port number. + port: 8080 + + # -- Service definition for query http service. + service: + type: ClusterIP + clusterIP: None + # Annotations to query http service + annotations: {} + # Labels to query http service + labels: {} + +rbac: + # -- Create rbac service account and roles. + enabled: true + + # specify service account manually + # serviceAccountName: custom + +monitoring: + serviceMonitor: + # -- Create a Prometheus Operator ServiceMonitor object. + enabled: false + + additionalLabels: {} + metricRelabelings: [] + relabelings: [] + +# -- Pod SecurityContext for Logging operator. [More info](https://kubernetes.io/docs/concepts/policy/security-context/) +## SecurityContext holds pod-level security attributes and common container settings. +## This defaults to non root user with uid 1000 and gid 2000. *v1.PodSecurityContext false +## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ +podSecurityContext: {} +# runAsNonRoot: true +# runAsUser: 1000 +# fsGroup: 2000 + +# -- Container SecurityContext for Logging operator. [More info](https://kubernetes.io/docs/concepts/policy/security-context/) +securityContext: {} +# allowPrivilegeEscalation: false +# readOnlyRootFilesystem: true + # capabilities: + # drop: ["ALL"] + +# -- Operator priorityClassName. +priorityClassName: {} + +serviceAccount: + # -- Define annotations for logging-operator ServiceAccount. + annotations: {} + +# -- CPU/Memory resource requests/limits +resources: {} + # We usually recommend not to specify default resources and to leave this as a conscious + # choice for the user. This also increases chances charts run on environments with little + # resources, such as Minikube. If you do want to specify resources, uncomment the following + # lines, adjust them as necessary, and remove the curly braces after 'resources:'. + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + +nodeSelector: {} + +# -- Node Tolerations +tolerations: [] + +# -- Node Affinity +affinity: {} + +# -- Define which Nodes the Pods are scheduled on. +podLabels: {} + +# Logging resources configuration. +logging: + + # -- Logging resources are disabled by default + enabled: false + + # -- Reference to the logging system. Each of the loggingRefs can manage a fluentbit daemonset and a fluentd statefulset. + loggingRef: "" + + # -- Disable configuration check before applying new fluentd configuration. + flowConfigCheckDisabled: false + + # -- Whether to skip invalid Flow and ClusterFlow resources + skipInvalidResources: false + + # -- Override generated config. This is a raw configuration string for troubleshooting purposes. + flowConfigOverride: "" + + # -- Flag to disable fluentbit completely + fluentbitDisabled: false + # -- Fluent-bit configurations https://kube-logging.github.io/docs/configuration/crds/v1beta1/fluentbit_types/ + fluentbit: {} + + # -- Flag to disable fluentd completely + fluentdDisabled: false + # -- Fluentd configurations https://kube-logging.github.io/docs/configuration/crds/v1beta1/fluentd_types/ + fluentd: {} + # 20Gi persistent storage is configured for fluentd by default. + # Here is an example, on how to override it: + # bufferStorageVolume: + # pvc: + # spec: + # accessModes: + # - ReadWriteOnce + # resources: + # requests: + # storage: 40Gi + + # -- Syslog-NG statefulset configuration + syslogNG: {} + + # -- Default flow for unmatched logs. This Flow configuration collects all logs that didn’t match any other Flow. + defaultFlow: {} + + # -- GlobalOutput name to flush ERROR events to + errorOutputRef: "" + + # -- Global filters to apply on logs before any match or filter mechanism. + globalFilters: [] + + # -- Limit namespaces to watch Flow and Output custom resources. + watchNamespaces: [] + + # -- Limit namespaces to watch Flow and Output custom resources. + watchNamespaceSelector: {} + + # -- Cluster domain name to be used when templating URLs to services + clusterDomain: "cluster.local." + + # -- Namespace for cluster wide configuration resources like ClusterFlow and ClusterOutput. This should be a protected namespace from regular users. Resources like fluentbit and fluentd will run in this namespace as well. + controlNamespace: "" + + # -- Allow configuration of cluster resources from any namespace. Mutually exclusive with ControlNamespace restriction of Cluster resources + allowClusterResourcesFromAllNamespaces: false + + # -- NodeAgent Configuration + nodeAgents: {} + # - name: win-agent + # profile: windows + # nodeAgentFluentbit: + # daemonSet: + # spec: + # template: + # spec: + # containers: + # - image: banzaicloud/fluentbit:1.9.5 + # name: fluent-bit + # tls: + # enabled: false + # - name: linux-agent + # profile: linux + # nodeAgentFluentbit: + # metrics: + # prometheusAnnotations: true + # serviceMonitor: false + # tls: + # enabled: false + + # -- configCheck provides possibility for timeout-based configuration checks https://kube-logging.dev/docs/whats-new/#timeout-based-configuration-checks + configCheck: {} + + # -- EnableRecreateWorkloadOnImmutableFieldChange enables the operator to recreate the fluentbit daemonset and the fluentd statefulset (and possibly other resource in the future) in case there is a change in an immutable field that otherwise couldn’t be managed with a simple update. + enableRecreateWorkloadOnImmutableFieldChange: false + + # -- ClusterFlows to deploy + clusterFlows: [] + + # -- ClusterOutputs to deploy + clusterOutputs: [] + + # Send all pod logs to kafka + # clusterFlows: + # - name: all + # spec: + # match: + # - select: {} + # globalOutputRefs: ["kafka"] + # clusterOutputs: + # - name: kafka + # spec: + # kafka: + # brokers: kafka-headless.kafka.svc.cluster.local:29092 + # format: + # type: json + # default_topic: topic + + # EventTailer config + eventTailer: + enabled: false + name: event-tailer + image: + # -- repository of eventTailer image + repository: + # -- tag of eventTailer image + tag: + # -- pullPolicy of eventTailer image + pullPolicy: + # -- imagePullSecrets of eventTailer image + imagePullSecrets: [] + pvc: + # -- enable pvc for + enabled: false + # -- storage class for event tailer pvc + accessModes: + - ReadWriteOnce + # -- storage class for event tailer pvc + volumeMode: Filesystem + # -- storage for event tailer pvc + storage: 1Gi + # -- storage class for event tailer pvc + storageClassName: + # -- workloadMetaOverrides + workloadMetaOverrides: + # -- workloadOverrides + workloadOverrides: + # -- containerOverrides + containerOverrides: + + hostTailer: + # -- HostTailer + enabled: false + # -- name of HostTailer + name: hosttailer + image: + # -- repository of eventTailer image + repository: + # -- tag of eventTailer image + tag: + # -- pullPolicy of eventTailer image + pullPolicy: + # -- imagePullSecrets of eventTailer image + imagePullSecrets: [] + # -- workloadMetaOverrides of HostTailer + workloadMetaOverrides: + # -- workloadOverrides of HostTailer + workloadOverrides: + # -- configure fileTailers of HostTailer + # example: + # - name: sample-file + # path: /var/log/sample-file + # disabled: false + # buffer_max_size: + # buffer_chunk_size: + # skip_long_lines: + # read_from_head: false + # containerOverrides: + # image: + fileTailers: [] + # -- configure systemdTailers of HostTailer + # example: + # - name: system-sample + # disabled: false + # systemdFilter: kubelet.service + # maxEntries: 20 + # containerOverrides: + # image: + systemdTailers: [] + +testReceiver: + enabled: false + image: fluent/fluent-bit + pullPolicy: IfNotPresent + port: 8080 + # args: ["-i", "http", "-p", "port=8080", "-o", "stdout"] + # resources: + # limits: + # cpu: 100m + # memory: 50Mi + # requests: + # cpu: 20m + # memory: 25Mi + + # Service definition for query http service + service: + type: ClusterIP + clusterIP: None + # Annotations to query http service + annotations: {} + # Labels to query http service + labels: {} + +# Logging CR specific serviceAccount annotations +loggingServiceAccountAnnotations: {} +## Syntax ## +# : +# : +# +## Example ## +# +# root: +# eks.amazonaws.com/role-arn: +# +## Result - added to the Logging resource ## +# +# spec: +# fluentd: +# serviceAccount: +# metadata: +# annotations: +# eks.amazonaws.com/role-arn: arn:aws:iam::1234567890:role/my-iam-role +# + +################################### +# Rancher Logging Operator Values # +################################### + +# Enable debug to use fluent-bit images that allow exec +debug: false + +# Disable persistent volumes for buffers +disablePvc: true + +# If your additional logging sources collect logs from systemd configure the systemd log path here +systemdLogPath: "/run/log/journal" + +global: + cattle: + systemDefaultRegistry: "" + # Uncomment the below two lines to either enable or disable Windows logging. If this chart is + # installed via the Rancher UI, it will set this value to "true" if the cluster is a Windows + # cluster. In that scenario, if you would like to disable Windows logging on Windows clusters, + # set the value below to "false". + # windows: + # enabled: true + psp: + enabled: false + + # Change the "dockerRootDirectory" if the default Docker directory has changed. + dockerRootDirectory: "" + + rkeWindowsPathPrefix: "c:\\" + + seLinux: + enabled: false + +images: + config_reloader: + repository: rancher/mirrored-kube-logging-config-reloader + tag: v0.0.5 + fluentbit: + repository: rancher/mirrored-fluent-fluent-bit + tag: 3.0.4 + nodeagent_fluentbit: + os: "windows" + repository: rancher/fluent-bit + tag: 2.2.0 + fluentbit_debug: + repository: rancher/mirrored-fluent-fluent-bit + tag: 3.0.4-debug + fluentd: + repository: rancher/mirrored-kube-logging-fluentd + tag: v1.16-4.8-full + +additionalLoggingSources: + rke: + enabled: false + fluentbit: + log_level: "info" + mem_buffer_limit: "5MB" + rke2: + enabled: false + stripUnderscores: false + k3s: + enabled: false + container_engine: "systemd" + stripUnderscores: false + aks: + enabled: false + eks: + enabled: false + gke: + enabled: false + kubeAudit: + auditFilename: "" + enabled: false + pathPrefix: "" + fluentbit: + logTag: kube-audit + tolerations: + - key: node-role.kubernetes.io/control-plane + value: "true" + effect: NoSchedule + - key: node-role.kubernetes.io/etcd + value: "true" + effect: NoExecute + +# configures node agent options for windows node agents +nodeAgents: + tls: + enabled: false + +# These settings apply to every Logging CR, including vendor Logging CRs enabled in "additionalLoggingSources". +# Changing these affects every Logging CR installed. +fluentd: + bufferStorageVolume: {} + livenessProbe: + tcpSocket: + port: 24240 + initialDelaySeconds: 30 + periodSeconds: 15 + nodeSelector: {} + resources: {} + tolerations: {} + env: [] + logLevel: {} +fluentbit: + inputTail: + Buffer_Chunk_Size: "" + Buffer_Max_Size: "" + Mem_Buf_Limit: "" + Multiline_Flush: "" + Skip_Long_Lines: "" + resources: {} + tolerations: + - key: node-role.kubernetes.io/control-plane + value: "true" + effect: NoSchedule + - key: node-role.kubernetes.io/etcd + value: "true" + effect: NoExecute + filterKubernetes: + Merge_Log: "" + Merge_Log_Key: "" + Merge_Log_Trim: "" + Merge_Parser: "" + +# -- Extra manifests to deploy as an array +extraManifests: [] + # - apiVersion: v1 + # kind: ConfigMap + # metadata: + # labels: + # name: extra-manifest + # data: + # extra-data: "value" + +# DO NOT SET THIS UNLESS YOU KNOW WHAT YOU ARE DOING. +# Setting fields on this object can break rancher logging or cause unexpected behavior. It is intended to be used if you +# need to configure functionality not exposed by rancher logging. It is highly recommended you check the `app-readme.md` +# for the functionality you need before modifying this object. + +# this object will be merged with every logging CR created by this chart. Any fields that collide with fields from the +# settings above will be overridden. Any fields that collide with fields set in the files in `templates/loggings` will +# be ignored. diff --git a/index.yaml b/index.yaml index aec1499f7..849eb5e83 100755 --- a/index.yaml +++ b/index.yaml @@ -21191,6 +21191,40 @@ entries: - assets/rancher-kube-state-metrics/rancher-kube-state-metrics-2.13.101.tgz version: 2.13.101 rancher-logging: + - annotations: + catalog.cattle.io/auto-install: rancher-logging-crd=match + catalog.cattle.io/certified: rancher + catalog.cattle.io/deploys-on-os: windows + catalog.cattle.io/display-name: Logging + catalog.cattle.io/kube-version: '>= 1.26.0-0 < 1.31.0-0' + catalog.cattle.io/namespace: cattle-logging-system + catalog.cattle.io/permits-os: linux,windows + catalog.cattle.io/provides-gvr: logging.banzaicloud.io.clusterflow/v1beta1 + catalog.cattle.io/rancher-version: '>= 2.9.0-0 < 2.10.0-0' + catalog.cattle.io/release-name: rancher-logging + catalog.cattle.io/type: cluster-tool + catalog.cattle.io/ui-component: logging + catalog.cattle.io/upstream-version: 4.8.0 + apiVersion: v2 + appVersion: 4.8.0 + created: "2025-01-31T14:22:19.645564+05:30" + description: Logging operator for Kubernetes based on Fluentd and Fluentbit. + digest: 2399ed7151170219661518a52691db5ba1aced7846315fd46c241297b75d0e12 + home: https://kube-logging.github.io + icon: file://assets/logos/rancher-logging.svg + keywords: + - logging + - fluentd + - fluentbit + kubeVersion: '>=1.26.0-0' + name: rancher-logging + sources: + - https://github.com/kube-logging/logging-operator + - https://github.com/kube-logging/helm-charts/tree/main/charts/logging-operator + type: application + urls: + - assets/rancher-logging/rancher-logging-104.1.3+up4.8.0.tgz + version: 104.1.3+up4.8.0 - annotations: catalog.cattle.io/auto-install: rancher-logging-crd=match catalog.cattle.io/certified: rancher @@ -22007,6 +22041,20 @@ entries: - assets/rancher-logging/rancher-logging-3.6.000.tgz version: 3.6.000 rancher-logging-crd: + - annotations: + catalog.cattle.io/certified: rancher + catalog.cattle.io/hidden: "true" + catalog.cattle.io/namespace: cattle-logging-system + catalog.cattle.io/release-name: rancher-logging-crd + apiVersion: v1 + created: "2025-01-31T14:22:19.716804+05:30" + description: Installs the CRDs for rancher-logging. + digest: 86734b99e2298d4f060a72c16b0f41c940f239ddb8a0d1f8cdc68d6bf2759d74 + name: rancher-logging-crd + type: application + urls: + - assets/rancher-logging-crd/rancher-logging-crd-104.1.3+up4.8.0.tgz + version: 104.1.3+up4.8.0 - annotations: catalog.cattle.io/certified: rancher catalog.cattle.io/hidden: "true" diff --git a/packages/rancher-logging/generated-changes/overlay/templates/_generic_fluentbitagent.yaml b/packages/rancher-logging/generated-changes/overlay/templates/_generic_fluentbitagent.yaml index 64dd0131d..ee7a7fa21 100644 --- a/packages/rancher-logging/generated-changes/overlay/templates/_generic_fluentbitagent.yaml +++ b/packages/rancher-logging/generated-changes/overlay/templates/_generic_fluentbitagent.yaml @@ -26,8 +26,8 @@ spec: {{- end }} {{- if .Values.global.seLinux.enabled }} securityContext: - seLinuxOptions: - type: rke_logreader_t + seLinuxOptions: + type: rke_logreader_t {{- end }} {{- if or .Values.fluentbit.inputTail.Buffer_Chunk_Size .Values.fluentbit.inputTail.Buffer_Max_Size .Values.fluentbit.inputTail.Mem_Buf_Limit .Values.fluentbit.inputTail.Multiline_Flush .Values.fluentbit.inputTail.Skip_Long_Lines }} inputTail: @@ -79,4 +79,4 @@ spec: {{- define "logging-operator.fluentbitagent" -}} {{- include "logging-operator.util.merge.fluentbitagent" (append . "logging-operator.fluentbitagent.tpl") -}} -{{- end -}} \ No newline at end of file +{{- end -}} diff --git a/packages/rancher-logging/package.yaml b/packages/rancher-logging/package.yaml index ce46fefcc..40ea472d8 100644 --- a/packages/rancher-logging/package.yaml +++ b/packages/rancher-logging/package.yaml @@ -1,5 +1,5 @@ url: oci://ghcr.io/kube-logging/helm-charts/logging-operator:4.8.0 -version: 104.1.2 +version: 104.1.3 additionalCharts: - workingDir: charts-crd crdOptions: diff --git a/release.yaml b/release.yaml index 83465bf58..6f40aa20a 100644 --- a/release.yaml +++ b/release.yaml @@ -5,6 +5,10 @@ fleet-agent: - 104.1.1+up0.10.5 fleet-crd: - 104.1.1+up0.10.5 +rancher-logging: + - 104.1.3+up4.8.0 +rancher-logging-crd: + - 104.1.3+up4.8.0 rancher-monitoring: - 104.1.4+up57.0.3 rancher-monitoring-crd: