From 4da4f66e0a4d59f0f99a6b6b3fcbd68523e0506c Mon Sep 17 00:00:00 2001 From: Joshua Narezo <21177895+jnarezo@users.noreply.github.com> Date: Wed, 23 Oct 2024 02:54:56 -0700 Subject: [PATCH 1/4] Add user-specified instrumentation volume (#3285) * feat(vol): add custom instr volume spec * feat(vol): generate code * feat(vol): add unit test * feat(vol): update api docs * fix(vol): fix unit test * feat(vol): move validation to webhook * feat(vol): add e2e test * feat(vol): update bundle * fix(vol): fix bundle * feat(vol): add validation unit tests * meta: add changelog * feat: add ephemeral volume option * meta: update changelog * feat: generate * feat: adjust tests * feat: regenerate * fix: fix e2e volume test * feat: update manifest * fix: e2e test --- .chloggen/3267-custom-instr-vol.yaml | 16 + apis/v1alpha1/instrumentation_types.go | 28 + apis/v1alpha1/instrumentation_webhook.go | 38 + apis/v1alpha1/instrumentation_webhook_test.go | 21 + apis/v1alpha1/zz_generated.deepcopy.go | 7 + .../opentelemetry.io_instrumentations.yaml | 784 +++ .../opentelemetry.io_instrumentations.yaml | 784 +++ .../opentelemetry.io_instrumentations.yaml | 784 +++ docs/api.md | 5020 ++++++++++++++--- pkg/instrumentation/apachehttpd.go | 11 +- pkg/instrumentation/dotnet.go | 15 +- pkg/instrumentation/helper.go | 23 + pkg/instrumentation/helper_test.go | 87 + pkg/instrumentation/javaagent.go | 17 +- pkg/instrumentation/nodejs.go | 15 +- pkg/instrumentation/python.go | 15 +- .../00-install-collector.yaml | 22 + .../00-install-instrumentation.yaml | 38 + .../01-assert.yaml | 88 + .../01-install-app.yaml | 32 + .../chainsaw-test.yaml | 40 + 21 files changed, 6978 insertions(+), 907 deletions(-) create mode 100755 .chloggen/3267-custom-instr-vol.yaml create mode 100644 tests/e2e-instrumentation/instrumentation-nodejs-volume/00-install-collector.yaml create mode 100644 tests/e2e-instrumentation/instrumentation-nodejs-volume/00-install-instrumentation.yaml create mode 100644 tests/e2e-instrumentation/instrumentation-nodejs-volume/01-assert.yaml create mode 100644 tests/e2e-instrumentation/instrumentation-nodejs-volume/01-install-app.yaml create mode 100755 tests/e2e-instrumentation/instrumentation-nodejs-volume/chainsaw-test.yaml diff --git a/.chloggen/3267-custom-instr-vol.yaml b/.chloggen/3267-custom-instr-vol.yaml new file mode 100755 index 0000000000..e8fe6a147b --- /dev/null +++ b/.chloggen/3267-custom-instr-vol.yaml @@ -0,0 +1,16 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. collector, target allocator, auto-instrumentation, opamp, github action) +component: auto-instrumentation + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Adds VolumeClaimTemplate field to Instrumentation spec to enable user-definable ephemeral volumes for auto-instrumentation. + +# One or more tracking issues related to the change +issues: [3267] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: diff --git a/apis/v1alpha1/instrumentation_types.go b/apis/v1alpha1/instrumentation_types.go index e158402223..e290f4033b 100644 --- a/apis/v1alpha1/instrumentation_types.go +++ b/apis/v1alpha1/instrumentation_types.go @@ -162,6 +162,10 @@ type Java struct { // +optional Image string `json:"image,omitempty"` + // VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. + // If omitted, an emptyDir is used with size limit VolumeSizeLimit + VolumeClaimTemplate corev1.PersistentVolumeClaimTemplate `json:"volumeClaimTemplate,omitempty"` + // VolumeSizeLimit defines size limit for volume used for auto-instrumentation. // The default size is 200Mi. VolumeSizeLimit *resource.Quantity `json:"volumeLimitSize,omitempty"` @@ -196,6 +200,10 @@ type NodeJS struct { // +optional Image string `json:"image,omitempty"` + // VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. + // If omitted, an emptyDir is used with size limit VolumeSizeLimit + VolumeClaimTemplate corev1.PersistentVolumeClaimTemplate `json:"volumeClaimTemplate,omitempty"` + // VolumeSizeLimit defines size limit for volume used for auto-instrumentation. // The default size is 200Mi. VolumeSizeLimit *resource.Quantity `json:"volumeLimitSize,omitempty"` @@ -217,6 +225,10 @@ type Python struct { // +optional Image string `json:"image,omitempty"` + // VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. + // If omitted, an emptyDir is used with size limit VolumeSizeLimit + VolumeClaimTemplate corev1.PersistentVolumeClaimTemplate `json:"volumeClaimTemplate,omitempty"` + // VolumeSizeLimit defines size limit for volume used for auto-instrumentation. // The default size is 200Mi. VolumeSizeLimit *resource.Quantity `json:"volumeLimitSize,omitempty"` @@ -238,6 +250,10 @@ type DotNet struct { // +optional Image string `json:"image,omitempty"` + // VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. + // If omitted, an emptyDir is used with size limit VolumeSizeLimit + VolumeClaimTemplate corev1.PersistentVolumeClaimTemplate `json:"volumeClaimTemplate,omitempty"` + // VolumeSizeLimit defines size limit for volume used for auto-instrumentation. // The default size is 200Mi. VolumeSizeLimit *resource.Quantity `json:"volumeLimitSize,omitempty"` @@ -257,6 +273,10 @@ type Go struct { // +optional Image string `json:"image,omitempty"` + // VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. + // If omitted, an emptyDir is used with size limit VolumeSizeLimit + VolumeClaimTemplate corev1.PersistentVolumeClaimTemplate `json:"volumeClaimTemplate,omitempty"` + // VolumeSizeLimit defines size limit for volume used for auto-instrumentation. // The default size is 200Mi. VolumeSizeLimit *resource.Quantity `json:"volumeLimitSize,omitempty"` @@ -278,6 +298,10 @@ type ApacheHttpd struct { // +optional Image string `json:"image,omitempty"` + // VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. + // If omitted, an emptyDir is used with size limit VolumeSizeLimit + VolumeClaimTemplate corev1.PersistentVolumeClaimTemplate `json:"volumeClaimTemplate,omitempty"` + // VolumeSizeLimit defines size limit for volume used for auto-instrumentation. // The default size is 200Mi. VolumeSizeLimit *resource.Quantity `json:"volumeLimitSize,omitempty"` @@ -314,6 +338,10 @@ type Nginx struct { // +optional Image string `json:"image,omitempty"` + // VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. + // If omitted, an emptyDir is used with size limit VolumeSizeLimit + VolumeClaimTemplate corev1.PersistentVolumeClaimTemplate `json:"volumeClaimTemplate,omitempty"` + // VolumeSizeLimit defines size limit for volume used for auto-instrumentation. // The default size is 200Mi. VolumeSizeLimit *resource.Quantity `json:"volumeLimitSize,omitempty"` diff --git a/apis/v1alpha1/instrumentation_webhook.go b/apis/v1alpha1/instrumentation_webhook.go index 3d896b0a10..6e52e7c6a5 100644 --- a/apis/v1alpha1/instrumentation_webhook.go +++ b/apis/v1alpha1/instrumentation_webhook.go @@ -17,6 +17,7 @@ package v1alpha1 import ( "context" "fmt" + "reflect" "strconv" "strings" @@ -237,6 +238,36 @@ func (w InstrumentationWebhook) validate(r *Instrumentation) (admission.Warnings return warnings, fmt.Errorf("spec.sampler.type is not valid: %s", r.Spec.Sampler.Type) } + var err error + err = validateInstrVolume(r.Spec.ApacheHttpd.VolumeClaimTemplate, r.Spec.ApacheHttpd.VolumeSizeLimit) + if err != nil { + return warnings, fmt.Errorf("spec.apachehttpd.volumeClaimTemplate and spec.apachehttpd.volumeSizeLimit cannot both be defined: %w", err) + } + err = validateInstrVolume(r.Spec.DotNet.VolumeClaimTemplate, r.Spec.DotNet.VolumeSizeLimit) + if err != nil { + return warnings, fmt.Errorf("spec.dotnet.volumeClaimTemplate and spec.dotnet.volumeSizeLimit cannot both be defined: %w", err) + } + err = validateInstrVolume(r.Spec.Go.VolumeClaimTemplate, r.Spec.Go.VolumeSizeLimit) + if err != nil { + return warnings, fmt.Errorf("spec.go.volumeClaimTemplate and spec.go.volumeSizeLimit cannot both be defined: %w", err) + } + err = validateInstrVolume(r.Spec.Java.VolumeClaimTemplate, r.Spec.Java.VolumeSizeLimit) + if err != nil { + return warnings, fmt.Errorf("spec.java.volumeClaimTemplate and spec.java.volumeSizeLimit cannot both be defined: %w", err) + } + err = validateInstrVolume(r.Spec.Nginx.VolumeClaimTemplate, r.Spec.Nginx.VolumeSizeLimit) + if err != nil { + return warnings, fmt.Errorf("spec.nginx.volumeClaimTemplate and spec.nginx.volumeSizeLimit cannot both be defined: %w", err) + } + err = validateInstrVolume(r.Spec.NodeJS.VolumeClaimTemplate, r.Spec.NodeJS.VolumeSizeLimit) + if err != nil { + return warnings, fmt.Errorf("spec.nodejs.volumeClaimTemplate and spec.nodejs.volumeSizeLimit cannot both be defined: %w", err) + } + err = validateInstrVolume(r.Spec.Python.VolumeClaimTemplate, r.Spec.Python.VolumeSizeLimit) + if err != nil { + return warnings, fmt.Errorf("spec.python.volumeClaimTemplate and spec.python.volumeSizeLimit cannot both be defined: %w", err) + } + warnings = append(warnings, validateExporter(r.Spec.Exporter)...) return warnings, nil @@ -292,6 +323,13 @@ func validateJaegerRemoteSamplerArgument(argument string) error { return nil } +func validateInstrVolume(volumeClaimTemplate corev1.PersistentVolumeClaimTemplate, volumeSizeLimit *resource.Quantity) error { + if !reflect.ValueOf(volumeClaimTemplate).IsZero() && volumeSizeLimit != nil { + return fmt.Errorf("unable to resolve volume size") + } + return nil +} + func NewInstrumentationWebhook(logger logr.Logger, scheme *runtime.Scheme, cfg config.Config) *InstrumentationWebhook { return &InstrumentationWebhook{ logger: logger, diff --git a/apis/v1alpha1/instrumentation_webhook_test.go b/apis/v1alpha1/instrumentation_webhook_test.go index 9c6c1ae5c3..f1089215aa 100644 --- a/apis/v1alpha1/instrumentation_webhook_test.go +++ b/apis/v1alpha1/instrumentation_webhook_test.go @@ -19,11 +19,15 @@ import ( "testing" "github.com/stretchr/testify/assert" + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" "github.com/open-telemetry/opentelemetry-operator/internal/config" ) +var defaultVolumeSize = resource.MustParse("200Mi") + func TestInstrumentationDefaultingWebhook(t *testing.T) { inst := &Instrumentation{} err := InstrumentationWebhook{ @@ -113,6 +117,23 @@ func TestInstrumentationValidatingWebhook(t *testing.T) { }, }, }, + { + name: "with volume and volumeSizeLimit", + err: "spec.nodejs.volumeClaimTemplate and spec.nodejs.volumeSizeLimit cannot both be defined", + inst: Instrumentation{ + Spec: InstrumentationSpec{ + NodeJS: NodeJS{ + VolumeClaimTemplate: corev1.PersistentVolumeClaimTemplate{ + Spec: corev1.PersistentVolumeClaimSpec{ + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + }, + }, + VolumeSizeLimit: &defaultVolumeSize, + }, + }, + }, + warnings: []string{"sampler type not set"}, + }, { name: "exporter: tls cert set but missing key", inst: Instrumentation{ diff --git a/apis/v1alpha1/zz_generated.deepcopy.go b/apis/v1alpha1/zz_generated.deepcopy.go index 5bf6ffaf0a..35c04992cb 100644 --- a/apis/v1alpha1/zz_generated.deepcopy.go +++ b/apis/v1alpha1/zz_generated.deepcopy.go @@ -31,6 +31,7 @@ import ( // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ApacheHttpd) DeepCopyInto(out *ApacheHttpd) { *out = *in + in.VolumeClaimTemplate.DeepCopyInto(&out.VolumeClaimTemplate) if in.VolumeSizeLimit != nil { in, out := &in.VolumeSizeLimit, &out.VolumeSizeLimit x := (*in).DeepCopy() @@ -143,6 +144,7 @@ func (in *Defaults) DeepCopy() *Defaults { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DotNet) DeepCopyInto(out *DotNet) { *out = *in + in.VolumeClaimTemplate.DeepCopyInto(&out.VolumeClaimTemplate) if in.VolumeSizeLimit != nil { in, out := &in.VolumeSizeLimit, &out.VolumeSizeLimit x := (*in).DeepCopy() @@ -206,6 +208,7 @@ func (in *Extensions) DeepCopy() *Extensions { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Go) DeepCopyInto(out *Go) { *out = *in + in.VolumeClaimTemplate.DeepCopyInto(&out.VolumeClaimTemplate) if in.VolumeSizeLimit != nil { in, out := &in.VolumeSizeLimit, &out.VolumeSizeLimit x := (*in).DeepCopy() @@ -381,6 +384,7 @@ func (in *InstrumentationStatus) DeepCopy() *InstrumentationStatus { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Java) DeepCopyInto(out *Java) { *out = *in + in.VolumeClaimTemplate.DeepCopyInto(&out.VolumeClaimTemplate) if in.VolumeSizeLimit != nil { in, out := &in.VolumeSizeLimit, &out.VolumeSizeLimit x := (*in).DeepCopy() @@ -449,6 +453,7 @@ func (in *MetricsConfigSpec) DeepCopy() *MetricsConfigSpec { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Nginx) DeepCopyInto(out *Nginx) { *out = *in + in.VolumeClaimTemplate.DeepCopyInto(&out.VolumeClaimTemplate) if in.VolumeSizeLimit != nil { in, out := &in.VolumeSizeLimit, &out.VolumeSizeLimit x := (*in).DeepCopy() @@ -484,6 +489,7 @@ func (in *Nginx) DeepCopy() *Nginx { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NodeJS) DeepCopyInto(out *NodeJS) { *out = *in + in.VolumeClaimTemplate.DeepCopyInto(&out.VolumeClaimTemplate) if in.VolumeSizeLimit != nil { in, out := &in.VolumeSizeLimit, &out.VolumeSizeLimit x := (*in).DeepCopy() @@ -1200,6 +1206,7 @@ func (in *Probe) DeepCopy() *Probe { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Python) DeepCopyInto(out *Python) { *out = *in + in.VolumeClaimTemplate.DeepCopyInto(&out.VolumeClaimTemplate) if in.VolumeSizeLimit != nil { in, out := &in.VolumeSizeLimit, &out.VolumeSizeLimit x := (*in).DeepCopy() diff --git a/bundle/community/manifests/opentelemetry.io_instrumentations.yaml b/bundle/community/manifests/opentelemetry.io_instrumentations.yaml index 7e59a81d68..d8077d3867 100644 --- a/bundle/community/manifests/opentelemetry.io_instrumentations.yaml +++ b/bundle/community/manifests/opentelemetry.io_instrumentations.yaml @@ -217,6 +217,118 @@ spec: type: object version: type: string + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -332,6 +444,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -526,6 +750,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -648,6 +984,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -826,6 +1274,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -936,6 +1496,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -1059,6 +1731,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer diff --git a/bundle/openshift/manifests/opentelemetry.io_instrumentations.yaml b/bundle/openshift/manifests/opentelemetry.io_instrumentations.yaml index 7e59a81d68..d8077d3867 100644 --- a/bundle/openshift/manifests/opentelemetry.io_instrumentations.yaml +++ b/bundle/openshift/manifests/opentelemetry.io_instrumentations.yaml @@ -217,6 +217,118 @@ spec: type: object version: type: string + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -332,6 +444,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -526,6 +750,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -648,6 +984,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -826,6 +1274,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -936,6 +1496,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -1059,6 +1731,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer diff --git a/config/crd/bases/opentelemetry.io_instrumentations.yaml b/config/crd/bases/opentelemetry.io_instrumentations.yaml index ac7f54d183..4032a33613 100644 --- a/config/crd/bases/opentelemetry.io_instrumentations.yaml +++ b/config/crd/bases/opentelemetry.io_instrumentations.yaml @@ -215,6 +215,118 @@ spec: type: object version: type: string + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -330,6 +442,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -524,6 +748,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -646,6 +982,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -824,6 +1272,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -934,6 +1494,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer @@ -1057,6 +1729,118 @@ spec: x-kubernetes-int-or-string: true type: object type: object + volumeClaimTemplate: + properties: + metadata: + properties: + annotations: + additionalProperties: + type: string + type: object + finalizers: + items: + type: string + type: array + labels: + additionalProperties: + type: string + type: object + name: + type: string + namespace: + type: string + type: object + spec: + properties: + accessModes: + items: + type: string + type: array + x-kubernetes-list-type: atomic + dataSource: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + required: + - kind + - name + type: object + x-kubernetes-map-type: atomic + dataSourceRef: + properties: + apiGroup: + type: string + kind: + type: string + name: + type: string + namespace: + type: string + required: + - kind + - name + type: object + resources: + properties: + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + selector: + properties: + matchExpressions: + items: + properties: + key: + type: string + operator: + type: string + values: + items: + type: string + type: array + x-kubernetes-list-type: atomic + required: + - key + - operator + type: object + type: array + x-kubernetes-list-type: atomic + matchLabels: + additionalProperties: + type: string + type: object + type: object + x-kubernetes-map-type: atomic + storageClassName: + type: string + volumeAttributesClassName: + type: string + volumeMode: + type: string + volumeName: + type: string + type: object + required: + - spec + type: object volumeLimitSize: anyOf: - type: integer diff --git a/docs/api.md b/docs/api.md index d921a01256..9601cca2fd 100644 --- a/docs/api.md +++ b/docs/api.md @@ -253,6 +253,14 @@ If the former var had been defined, then the other vars would be ignored.
Apache HTTPD server version. One of 2.4 or 2.2. Default is 2.4
false + + volumeClaimTemplate + object + + VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit
+ + false volumeLimitSize int or string @@ -894,12 +902,13 @@ only the result of this request.
-### Instrumentation.spec.defaults -[↩ Parent](#instrumentationspec) +### Instrumentation.spec.apacheHttpd.volumeClaimTemplate +[↩ Parent](#instrumentationspecapachehttpd) -Defaults defines default values for the instrumentation. +VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit @@ -911,26 +920,37 @@ Defaults defines default values for the instrumentation. - - + + + + + + +
useLabelsForResourceAttributesbooleanspecobject - UseLabelsForResourceAttributes defines whether to use common labels for resource attributes: - - `app.kubernetes.io/name` becomes `service.name` - - `app.kubernetes.io/version` becomes `service.version` - - `app.kubernetes.io/part-of` becomes `service.namespace` - - `app.kubernetes.io/instance` becomes `service.instance.id`
+ The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here.
+
true
metadataobject + May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation.
false
-### Instrumentation.spec.dotnet -[↩ Parent](#instrumentationspec) +### Instrumentation.spec.apacheHttpd.volumeClaimTemplate.spec +[↩ Parent](#instrumentationspecapachehttpdvolumeclaimtemplate) -DotNet defines configuration for DotNet auto-instrumentation. +The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here. @@ -942,46 +962,125 @@ DotNet defines configuration for DotNet auto-instrumentation. - - + + - - + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + +
env[]objectaccessModes[]string - Env defines DotNet specific env vars. There are four layers for env vars' definitions and -the precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`. -If the former var had been defined, then the other vars would be ignored.
+ accessModes contains the desired access modes the volume should have. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
false
imagestringdataSourceobject - Image is a container image with DotNet SDK and auto-instrumentation.
+ dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource.
false
resourceRequirementsdataSourceRef object - Resources describes the compute resource requirements.
+ dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects.
false
volumeLimitSizeint or stringresourcesobject - VolumeSizeLimit defines size limit for volume used for auto-instrumentation. -The default size is 200Mi.
+ resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+
false
selectorobject + selector is a label query over volumes to consider for binding.
+
false
storageClassNamestring + storageClassName is the name of the StorageClass required by the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+
false
volumeAttributesClassNamestring + volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. +If specified, the CSI driver will create or update the volume with the attributes defined +in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, +it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass +will be applied to the claim but it's not allowed to reset this field to empty string once it is set. +If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass +will be set by the persistentvolume controller if it exists. +If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be +set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource +exists. +More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ +(Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
+
false
volumeModestring + volumeMode defines what type of volume is required by the claim. +Value of Filesystem is implied when not included in claim spec.
+
false
volumeNamestring + volumeName is the binding reference to the PersistentVolume backing this claim.
false
-### Instrumentation.spec.dotnet.env[index] -[↩ Parent](#instrumentationspecdotnet) +### Instrumentation.spec.apacheHttpd.volumeClaimTemplate.spec.dataSource +[↩ Parent](#instrumentationspecapachehttpdvolumeclaimtemplatespec) -EnvVar represents an environment variable present in a Container. +dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource. @@ -993,44 +1092,53 @@ EnvVar represents an environment variable present in a Container. - + - + - + - - + +
namekind string - Name of the environment variable. Must be a C_IDENTIFIER.
+ Kind is the type of resource being referenced
true
valuename string - Variable references $(VAR_NAME) are expanded -using the previously defined environment variables in the container and -any service environment variables. If a variable cannot be resolved, -the reference in the input string will be unchanged. Double $$ are reduced -to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. -"$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". -Escaped references will never be expanded, regardless of whether the variable -exists or not. -Defaults to "".
+ Name is the name of resource being referenced
falsetrue
valueFromobjectapiGroupstring - Source for the environment variable's value. Cannot be used if value is not empty.
+ APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
false
-### Instrumentation.spec.dotnet.env[index].valueFrom -[↩ Parent](#instrumentationspecdotnetenvindex) +### Instrumentation.spec.apacheHttpd.volumeClaimTemplate.spec.dataSourceRef +[↩ Parent](#instrumentationspecapachehttpdvolumeclaimtemplatespec) -Source for the environment variable's value. Cannot be used if value is not empty. +dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects. @@ -1042,45 +1150,51 @@ Source for the environment variable's value. Cannot be used if value is not empt - - + + - + - - + + - + - - + + - - + +
configMapKeyRefobjectkindstring - Selects a key of a ConfigMap.
+ Kind is the type of resource being referenced
falsetrue
fieldRefobjectnamestring - Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, -spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ Name is the name of resource being referenced
falsetrue
resourceFieldRefobjectapiGroupstring - Selects a resource of the container: only resources limits and requests -(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+ APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
false
secretKeyRefobjectnamespacestring - Selects a key of a secret in the pod's namespace
+ Namespace is the namespace of resource being referenced +Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. +(Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
false
-### Instrumentation.spec.dotnet.env[index].valueFrom.configMapKeyRef -[↩ Parent](#instrumentationspecdotnetenvindexvaluefrom) +### Instrumentation.spec.apacheHttpd.volumeClaimTemplate.spec.resources +[↩ Parent](#instrumentationspecapachehttpdvolumeclaimtemplatespec) -Selects a key of a ConfigMap. +resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources @@ -1092,43 +1206,33 @@ Selects a key of a ConfigMap. - - + + - + - - + + - - - - -
keystringlimitsmap[string]int or string - The key to select.
+ Limits describes the maximum amount of compute resources allowed. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
truefalse
namestringrequestsmap[string]int or string - Name of the referent. -This field is effectively required, but due to backwards compatibility is -allowed to be empty. Instances of this type with an empty value here are -almost certainly wrong. -More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-
- Default:
-
false
optionalboolean - Specify whether the ConfigMap or its key must be defined
+ Requests describes the minimum amount of compute resources required. +If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, +otherwise to an implementation-defined value. Requests cannot exceed Limits. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
false
-### Instrumentation.spec.dotnet.env[index].valueFrom.fieldRef -[↩ Parent](#instrumentationspecdotnetenvindexvaluefrom) +### Instrumentation.spec.apacheHttpd.volumeClaimTemplate.spec.selector +[↩ Parent](#instrumentationspecapachehttpdvolumeclaimtemplatespec) -Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, -spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. +selector is a label query over volumes to consider for binding. @@ -1140,30 +1244,32 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI - - + + - + - - + +
fieldPathstringmatchExpressions[]object - Path of the field to select in the specified API version.
+ matchExpressions is a list of label selector requirements. The requirements are ANDed.
truefalse
apiVersionstringmatchLabelsmap[string]string - Version of the schema the FieldPath is written in terms of, defaults to "v1".
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels +map is equivalent to an element of matchExpressions, whose key field is "key", the +operator is "In", and the values array contains only "value". The requirements are ANDed.
false
-### Instrumentation.spec.dotnet.env[index].valueFrom.resourceFieldRef -[↩ Parent](#instrumentationspecdotnetenvindexvaluefrom) +### Instrumentation.spec.apacheHttpd.volumeClaimTemplate.spec.selector.matchExpressions[index] +[↩ Parent](#instrumentationspecapachehttpdvolumeclaimtemplatespecselector) -Selects a resource of the container: only resources limits and requests -(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. +A label selector requirement is a selector that contains values, a key, and an operator that +relates the key and values. @@ -1175,36 +1281,42 @@ Selects a resource of the container: only resources limits and requests - + - + - + - - + +
resourcekey string - Required: resource to select
+ key is the label key that the selector applies to.
true
containerNameoperator string - Container name: required for volumes, optional for env vars
+ operator represents a key's relationship to a set of values. +Valid operators are In, NotIn, Exists and DoesNotExist.
falsetrue
divisorint or stringvalues[]string - Specifies the output format of the exposed resources, defaults to "1"
+ values is an array of string values. If the operator is In or NotIn, +the values array must be non-empty. If the operator is Exists or DoesNotExist, +the values array must be empty. This array is replaced during a strategic +merge patch.
false
-### Instrumentation.spec.dotnet.env[index].valueFrom.secretKeyRef -[↩ Parent](#instrumentationspecdotnetenvindexvaluefrom) +### Instrumentation.spec.apacheHttpd.volumeClaimTemplate.metadata +[↩ Parent](#instrumentationspecapachehttpdvolumeclaimtemplate) -Selects a key of a secret in the pod's namespace +May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation. @@ -1216,42 +1328,50 @@ Selects a key of a secret in the pod's namespace - - + + - + + + + + + + + + + + - - + +
keystringannotationsmap[string]string - The key of the secret to select from. Must be a valid secret key.
+
truefalse
finalizers[]string +
+
false
labelsmap[string]string +
+
false
name string - Name of the referent. -This field is effectively required, but due to backwards compatibility is -allowed to be empty. Instances of this type with an empty value here are -almost certainly wrong. -More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names

- Default:
false
optionalbooleannamespacestring - Specify whether the Secret or its key must be defined
+
false
-### Instrumentation.spec.dotnet.resourceRequirements -[↩ Parent](#instrumentationspecdotnet) +### Instrumentation.spec.defaults +[↩ Parent](#instrumentationspec) -Resources describes the compute resource requirements. +Defaults defines default values for the instrumentation. @@ -1263,46 +1383,26 @@ Resources describes the compute resource requirements. - - - - - - - - - - - - + +
claims[]object - Claims lists the names of resources, defined in spec.resourceClaims, -that are used by this container. - -This is an alpha field and requires enabling the -DynamicResourceAllocation feature gate. - -This field is immutable. It can only be set for containers.
-
false
limitsmap[string]int or string - Limits describes the maximum amount of compute resources allowed. -More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
-
false
requestsmap[string]int or stringuseLabelsForResourceAttributesboolean - Requests describes the minimum amount of compute resources required. -If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, -otherwise to an implementation-defined value. Requests cannot exceed Limits. -More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ UseLabelsForResourceAttributes defines whether to use common labels for resource attributes: + - `app.kubernetes.io/name` becomes `service.name` + - `app.kubernetes.io/version` becomes `service.version` + - `app.kubernetes.io/part-of` becomes `service.namespace` + - `app.kubernetes.io/instance` becomes `service.instance.id`
false
-### Instrumentation.spec.dotnet.resourceRequirements.claims[index] -[↩ Parent](#instrumentationspecdotnetresourcerequirements) +### Instrumentation.spec.dotnet +[↩ Parent](#instrumentationspec) -ResourceClaim references one entry in PodSpec.ResourceClaims. +DotNet defines configuration for DotNet auto-instrumentation. @@ -1314,29 +1414,50 @@ ResourceClaim references one entry in PodSpec.ResourceClaims. - - + + - + - + + + + + + + + + + + + + + + +
namestringenv[]object - Name must match the name of one entry in pod.spec.resourceClaims of -the Pod where this field is used. It makes that resource available -inside a container.
+ Env defines DotNet specific env vars. There are four layers for env vars' definitions and +the precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`. +If the former var had been defined, then the other vars would be ignored.
truefalse
requestimage string - Request is the name chosen for a request in the referenced claim. -If empty, everything from the claim is made available, otherwise -only the result of this request.
+ Image is a container image with DotNet SDK and auto-instrumentation.
+
false
resourceRequirementsobject + Resources describes the compute resource requirements.
+
false
volumeClaimTemplateobject + VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit
+
false
volumeLimitSizeint or string + VolumeSizeLimit defines size limit for volume used for auto-instrumentation. +The default size is 200Mi.
false
-### Instrumentation.spec.env[index] -[↩ Parent](#instrumentationspec) +### Instrumentation.spec.dotnet.env[index] +[↩ Parent](#instrumentationspecdotnet) @@ -1374,7 +1495,7 @@ Defaults to "".
false - valueFrom + valueFrom object Source for the environment variable's value. Cannot be used if value is not empty.
@@ -1384,8 +1505,8 @@ Defaults to "".
-### Instrumentation.spec.env[index].valueFrom -[↩ Parent](#instrumentationspecenvindex) +### Instrumentation.spec.dotnet.env[index].valueFrom +[↩ Parent](#instrumentationspecdotnetenvindex) @@ -1401,14 +1522,14 @@ Source for the environment variable's value. Cannot be used if value is not empt - configMapKeyRef + configMapKeyRef object Selects a key of a ConfigMap.
false - fieldRef + fieldRef object Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, @@ -1416,7 +1537,7 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI false - resourceFieldRef + resourceFieldRef object Selects a resource of the container: only resources limits and requests @@ -1424,7 +1545,7 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI false - secretKeyRef + secretKeyRef object Selects a key of a secret in the pod's namespace
@@ -1434,8 +1555,8 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI -### Instrumentation.spec.env[index].valueFrom.configMapKeyRef -[↩ Parent](#instrumentationspecenvindexvaluefrom) +### Instrumentation.spec.dotnet.env[index].valueFrom.configMapKeyRef +[↩ Parent](#instrumentationspecdotnetenvindexvaluefrom) @@ -1481,8 +1602,8 @@ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/nam -### Instrumentation.spec.env[index].valueFrom.fieldRef -[↩ Parent](#instrumentationspecenvindexvaluefrom) +### Instrumentation.spec.dotnet.env[index].valueFrom.fieldRef +[↩ Parent](#instrumentationspecdotnetenvindexvaluefrom) @@ -1516,8 +1637,8 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI -### Instrumentation.spec.env[index].valueFrom.resourceFieldRef -[↩ Parent](#instrumentationspecenvindexvaluefrom) +### Instrumentation.spec.dotnet.env[index].valueFrom.resourceFieldRef +[↩ Parent](#instrumentationspecdotnetenvindexvaluefrom) @@ -1558,8 +1679,8 @@ Selects a resource of the container: only resources limits and requests -### Instrumentation.spec.env[index].valueFrom.secretKeyRef -[↩ Parent](#instrumentationspecenvindexvaluefrom) +### Instrumentation.spec.dotnet.env[index].valueFrom.secretKeyRef +[↩ Parent](#instrumentationspecdotnetenvindexvaluefrom) @@ -1605,12 +1726,12 @@ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/nam -### Instrumentation.spec.exporter -[↩ Parent](#instrumentationspec) +### Instrumentation.spec.dotnet.resourceRequirements +[↩ Parent](#instrumentationspecdotnet) -Exporter defines exporter configuration. +Resources describes the compute resource requirements. @@ -1622,32 +1743,46 @@ Exporter defines exporter configuration. - - + + - - + + + + + + +
endpointstringclaims[]object - Endpoint is address of the collector with OTLP endpoint. -If the endpoint defines https:// scheme TLS has to be specified.
+ Claims lists the names of resources, defined in spec.resourceClaims, +that are used by this container. + +This is an alpha field and requires enabling the +DynamicResourceAllocation feature gate. + +This field is immutable. It can only be set for containers.
false
tlsobjectlimitsmap[string]int or string - TLS defines certificates for TLS. -TLS needs to be enabled by specifying https:// scheme in the Endpoint.
+ Limits describes the maximum amount of compute resources allowed. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
requestsmap[string]int or string + Requests describes the minimum amount of compute resources required. +If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, +otherwise to an implementation-defined value. Requests cannot exceed Limits. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
false
-### Instrumentation.spec.exporter.tls -[↩ Parent](#instrumentationspecexporter) +### Instrumentation.spec.dotnet.resourceRequirements.claims[index] +[↩ Parent](#instrumentationspecdotnetresourcerequirements) -TLS defines certificates for TLS. -TLS needs to be enabled by specifying https:// scheme in the Endpoint. +ResourceClaim references one entry in PodSpec.ResourceClaims. @@ -1659,61 +1794,2975 @@ TLS needs to be enabled by specifying https:// scheme in the Endpoint. - + + + + + + + + +
ca_filename string - CA defines the key of certificate (e.g. ca.crt) in the configmap map, secret or absolute path to a certificate. + Name must match the name of one entry in pod.spec.resourceClaims of +the Pod where this field is used. It makes that resource available +inside a container.
+
true
requeststring + Request is the name chosen for a request in the referenced claim. +If empty, everything from the claim is made available, otherwise +only the result of this request.
+
false
+ + +### Instrumentation.spec.dotnet.volumeClaimTemplate +[↩ Parent](#instrumentationspecdotnet) + + + +VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
specobject + The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here.
+
true
metadataobject + May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation.
+
false
+ + +### Instrumentation.spec.dotnet.volumeClaimTemplate.spec +[↩ Parent](#instrumentationspecdotnetvolumeclaimtemplate) + + + +The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
accessModes[]string + accessModes contains the desired access modes the volume should have. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+
false
dataSourceobject + dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+
false
dataSourceRefobject + dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects.
+
false
resourcesobject + resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+
false
selectorobject + selector is a label query over volumes to consider for binding.
+
false
storageClassNamestring + storageClassName is the name of the StorageClass required by the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+
false
volumeAttributesClassNamestring + volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. +If specified, the CSI driver will create or update the volume with the attributes defined +in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, +it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass +will be applied to the claim but it's not allowed to reset this field to empty string once it is set. +If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass +will be set by the persistentvolume controller if it exists. +If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be +set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource +exists. +More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ +(Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
+
false
volumeModestring + volumeMode defines what type of volume is required by the claim. +Value of Filesystem is implied when not included in claim spec.
+
false
volumeNamestring + volumeName is the binding reference to the PersistentVolume backing this claim.
+
false
+ + +### Instrumentation.spec.dotnet.volumeClaimTemplate.spec.dataSource +[↩ Parent](#instrumentationspecdotnetvolumeclaimtemplatespec) + + + +dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
kindstring + Kind is the type of resource being referenced
+
true
namestring + Name is the name of resource being referenced
+
true
apiGroupstring + APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
+
false
+ + +### Instrumentation.spec.dotnet.volumeClaimTemplate.spec.dataSourceRef +[↩ Parent](#instrumentationspecdotnetvolumeclaimtemplatespec) + + + +dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
kindstring + Kind is the type of resource being referenced
+
true
namestring + Name is the name of resource being referenced
+
true
apiGroupstring + APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
+
false
namespacestring + Namespace is the namespace of resource being referenced +Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. +(Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+
false
+ + +### Instrumentation.spec.dotnet.volumeClaimTemplate.spec.resources +[↩ Parent](#instrumentationspecdotnetvolumeclaimtemplatespec) + + + +resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
limitsmap[string]int or string + Limits describes the maximum amount of compute resources allowed. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
requestsmap[string]int or string + Requests describes the minimum amount of compute resources required. +If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, +otherwise to an implementation-defined value. Requests cannot exceed Limits. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
+ + +### Instrumentation.spec.dotnet.volumeClaimTemplate.spec.selector +[↩ Parent](#instrumentationspecdotnetvolumeclaimtemplatespec) + + + +selector is a label query over volumes to consider for binding. + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
matchExpressions[]object + matchExpressions is a list of label selector requirements. The requirements are ANDed.
+
false
matchLabelsmap[string]string + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels +map is equivalent to an element of matchExpressions, whose key field is "key", the +operator is "In", and the values array contains only "value". The requirements are ANDed.
+
false
+ + +### Instrumentation.spec.dotnet.volumeClaimTemplate.spec.selector.matchExpressions[index] +[↩ Parent](#instrumentationspecdotnetvolumeclaimtemplatespecselector) + + + +A label selector requirement is a selector that contains values, a key, and an operator that +relates the key and values. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
keystring + key is the label key that the selector applies to.
+
true
operatorstring + operator represents a key's relationship to a set of values. +Valid operators are In, NotIn, Exists and DoesNotExist.
+
true
values[]string + values is an array of string values. If the operator is In or NotIn, +the values array must be non-empty. If the operator is Exists or DoesNotExist, +the values array must be empty. This array is replaced during a strategic +merge patch.
+
false
+ + +### Instrumentation.spec.dotnet.volumeClaimTemplate.metadata +[↩ Parent](#instrumentationspecdotnetvolumeclaimtemplate) + + + +May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
annotationsmap[string]string +
+
false
finalizers[]string +
+
false
labelsmap[string]string +
+
false
namestring +
+
false
namespacestring +
+
false
+ + +### Instrumentation.spec.env[index] +[↩ Parent](#instrumentationspec) + + + +EnvVar represents an environment variable present in a Container. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
namestring + Name of the environment variable. Must be a C_IDENTIFIER.
+
true
valuestring + Variable references $(VAR_NAME) are expanded +using the previously defined environment variables in the container and +any service environment variables. If a variable cannot be resolved, +the reference in the input string will be unchanged. Double $$ are reduced +to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. +"$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". +Escaped references will never be expanded, regardless of whether the variable +exists or not. +Defaults to "".
+
false
valueFromobject + Source for the environment variable's value. Cannot be used if value is not empty.
+
false
+ + +### Instrumentation.spec.env[index].valueFrom +[↩ Parent](#instrumentationspecenvindex) + + + +Source for the environment variable's value. Cannot be used if value is not empty. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
configMapKeyRefobject + Selects a key of a ConfigMap.
+
false
fieldRefobject + Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, +spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+
false
resourceFieldRefobject + Selects a resource of the container: only resources limits and requests +(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+
false
secretKeyRefobject + Selects a key of a secret in the pod's namespace
+
false
+ + +### Instrumentation.spec.env[index].valueFrom.configMapKeyRef +[↩ Parent](#instrumentationspecenvindexvaluefrom) + + + +Selects a key of a ConfigMap. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
keystring + The key to select.
+
true
namestring + Name of the referent. +This field is effectively required, but due to backwards compatibility is +allowed to be empty. Instances of this type with an empty value here are +almost certainly wrong. +More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+
+ Default:
+
false
optionalboolean + Specify whether the ConfigMap or its key must be defined
+
false
+ + +### Instrumentation.spec.env[index].valueFrom.fieldRef +[↩ Parent](#instrumentationspecenvindexvaluefrom) + + + +Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, +spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
fieldPathstring + Path of the field to select in the specified API version.
+
true
apiVersionstring + Version of the schema the FieldPath is written in terms of, defaults to "v1".
+
false
+ + +### Instrumentation.spec.env[index].valueFrom.resourceFieldRef +[↩ Parent](#instrumentationspecenvindexvaluefrom) + + + +Selects a resource of the container: only resources limits and requests +(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
resourcestring + Required: resource to select
+
true
containerNamestring + Container name: required for volumes, optional for env vars
+
false
divisorint or string + Specifies the output format of the exposed resources, defaults to "1"
+
false
+ + +### Instrumentation.spec.env[index].valueFrom.secretKeyRef +[↩ Parent](#instrumentationspecenvindexvaluefrom) + + + +Selects a key of a secret in the pod's namespace + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
keystring + The key of the secret to select from. Must be a valid secret key.
+
true
namestring + Name of the referent. +This field is effectively required, but due to backwards compatibility is +allowed to be empty. Instances of this type with an empty value here are +almost certainly wrong. +More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+
+ Default:
+
false
optionalboolean + Specify whether the Secret or its key must be defined
+
false
+ + +### Instrumentation.spec.exporter +[↩ Parent](#instrumentationspec) + + + +Exporter defines exporter configuration. + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
endpointstring + Endpoint is address of the collector with OTLP endpoint. +If the endpoint defines https:// scheme TLS has to be specified.
+
false
tlsobject + TLS defines certificates for TLS. +TLS needs to be enabled by specifying https:// scheme in the Endpoint.
+
false
+ + +### Instrumentation.spec.exporter.tls +[↩ Parent](#instrumentationspecexporter) + + + +TLS defines certificates for TLS. +TLS needs to be enabled by specifying https:// scheme in the Endpoint. + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
ca_filestring + CA defines the key of certificate (e.g. ca.crt) in the configmap map, secret or absolute path to a certificate. The absolute path can be used when certificate is already present on the workload filesystem e.g. /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt
false
cert_filestringcert_filestring + Cert defines the key (e.g. tls.crt) of the client certificate in the secret or absolute path to a certificate. +The absolute path can be used when certificate is already present on the workload filesystem.
+
false
configMapNamestring + ConfigMapName defines configmap name with CA certificate. If it is not defined CA certificate will be +used from the secret defined in SecretName.
+
false
key_filestring + Key defines a key (e.g. tls.key) of the private key in the secret or absolute path to a certificate. +The absolute path can be used when certificate is already present on the workload filesystem.
+
false
secretNamestring + SecretName defines secret name that will be used to configure TLS on the exporter. +It is user responsibility to create the secret in the namespace of the workload. +The secret must contain client certificate (Cert) and private key (Key). +The CA certificate might be defined in the secret or in the config map.
+
false
+ + +### Instrumentation.spec.go +[↩ Parent](#instrumentationspec) + + + +Go defines configuration for Go auto-instrumentation. +When using Go auto-instrumentation you must provide a value for the OTEL_GO_AUTO_TARGET_EXE env var via the +Instrumentation env vars or via the instrumentation.opentelemetry.io/otel-go-auto-target-exe pod annotation. +Failure to set this value causes instrumentation injection to abort, leaving the original pod unchanged. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
env[]object + Env defines Go specific env vars. There are four layers for env vars' definitions and +the precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`. +If the former var had been defined, then the other vars would be ignored.
+
false
imagestring + Image is a container image with Go SDK and auto-instrumentation.
+
false
resourceRequirementsobject + Resources describes the compute resource requirements.
+
false
volumeClaimTemplateobject + VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit
+
false
volumeLimitSizeint or string + VolumeSizeLimit defines size limit for volume used for auto-instrumentation. +The default size is 200Mi.
+
false
+ + +### Instrumentation.spec.go.env[index] +[↩ Parent](#instrumentationspecgo) + + + +EnvVar represents an environment variable present in a Container. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
namestring + Name of the environment variable. Must be a C_IDENTIFIER.
+
true
valuestring + Variable references $(VAR_NAME) are expanded +using the previously defined environment variables in the container and +any service environment variables. If a variable cannot be resolved, +the reference in the input string will be unchanged. Double $$ are reduced +to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. +"$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". +Escaped references will never be expanded, regardless of whether the variable +exists or not. +Defaults to "".
+
false
valueFromobject + Source for the environment variable's value. Cannot be used if value is not empty.
+
false
+ + +### Instrumentation.spec.go.env[index].valueFrom +[↩ Parent](#instrumentationspecgoenvindex) + + + +Source for the environment variable's value. Cannot be used if value is not empty. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
configMapKeyRefobject + Selects a key of a ConfigMap.
+
false
fieldRefobject + Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, +spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+
false
resourceFieldRefobject + Selects a resource of the container: only resources limits and requests +(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+
false
secretKeyRefobject + Selects a key of a secret in the pod's namespace
+
false
+ + +### Instrumentation.spec.go.env[index].valueFrom.configMapKeyRef +[↩ Parent](#instrumentationspecgoenvindexvaluefrom) + + + +Selects a key of a ConfigMap. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
keystring + The key to select.
+
true
namestring + Name of the referent. +This field is effectively required, but due to backwards compatibility is +allowed to be empty. Instances of this type with an empty value here are +almost certainly wrong. +More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+
+ Default:
+
false
optionalboolean + Specify whether the ConfigMap or its key must be defined
+
false
+ + +### Instrumentation.spec.go.env[index].valueFrom.fieldRef +[↩ Parent](#instrumentationspecgoenvindexvaluefrom) + + + +Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, +spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
fieldPathstring + Path of the field to select in the specified API version.
+
true
apiVersionstring + Version of the schema the FieldPath is written in terms of, defaults to "v1".
+
false
+ + +### Instrumentation.spec.go.env[index].valueFrom.resourceFieldRef +[↩ Parent](#instrumentationspecgoenvindexvaluefrom) + + + +Selects a resource of the container: only resources limits and requests +(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
resourcestring + Required: resource to select
+
true
containerNamestring + Container name: required for volumes, optional for env vars
+
false
divisorint or string + Specifies the output format of the exposed resources, defaults to "1"
+
false
+ + +### Instrumentation.spec.go.env[index].valueFrom.secretKeyRef +[↩ Parent](#instrumentationspecgoenvindexvaluefrom) + + + +Selects a key of a secret in the pod's namespace + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
keystring + The key of the secret to select from. Must be a valid secret key.
+
true
namestring + Name of the referent. +This field is effectively required, but due to backwards compatibility is +allowed to be empty. Instances of this type with an empty value here are +almost certainly wrong. +More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+
+ Default:
+
false
optionalboolean + Specify whether the Secret or its key must be defined
+
false
+ + +### Instrumentation.spec.go.resourceRequirements +[↩ Parent](#instrumentationspecgo) + + + +Resources describes the compute resource requirements. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
claims[]object + Claims lists the names of resources, defined in spec.resourceClaims, +that are used by this container. + +This is an alpha field and requires enabling the +DynamicResourceAllocation feature gate. + +This field is immutable. It can only be set for containers.
+
false
limitsmap[string]int or string + Limits describes the maximum amount of compute resources allowed. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
requestsmap[string]int or string + Requests describes the minimum amount of compute resources required. +If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, +otherwise to an implementation-defined value. Requests cannot exceed Limits. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
+ + +### Instrumentation.spec.go.resourceRequirements.claims[index] +[↩ Parent](#instrumentationspecgoresourcerequirements) + + + +ResourceClaim references one entry in PodSpec.ResourceClaims. + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
namestring + Name must match the name of one entry in pod.spec.resourceClaims of +the Pod where this field is used. It makes that resource available +inside a container.
+
true
requeststring + Request is the name chosen for a request in the referenced claim. +If empty, everything from the claim is made available, otherwise +only the result of this request.
+
false
+ + +### Instrumentation.spec.go.volumeClaimTemplate +[↩ Parent](#instrumentationspecgo) + + + +VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
specobject + The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here.
+
true
metadataobject + May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation.
+
false
+ + +### Instrumentation.spec.go.volumeClaimTemplate.spec +[↩ Parent](#instrumentationspecgovolumeclaimtemplate) + + + +The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
accessModes[]string + accessModes contains the desired access modes the volume should have. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+
false
dataSourceobject + dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+
false
dataSourceRefobject + dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects.
+
false
resourcesobject + resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+
false
selectorobject + selector is a label query over volumes to consider for binding.
+
false
storageClassNamestring + storageClassName is the name of the StorageClass required by the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+
false
volumeAttributesClassNamestring + volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. +If specified, the CSI driver will create or update the volume with the attributes defined +in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, +it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass +will be applied to the claim but it's not allowed to reset this field to empty string once it is set. +If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass +will be set by the persistentvolume controller if it exists. +If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be +set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource +exists. +More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ +(Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
+
false
volumeModestring + volumeMode defines what type of volume is required by the claim. +Value of Filesystem is implied when not included in claim spec.
+
false
volumeNamestring + volumeName is the binding reference to the PersistentVolume backing this claim.
+
false
+ + +### Instrumentation.spec.go.volumeClaimTemplate.spec.dataSource +[↩ Parent](#instrumentationspecgovolumeclaimtemplatespec) + + + +dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
kindstring + Kind is the type of resource being referenced
+
true
namestring + Name is the name of resource being referenced
+
true
apiGroupstring + APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
+
false
+ + +### Instrumentation.spec.go.volumeClaimTemplate.spec.dataSourceRef +[↩ Parent](#instrumentationspecgovolumeclaimtemplatespec) + + + +dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
kindstring + Kind is the type of resource being referenced
+
true
namestring + Name is the name of resource being referenced
+
true
apiGroupstring + APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
+
false
namespacestring + Namespace is the namespace of resource being referenced +Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. +(Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+
false
+ + +### Instrumentation.spec.go.volumeClaimTemplate.spec.resources +[↩ Parent](#instrumentationspecgovolumeclaimtemplatespec) + + + +resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
limitsmap[string]int or string + Limits describes the maximum amount of compute resources allowed. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
requestsmap[string]int or string + Requests describes the minimum amount of compute resources required. +If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, +otherwise to an implementation-defined value. Requests cannot exceed Limits. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
+ + +### Instrumentation.spec.go.volumeClaimTemplate.spec.selector +[↩ Parent](#instrumentationspecgovolumeclaimtemplatespec) + + + +selector is a label query over volumes to consider for binding. + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
matchExpressions[]object + matchExpressions is a list of label selector requirements. The requirements are ANDed.
+
false
matchLabelsmap[string]string + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels +map is equivalent to an element of matchExpressions, whose key field is "key", the +operator is "In", and the values array contains only "value". The requirements are ANDed.
+
false
+ + +### Instrumentation.spec.go.volumeClaimTemplate.spec.selector.matchExpressions[index] +[↩ Parent](#instrumentationspecgovolumeclaimtemplatespecselector) + + + +A label selector requirement is a selector that contains values, a key, and an operator that +relates the key and values. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
keystring + key is the label key that the selector applies to.
+
true
operatorstring + operator represents a key's relationship to a set of values. +Valid operators are In, NotIn, Exists and DoesNotExist.
+
true
values[]string + values is an array of string values. If the operator is In or NotIn, +the values array must be non-empty. If the operator is Exists or DoesNotExist, +the values array must be empty. This array is replaced during a strategic +merge patch.
+
false
+ + +### Instrumentation.spec.go.volumeClaimTemplate.metadata +[↩ Parent](#instrumentationspecgovolumeclaimtemplate) + + + +May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
annotationsmap[string]string +
+
false
finalizers[]string +
+
false
labelsmap[string]string +
+
false
namestring +
+
false
namespacestring +
+
false
+ + +### Instrumentation.spec.java +[↩ Parent](#instrumentationspec) + + + +Java defines configuration for java auto-instrumentation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
env[]object + Env defines java specific env vars. There are four layers for env vars' definitions and +the precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`. +If the former var had been defined, then the other vars would be ignored.
+
false
extensions[]object + Extensions defines java specific extensions. +All extensions are copied to a single directory; if a JAR with the same name exists, it will be overwritten.
+
false
imagestring + Image is a container image with javaagent auto-instrumentation JAR.
+
false
resourcesobject + Resources describes the compute resource requirements.
+
false
volumeClaimTemplateobject + VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit
+
false
volumeLimitSizeint or string + VolumeSizeLimit defines size limit for volume used for auto-instrumentation. +The default size is 200Mi.
+
false
+ + +### Instrumentation.spec.java.env[index] +[↩ Parent](#instrumentationspecjava) + + + +EnvVar represents an environment variable present in a Container. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
namestring + Name of the environment variable. Must be a C_IDENTIFIER.
+
true
valuestring + Variable references $(VAR_NAME) are expanded +using the previously defined environment variables in the container and +any service environment variables. If a variable cannot be resolved, +the reference in the input string will be unchanged. Double $$ are reduced +to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. +"$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". +Escaped references will never be expanded, regardless of whether the variable +exists or not. +Defaults to "".
+
false
valueFromobject + Source for the environment variable's value. Cannot be used if value is not empty.
+
false
+ + +### Instrumentation.spec.java.env[index].valueFrom +[↩ Parent](#instrumentationspecjavaenvindex) + + + +Source for the environment variable's value. Cannot be used if value is not empty. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
configMapKeyRefobject + Selects a key of a ConfigMap.
+
false
fieldRefobject + Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, +spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+
false
resourceFieldRefobject + Selects a resource of the container: only resources limits and requests +(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+
false
secretKeyRefobject + Selects a key of a secret in the pod's namespace
+
false
+ + +### Instrumentation.spec.java.env[index].valueFrom.configMapKeyRef +[↩ Parent](#instrumentationspecjavaenvindexvaluefrom) + + + +Selects a key of a ConfigMap. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
keystring + The key to select.
+
true
namestring + Name of the referent. +This field is effectively required, but due to backwards compatibility is +allowed to be empty. Instances of this type with an empty value here are +almost certainly wrong. +More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+
+ Default:
+
false
optionalboolean + Specify whether the ConfigMap or its key must be defined
+
false
+ + +### Instrumentation.spec.java.env[index].valueFrom.fieldRef +[↩ Parent](#instrumentationspecjavaenvindexvaluefrom) + + + +Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, +spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
fieldPathstring + Path of the field to select in the specified API version.
+
true
apiVersionstring + Version of the schema the FieldPath is written in terms of, defaults to "v1".
+
false
+ + +### Instrumentation.spec.java.env[index].valueFrom.resourceFieldRef +[↩ Parent](#instrumentationspecjavaenvindexvaluefrom) + + + +Selects a resource of the container: only resources limits and requests +(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
resourcestring + Required: resource to select
+
true
containerNamestring + Container name: required for volumes, optional for env vars
+
false
divisorint or string + Specifies the output format of the exposed resources, defaults to "1"
+
false
+ + +### Instrumentation.spec.java.env[index].valueFrom.secretKeyRef +[↩ Parent](#instrumentationspecjavaenvindexvaluefrom) + + + +Selects a key of a secret in the pod's namespace + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
keystring + The key of the secret to select from. Must be a valid secret key.
+
true
namestring + Name of the referent. +This field is effectively required, but due to backwards compatibility is +allowed to be empty. Instances of this type with an empty value here are +almost certainly wrong. +More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+
+ Default:
+
false
optionalboolean + Specify whether the Secret or its key must be defined
+
false
+ + +### Instrumentation.spec.java.extensions[index] +[↩ Parent](#instrumentationspecjava) + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
dirstring + Dir is a directory with extensions auto-instrumentation JAR.
+
true
imagestring + Image is a container image with extensions auto-instrumentation JAR.
+
true
+ + +### Instrumentation.spec.java.resources +[↩ Parent](#instrumentationspecjava) + + + +Resources describes the compute resource requirements. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
claims[]object + Claims lists the names of resources, defined in spec.resourceClaims, +that are used by this container. + +This is an alpha field and requires enabling the +DynamicResourceAllocation feature gate. + +This field is immutable. It can only be set for containers.
+
false
limitsmap[string]int or string + Limits describes the maximum amount of compute resources allowed. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
requestsmap[string]int or string + Requests describes the minimum amount of compute resources required. +If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, +otherwise to an implementation-defined value. Requests cannot exceed Limits. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
+ + +### Instrumentation.spec.java.resources.claims[index] +[↩ Parent](#instrumentationspecjavaresources) + + + +ResourceClaim references one entry in PodSpec.ResourceClaims. + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
namestring + Name must match the name of one entry in pod.spec.resourceClaims of +the Pod where this field is used. It makes that resource available +inside a container.
+
true
requeststring + Request is the name chosen for a request in the referenced claim. +If empty, everything from the claim is made available, otherwise +only the result of this request.
+
false
+ + +### Instrumentation.spec.java.volumeClaimTemplate +[↩ Parent](#instrumentationspecjava) + + + +VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
specobject + The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here.
+
true
metadataobject + May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation.
+
false
+ + +### Instrumentation.spec.java.volumeClaimTemplate.spec +[↩ Parent](#instrumentationspecjavavolumeclaimtemplate) + + + +The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
accessModes[]string + accessModes contains the desired access modes the volume should have. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+
false
dataSourceobject + dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+
false
dataSourceRefobject + dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects.
+
false
resourcesobject + resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+
false
selectorobject + selector is a label query over volumes to consider for binding.
+
false
storageClassNamestring + storageClassName is the name of the StorageClass required by the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+
false
volumeAttributesClassNamestring + volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. +If specified, the CSI driver will create or update the volume with the attributes defined +in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, +it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass +will be applied to the claim but it's not allowed to reset this field to empty string once it is set. +If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass +will be set by the persistentvolume controller if it exists. +If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be +set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource +exists. +More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ +(Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
+
false
volumeModestring + volumeMode defines what type of volume is required by the claim. +Value of Filesystem is implied when not included in claim spec.
+
false
volumeNamestring + volumeName is the binding reference to the PersistentVolume backing this claim.
+
false
+ + +### Instrumentation.spec.java.volumeClaimTemplate.spec.dataSource +[↩ Parent](#instrumentationspecjavavolumeclaimtemplatespec) + + + +dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
kindstring + Kind is the type of resource being referenced
+
true
namestring + Name is the name of resource being referenced
+
true
apiGroupstring + APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
+
false
+ + +### Instrumentation.spec.java.volumeClaimTemplate.spec.dataSourceRef +[↩ Parent](#instrumentationspecjavavolumeclaimtemplatespec) + + + +dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
kindstring + Kind is the type of resource being referenced
+
true
namestring + Name is the name of resource being referenced
+
true
apiGroupstring + APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
+
false
namespacestring + Namespace is the namespace of resource being referenced +Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. +(Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
+
false
+ + +### Instrumentation.spec.java.volumeClaimTemplate.spec.resources +[↩ Parent](#instrumentationspecjavavolumeclaimtemplatespec) + + + +resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
limitsmap[string]int or string + Limits describes the maximum amount of compute resources allowed. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
requestsmap[string]int or string + Requests describes the minimum amount of compute resources required. +If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, +otherwise to an implementation-defined value. Requests cannot exceed Limits. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
+ + +### Instrumentation.spec.java.volumeClaimTemplate.spec.selector +[↩ Parent](#instrumentationspecjavavolumeclaimtemplatespec) + + + +selector is a label query over volumes to consider for binding. + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
matchExpressions[]object + matchExpressions is a list of label selector requirements. The requirements are ANDed.
+
false
matchLabelsmap[string]string + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels +map is equivalent to an element of matchExpressions, whose key field is "key", the +operator is "In", and the values array contains only "value". The requirements are ANDed.
+
false
+ + +### Instrumentation.spec.java.volumeClaimTemplate.spec.selector.matchExpressions[index] +[↩ Parent](#instrumentationspecjavavolumeclaimtemplatespecselector) + + + +A label selector requirement is a selector that contains values, a key, and an operator that +relates the key and values. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
keystring + key is the label key that the selector applies to.
+
true
operatorstring + operator represents a key's relationship to a set of values. +Valid operators are In, NotIn, Exists and DoesNotExist.
+
true
values[]string + values is an array of string values. If the operator is In or NotIn, +the values array must be non-empty. If the operator is Exists or DoesNotExist, +the values array must be empty. This array is replaced during a strategic +merge patch.
+
false
+ + +### Instrumentation.spec.java.volumeClaimTemplate.metadata +[↩ Parent](#instrumentationspecjavavolumeclaimtemplate) + + + +May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
annotationsmap[string]string +
+
false
finalizers[]string +
+
false
labelsmap[string]string +
+
false
namestring +
+
false
namespacestring +
+
false
+ + +### Instrumentation.spec.nginx +[↩ Parent](#instrumentationspec) + + + +Nginx defines configuration for Nginx auto-instrumentation. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
attrs[]object + Attrs defines Nginx agent specific attributes. The precedence order is: +`agent default attributes` > `instrument spec attributes` . +Attributes are documented at https://github.com/open-telemetry/opentelemetry-cpp-contrib/tree/main/instrumentation/otel-webserver-module
+
false
configFilestring + Location of Nginx configuration file. +Needed only if different from default "/etx/nginx/nginx.conf"
+
false
env[]object + Env defines Nginx specific env vars. There are four layers for env vars' definitions and +the precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`. +If the former var had been defined, then the other vars would be ignored.
+
false
imagestring + Image is a container image with Nginx SDK and auto-instrumentation.
+
false
resourceRequirementsobject + Resources describes the compute resource requirements.
+
false
volumeClaimTemplateobject + VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit
+
false
volumeLimitSizeint or string + VolumeSizeLimit defines size limit for volume used for auto-instrumentation. +The default size is 200Mi.
+
false
+ + +### Instrumentation.spec.nginx.attrs[index] +[↩ Parent](#instrumentationspecnginx) + + + +EnvVar represents an environment variable present in a Container. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
namestring + Name of the environment variable. Must be a C_IDENTIFIER.
+
true
valuestring + Variable references $(VAR_NAME) are expanded +using the previously defined environment variables in the container and +any service environment variables. If a variable cannot be resolved, +the reference in the input string will be unchanged. Double $$ are reduced +to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. +"$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". +Escaped references will never be expanded, regardless of whether the variable +exists or not. +Defaults to "".
+
false
valueFromobject + Source for the environment variable's value. Cannot be used if value is not empty.
+
false
+ + +### Instrumentation.spec.nginx.attrs[index].valueFrom +[↩ Parent](#instrumentationspecnginxattrsindex) + + + +Source for the environment variable's value. Cannot be used if value is not empty. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
configMapKeyRefobject + Selects a key of a ConfigMap.
+
false
fieldRefobject + Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, +spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+
false
resourceFieldRefobject + Selects a resource of the container: only resources limits and requests +(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+
false
secretKeyRefobject + Selects a key of a secret in the pod's namespace
+
false
+ + +### Instrumentation.spec.nginx.attrs[index].valueFrom.configMapKeyRef +[↩ Parent](#instrumentationspecnginxattrsindexvaluefrom) + + + +Selects a key of a ConfigMap. + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
keystring + The key to select.
+
true
namestring + Name of the referent. +This field is effectively required, but due to backwards compatibility is +allowed to be empty. Instances of this type with an empty value here are +almost certainly wrong. +More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+
+ Default:
+
false
optionalboolean - Cert defines the key (e.g. tls.crt) of the client certificate in the secret or absolute path to a certificate. -The absolute path can be used when certificate is already present on the workload filesystem.
+ Specify whether the ConfigMap or its key must be defined
false
+ + +### Instrumentation.spec.nginx.attrs[index].valueFrom.fieldRef +[↩ Parent](#instrumentationspecnginxattrsindexvaluefrom) + + + +Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, +spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. + + + + + + + + + + + + + + + - + + +
NameTypeDescriptionRequired
fieldPathstring + Path of the field to select in the specified API version.
+
true
configMapNameapiVersion string - ConfigMapName defines configmap name with CA certificate. If it is not defined CA certificate will be -used from the secret defined in SecretName.
+ Version of the schema the FieldPath is written in terms of, defaults to "v1".
false
+ + +### Instrumentation.spec.nginx.attrs[index].valueFrom.resourceFieldRef +[↩ Parent](#instrumentationspecnginxattrsindexvaluefrom) + + + +Selects a resource of the container: only resources limits and requests +(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. + + + + + + + + + + + + + + + - + - - + +
NameTypeDescriptionRequired
resourcestring + Required: resource to select
+
true
key_filecontainerName string - Key defines a key (e.g. tls.key) of the private key in the secret or absolute path to a certificate. -The absolute path can be used when certificate is already present on the workload filesystem.
+ Container name: required for volumes, optional for env vars
false
secretNamestringdivisorint or string - SecretName defines secret name that will be used to configure TLS on the exporter. -It is user responsibility to create the secret in the namespace of the workload. -The secret must contain client certificate (Cert) and private key (Key). -The CA certificate might be defined in the secret or in the config map.
+ Specifies the output format of the exposed resources, defaults to "1"
false
-### Instrumentation.spec.go -[↩ Parent](#instrumentationspec) +### Instrumentation.spec.nginx.attrs[index].valueFrom.secretKeyRef +[↩ Parent](#instrumentationspecnginxattrsindexvaluefrom) -Go defines configuration for Go auto-instrumentation. -When using Go auto-instrumentation you must provide a value for the OTEL_GO_AUTO_TARGET_EXE env var via the -Instrumentation env vars or via the instrumentation.opentelemetry.io/otel-go-auto-target-exe pod annotation. -Failure to set this value causes instrumentation injection to abort, leaving the original pod unchanged. +Selects a key of a secret in the pod's namespace @@ -1725,42 +4774,38 @@ Failure to set this value causes instrumentation injection to abort, leaving the - - - - - - + - + - - + + - - + +
env[]object - Env defines Go specific env vars. There are four layers for env vars' definitions and -the precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`. -If the former var had been defined, then the other vars would be ignored.
-
false
imagekey string - Image is a container image with Go SDK and auto-instrumentation.
+ The key of the secret to select from. Must be a valid secret key.
falsetrue
resourceRequirementsobjectnamestring - Resources describes the compute resource requirements.
+ Name of the referent. +This field is effectively required, but due to backwards compatibility is +allowed to be empty. Instances of this type with an empty value here are +almost certainly wrong. +More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
+
+ Default:
false
volumeLimitSizeint or stringoptionalboolean - VolumeSizeLimit defines size limit for volume used for auto-instrumentation. -The default size is 200Mi.
+ Specify whether the Secret or its key must be defined
false
-### Instrumentation.spec.go.env[index] -[↩ Parent](#instrumentationspecgo) +### Instrumentation.spec.nginx.env[index] +[↩ Parent](#instrumentationspecnginx) @@ -1798,7 +4843,7 @@ Defaults to "".
false - valueFrom + valueFrom object Source for the environment variable's value. Cannot be used if value is not empty.
@@ -1808,8 +4853,8 @@ Defaults to "".
-### Instrumentation.spec.go.env[index].valueFrom -[↩ Parent](#instrumentationspecgoenvindex) +### Instrumentation.spec.nginx.env[index].valueFrom +[↩ Parent](#instrumentationspecnginxenvindex) @@ -1825,14 +4870,14 @@ Source for the environment variable's value. Cannot be used if value is not empt - configMapKeyRef + configMapKeyRef object Selects a key of a ConfigMap.
false - fieldRef + fieldRef object Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, @@ -1840,7 +4885,7 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI false - resourceFieldRef + resourceFieldRef object Selects a resource of the container: only resources limits and requests @@ -1848,7 +4893,7 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI false - secretKeyRef + secretKeyRef object Selects a key of a secret in the pod's namespace
@@ -1858,8 +4903,8 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI -### Instrumentation.spec.go.env[index].valueFrom.configMapKeyRef -[↩ Parent](#instrumentationspecgoenvindexvaluefrom) +### Instrumentation.spec.nginx.env[index].valueFrom.configMapKeyRef +[↩ Parent](#instrumentationspecnginxenvindexvaluefrom) @@ -1905,8 +4950,8 @@ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/nam -### Instrumentation.spec.go.env[index].valueFrom.fieldRef -[↩ Parent](#instrumentationspecgoenvindexvaluefrom) +### Instrumentation.spec.nginx.env[index].valueFrom.fieldRef +[↩ Parent](#instrumentationspecnginxenvindexvaluefrom) @@ -1940,8 +4985,8 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI -### Instrumentation.spec.go.env[index].valueFrom.resourceFieldRef -[↩ Parent](#instrumentationspecgoenvindexvaluefrom) +### Instrumentation.spec.nginx.env[index].valueFrom.resourceFieldRef +[↩ Parent](#instrumentationspecnginxenvindexvaluefrom) @@ -1982,8 +5027,8 @@ Selects a resource of the container: only resources limits and requests -### Instrumentation.spec.go.env[index].valueFrom.secretKeyRef -[↩ Parent](#instrumentationspecgoenvindexvaluefrom) +### Instrumentation.spec.nginx.env[index].valueFrom.secretKeyRef +[↩ Parent](#instrumentationspecnginxenvindexvaluefrom) @@ -2029,8 +5074,8 @@ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/nam -### Instrumentation.spec.go.resourceRequirements -[↩ Parent](#instrumentationspecgo) +### Instrumentation.spec.nginx.resourceRequirements +[↩ Parent](#instrumentationspecnginx) @@ -2046,7 +5091,7 @@ Resources describes the compute resource requirements. - claims + claims []object Claims lists the names of resources, defined in spec.resourceClaims, @@ -2080,8 +5125,8 @@ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-co -### Instrumentation.spec.go.resourceRequirements.claims[index] -[↩ Parent](#instrumentationspecgoresourcerequirements) +### Instrumentation.spec.nginx.resourceRequirements.claims[index] +[↩ Parent](#instrumentationspecnginxresourcerequirements) @@ -2118,12 +5163,13 @@ only the result of this request.
-### Instrumentation.spec.java -[↩ Parent](#instrumentationspec) +### Instrumentation.spec.nginx.volumeClaimTemplate +[↩ Parent](#instrumentationspecnginx) -Java defines configuration for java auto-instrumentation. +VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit @@ -2135,103 +5181,37 @@ Java defines configuration for java auto-instrumentation. - - - - - - - - - - - - - - - - + - - - - - - - -
env[]object - Env defines java specific env vars. There are four layers for env vars' definitions and -the precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`. -If the former var had been defined, then the other vars would be ignored.
-
false
extensions[]object - Extensions defines java specific extensions. -All extensions are copied to a single directory; if a JAR with the same name exists, it will be overwritten.
-
false
imagestring - Image is a container image with javaagent auto-instrumentation JAR.
-
false
resourcesspec object - Resources describes the compute resource requirements.
-
false
volumeLimitSizeint or string - VolumeSizeLimit defines size limit for volume used for auto-instrumentation. -The default size is 200Mi.
-
false
- - -### Instrumentation.spec.java.env[index] -[↩ Parent](#instrumentationspecjava) - - - -EnvVar represents an environment variable present in a Container. - - - - - - - - - - - - - - - - - - - - + - +
NameTypeDescriptionRequired
namestring - Name of the environment variable. Must be a C_IDENTIFIER.
-
true
valuestring - Variable references $(VAR_NAME) are expanded -using the previously defined environment variables in the container and -any service environment variables. If a variable cannot be resolved, -the reference in the input string will be unchanged. Double $$ are reduced -to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. -"$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". -Escaped references will never be expanded, regardless of whether the variable -exists or not. -Defaults to "".
+ The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here.
falsetrue
valueFrommetadata object - Source for the environment variable's value. Cannot be used if value is not empty.
+ May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation.
false
-### Instrumentation.spec.java.env[index].valueFrom -[↩ Parent](#instrumentationspecjavaenvindex) +### Instrumentation.spec.nginx.volumeClaimTemplate.spec +[↩ Parent](#instrumentationspecnginxvolumeclaimtemplate) -Source for the environment variable's value. Cannot be used if value is not empty. +The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here. @@ -2243,93 +5223,125 @@ Source for the environment variable's value. Cannot be used if value is not empt - + + + + + + - + - + - + - -
configMapKeyRefaccessModes[]string + accessModes contains the desired access modes the volume should have. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+
false
dataSource object - Selects a key of a ConfigMap.
+ dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource.
false
fieldRefdataSourceRef object - Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, -spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects.
false
resourceFieldRefresources object - Selects a resource of the container: only resources limits and requests -(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+ resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
false
secretKeyRefselector object - Selects a key of a secret in the pod's namespace
+ selector is a label query over volumes to consider for binding.
false
- - -### Instrumentation.spec.java.env[index].valueFrom.configMapKeyRef -[↩ Parent](#instrumentationspecjavaenvindexvaluefrom) - - - -Selects a key of a ConfigMap. - - - - - - - - - - - - + + - + - + - - + + + + + + +
NameTypeDescriptionRequired
key
storageClassName string - The key to select.
+ storageClassName is the name of the StorageClass required by the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
truefalse
namevolumeAttributesClassName string - Name of the referent. -This field is effectively required, but due to backwards compatibility is -allowed to be empty. Instances of this type with an empty value here are -almost certainly wrong. -More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-
- Default:
+ volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. +If specified, the CSI driver will create or update the volume with the attributes defined +in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, +it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass +will be applied to the claim but it's not allowed to reset this field to empty string once it is set. +If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass +will be set by the persistentvolume controller if it exists. +If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be +set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource +exists. +More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ +(Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
false
optionalbooleanvolumeModestring - Specify whether the ConfigMap or its key must be defined
+ volumeMode defines what type of volume is required by the claim. +Value of Filesystem is implied when not included in claim spec.
+
false
volumeNamestring + volumeName is the binding reference to the PersistentVolume backing this claim.
false
-### Instrumentation.spec.java.env[index].valueFrom.fieldRef -[↩ Parent](#instrumentationspecjavaenvindexvaluefrom) +### Instrumentation.spec.nginx.volumeClaimTemplate.spec.dataSource +[↩ Parent](#instrumentationspecnginxvolumeclaimtemplatespec) -Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, -spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. +dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource. @@ -2341,30 +5353,53 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI - + - + + + + + +
fieldPathkind string - Path of the field to select in the specified API version.
+ Kind is the type of resource being referenced
true
apiVersionname string - Version of the schema the FieldPath is written in terms of, defaults to "v1".
+ Name is the name of resource being referenced
+
true
apiGroupstring + APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
false
-### Instrumentation.spec.java.env[index].valueFrom.resourceFieldRef -[↩ Parent](#instrumentationspecjavaenvindexvaluefrom) +### Instrumentation.spec.nginx.volumeClaimTemplate.spec.dataSourceRef +[↩ Parent](#instrumentationspecnginxvolumeclaimtemplatespec) -Selects a resource of the container: only resources limits and requests -(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. +dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects. @@ -2376,36 +5411,51 @@ Selects a resource of the container: only resources limits and requests - + - + + + + + + - - + +
resourcekind string - Required: resource to select
+ Kind is the type of resource being referenced
true
containerNamename string - Container name: required for volumes, optional for env vars
+ Name is the name of resource being referenced
+
true
apiGroupstring + APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
false
divisorint or stringnamespacestring - Specifies the output format of the exposed resources, defaults to "1"
+ Namespace is the namespace of resource being referenced +Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. +(Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
false
-### Instrumentation.spec.java.env[index].valueFrom.secretKeyRef -[↩ Parent](#instrumentationspecjavaenvindexvaluefrom) +### Instrumentation.spec.nginx.volumeClaimTemplate.spec.resources +[↩ Parent](#instrumentationspecnginxvolumeclaimtemplatespec) -Selects a key of a secret in the pod's namespace +resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources @@ -2417,42 +5467,33 @@ Selects a key of a secret in the pod's namespace - - - - - - - + + - - + +
keystring - The key of the secret to select from. Must be a valid secret key.
-
true
namestringlimitsmap[string]int or string - Name of the referent. -This field is effectively required, but due to backwards compatibility is -allowed to be empty. Instances of this type with an empty value here are -almost certainly wrong. -More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-
- Default:
+ Limits describes the maximum amount of compute resources allowed. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
false
optionalbooleanrequestsmap[string]int or string - Specify whether the Secret or its key must be defined
+ Requests describes the minimum amount of compute resources required. +If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, +otherwise to an implementation-defined value. Requests cannot exceed Limits. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
false
-### Instrumentation.spec.java.extensions[index] -[↩ Parent](#instrumentationspecjava) - +### Instrumentation.spec.nginx.volumeClaimTemplate.spec.selector +[↩ Parent](#instrumentationspecnginxvolumeclaimtemplatespec) +selector is a label query over volumes to consider for binding. @@ -2464,29 +5505,32 @@ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/nam - - + + - + - - + + - +
dirstringmatchExpressions[]object - Dir is a directory with extensions auto-instrumentation JAR.
+ matchExpressions is a list of label selector requirements. The requirements are ANDed.
truefalse
imagestringmatchLabelsmap[string]string - Image is a container image with extensions auto-instrumentation JAR.
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels +map is equivalent to an element of matchExpressions, whose key field is "key", the +operator is "In", and the values array contains only "value". The requirements are ANDed.
truefalse
-### Instrumentation.spec.java.resources -[↩ Parent](#instrumentationspecjava) +### Instrumentation.spec.nginx.volumeClaimTemplate.spec.selector.matchExpressions[index] +[↩ Parent](#instrumentationspecnginxvolumeclaimtemplatespecselector) -Resources describes the compute resource requirements. +A label selector requirement is a selector that contains values, a key, and an operator that +relates the key and values. @@ -2498,46 +5542,42 @@ Resources describes the compute resource requirements. - - + + - + - - + + - + - - + +
claims[]objectkeystring - Claims lists the names of resources, defined in spec.resourceClaims, -that are used by this container. - -This is an alpha field and requires enabling the -DynamicResourceAllocation feature gate. - -This field is immutable. It can only be set for containers.
+ key is the label key that the selector applies to.
falsetrue
limitsmap[string]int or stringoperatorstring - Limits describes the maximum amount of compute resources allowed. -More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ operator represents a key's relationship to a set of values. +Valid operators are In, NotIn, Exists and DoesNotExist.
falsetrue
requestsmap[string]int or stringvalues[]string - Requests describes the minimum amount of compute resources required. -If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, -otherwise to an implementation-defined value. Requests cannot exceed Limits. -More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ values is an array of string values. If the operator is In or NotIn, +the values array must be non-empty. If the operator is Exists or DoesNotExist, +the values array must be empty. This array is replaced during a strategic +merge patch.
false
-### Instrumentation.spec.java.resources.claims[index] -[↩ Parent](#instrumentationspecjavaresources) +### Instrumentation.spec.nginx.volumeClaimTemplate.metadata +[↩ Parent](#instrumentationspecnginxvolumeclaimtemplate) -ResourceClaim references one entry in PodSpec.ResourceClaims. +May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation. @@ -2549,33 +5589,50 @@ ResourceClaim references one entry in PodSpec.ResourceClaims. + + + + + + + + + + + + + + + - + - +
annotationsmap[string]string +
+
false
finalizers[]string +
+
false
labelsmap[string]string +
+
false
name string - Name must match the name of one entry in pod.spec.resourceClaims of -the Pod where this field is used. It makes that resource available -inside a container.
+
truefalse
requestnamespace string - Request is the name chosen for a request in the referenced claim. -If empty, everything from the claim is made available, otherwise -only the result of this request.
+
false
-### Instrumentation.spec.nginx +### Instrumentation.spec.nodejs [↩ Parent](#instrumentationspec) -Nginx defines configuration for Nginx auto-instrumentation. +NodeJS defines configuration for nodejs auto-instrumentation. @@ -2587,27 +5644,10 @@ Nginx defines configuration for Nginx auto-instrumentation. - - - - - - - - - - - + @@ -2616,16 +5656,24 @@ If the former var had been defined, then the other vars would be ignored.
- + + + + + + @@ -2638,8 +5686,8 @@ The default size is 200Mi.
attrs[]object - Attrs defines Nginx agent specific attributes. The precedence order is: -`agent default attributes` > `instrument spec attributes` . -Attributes are documented at https://github.com/open-telemetry/opentelemetry-cpp-contrib/tree/main/instrumentation/otel-webserver-module
-
false
configFilestring - Location of Nginx configuration file. -Needed only if different from default "/etx/nginx/nginx.conf"
-
false
envenv []object - Env defines Nginx specific env vars. There are four layers for env vars' definitions and + Env defines nodejs specific env vars. There are four layers for env vars' definitions and the precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`. If the former var had been defined, then the other vars would be ignored.
image string - Image is a container image with Nginx SDK and auto-instrumentation.
+ Image is a container image with NodeJS SDK and auto-instrumentation.
false
resourceRequirementsresourceRequirements object Resources describes the compute resource requirements.
false
volumeClaimTemplateobject + VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit
+
false
volumeLimitSize int or string
-### Instrumentation.spec.nginx.attrs[index] -[↩ Parent](#instrumentationspecnginx) +### Instrumentation.spec.nodejs.env[index] +[↩ Parent](#instrumentationspecnodejs) @@ -2677,7 +5725,7 @@ Defaults to "".
false - valueFrom + valueFrom object Source for the environment variable's value. Cannot be used if value is not empty.
@@ -2687,8 +5735,8 @@ Defaults to "".
-### Instrumentation.spec.nginx.attrs[index].valueFrom -[↩ Parent](#instrumentationspecnginxattrsindex) +### Instrumentation.spec.nodejs.env[index].valueFrom +[↩ Parent](#instrumentationspecnodejsenvindex) @@ -2704,14 +5752,14 @@ Source for the environment variable's value. Cannot be used if value is not empt - configMapKeyRef + configMapKeyRef object Selects a key of a ConfigMap.
false - fieldRef + fieldRef object Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, @@ -2719,7 +5767,7 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI false - resourceFieldRef + resourceFieldRef object Selects a resource of the container: only resources limits and requests @@ -2727,7 +5775,7 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI false - secretKeyRef + secretKeyRef object Selects a key of a secret in the pod's namespace
@@ -2737,8 +5785,8 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI -### Instrumentation.spec.nginx.attrs[index].valueFrom.configMapKeyRef -[↩ Parent](#instrumentationspecnginxattrsindexvaluefrom) +### Instrumentation.spec.nodejs.env[index].valueFrom.configMapKeyRef +[↩ Parent](#instrumentationspecnodejsenvindexvaluefrom) @@ -2784,8 +5832,8 @@ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/nam -### Instrumentation.spec.nginx.attrs[index].valueFrom.fieldRef -[↩ Parent](#instrumentationspecnginxattrsindexvaluefrom) +### Instrumentation.spec.nodejs.env[index].valueFrom.fieldRef +[↩ Parent](#instrumentationspecnodejsenvindexvaluefrom) @@ -2819,8 +5867,8 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI -### Instrumentation.spec.nginx.attrs[index].valueFrom.resourceFieldRef -[↩ Parent](#instrumentationspecnginxattrsindexvaluefrom) +### Instrumentation.spec.nodejs.env[index].valueFrom.resourceFieldRef +[↩ Parent](#instrumentationspecnodejsenvindexvaluefrom) @@ -2861,8 +5909,8 @@ Selects a resource of the container: only resources limits and requests -### Instrumentation.spec.nginx.attrs[index].valueFrom.secretKeyRef -[↩ Parent](#instrumentationspecnginxattrsindexvaluefrom) +### Instrumentation.spec.nodejs.env[index].valueFrom.secretKeyRef +[↩ Parent](#instrumentationspecnodejsenvindexvaluefrom) @@ -2908,12 +5956,63 @@ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/nam -### Instrumentation.spec.nginx.env[index] -[↩ Parent](#instrumentationspecnginx) +### Instrumentation.spec.nodejs.resourceRequirements +[↩ Parent](#instrumentationspecnodejs) -EnvVar represents an environment variable present in a Container. +Resources describes the compute resource requirements. + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescriptionRequired
claims[]object + Claims lists the names of resources, defined in spec.resourceClaims, +that are used by this container. + +This is an alpha field and requires enabling the +DynamicResourceAllocation feature gate. + +This field is immutable. It can only be set for containers.
+
false
limitsmap[string]int or string + Limits describes the maximum amount of compute resources allowed. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
requestsmap[string]int or string + Requests describes the minimum amount of compute resources required. +If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, +otherwise to an implementation-defined value. Requests cannot exceed Limits. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
+ + +### Instrumentation.spec.nodejs.resourceRequirements.claims[index] +[↩ Parent](#instrumentationspecnodejsresourcerequirements) + + + +ResourceClaim references one entry in PodSpec.ResourceClaims. @@ -2928,41 +6027,73 @@ EnvVar represents an environment variable present in a Container. - + + +
name string - Name of the environment variable. Must be a C_IDENTIFIER.
+ Name must match the name of one entry in pod.spec.resourceClaims of +the Pod where this field is used. It makes that resource available +inside a container.
true
valuerequest string - Variable references $(VAR_NAME) are expanded -using the previously defined environment variables in the container and -any service environment variables. If a variable cannot be resolved, -the reference in the input string will be unchanged. Double $$ are reduced -to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. -"$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". -Escaped references will never be expanded, regardless of whether the variable -exists or not. -Defaults to "".
+ Request is the name chosen for a request in the referenced claim. +If empty, everything from the claim is made available, otherwise +only the result of this request.
false
+ + +### Instrumentation.spec.nodejs.volumeClaimTemplate +[↩ Parent](#instrumentationspecnodejs) + + + +VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit + + + + + + + + + + + + + + + - +
NameTypeDescriptionRequired
specobject + The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here.
+
true
valueFrommetadata object - Source for the environment variable's value. Cannot be used if value is not empty.
+ May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation.
false
-### Instrumentation.spec.nginx.env[index].valueFrom -[↩ Parent](#instrumentationspecnginxenvindex) +### Instrumentation.spec.nodejs.volumeClaimTemplate.spec +[↩ Parent](#instrumentationspecnodejsvolumeclaimtemplate) -Source for the environment variable's value. Cannot be used if value is not empty. +The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here. @@ -2974,45 +6105,125 @@ Source for the environment variable's value. Cannot be used if value is not empt - + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + +
configMapKeyRefaccessModes[]string + accessModes contains the desired access modes the volume should have. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+
false
dataSource object - Selects a key of a ConfigMap.
+ dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource.
false
fieldRefdataSourceRef object - Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, -spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects.
false
resourceFieldRefresources object - Selects a resource of the container: only resources limits and requests -(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+ resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
false
secretKeyRefselector object - Selects a key of a secret in the pod's namespace
+ selector is a label query over volumes to consider for binding.
+
false
storageClassNamestring + storageClassName is the name of the StorageClass required by the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
+
false
volumeAttributesClassNamestring + volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. +If specified, the CSI driver will create or update the volume with the attributes defined +in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, +it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass +will be applied to the claim but it's not allowed to reset this field to empty string once it is set. +If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass +will be set by the persistentvolume controller if it exists. +If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be +set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource +exists. +More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ +(Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
+
false
volumeModestring + volumeMode defines what type of volume is required by the claim. +Value of Filesystem is implied when not included in claim spec.
+
false
volumeNamestring + volumeName is the binding reference to the PersistentVolume backing this claim.
false
-### Instrumentation.spec.nginx.env[index].valueFrom.configMapKeyRef -[↩ Parent](#instrumentationspecnginxenvindexvaluefrom) +### Instrumentation.spec.nodejs.volumeClaimTemplate.spec.dataSource +[↩ Parent](#instrumentationspecnodejsvolumeclaimtemplatespec) -Selects a key of a ConfigMap. +dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource. @@ -3024,43 +6235,53 @@ Selects a key of a ConfigMap. - + - + - - + +
keykind string - The key to select.
+ Kind is the type of resource being referenced
true
name string - Name of the referent. -This field is effectively required, but due to backwards compatibility is -allowed to be empty. Instances of this type with an empty value here are -almost certainly wrong. -More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-
- Default:
+ Name is the name of resource being referenced
falsetrue
optionalbooleanapiGroupstring - Specify whether the ConfigMap or its key must be defined
+ APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
false
-### Instrumentation.spec.nginx.env[index].valueFrom.fieldRef -[↩ Parent](#instrumentationspecnginxenvindexvaluefrom) +### Instrumentation.spec.nodejs.volumeClaimTemplate.spec.dataSourceRef +[↩ Parent](#instrumentationspecnodejsvolumeclaimtemplatespec) -Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, -spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. +dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects. @@ -3072,30 +6293,51 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI - + - + + + + + + + + + + +
fieldPathkind string - Path of the field to select in the specified API version.
+ Kind is the type of resource being referenced
true
apiVersionname string - Version of the schema the FieldPath is written in terms of, defaults to "v1".
+ Name is the name of resource being referenced
+
true
apiGroupstring + APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
+
false
namespacestring + Namespace is the namespace of resource being referenced +Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. +(Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
false
-### Instrumentation.spec.nginx.env[index].valueFrom.resourceFieldRef -[↩ Parent](#instrumentationspecnginxenvindexvaluefrom) +### Instrumentation.spec.nodejs.volumeClaimTemplate.spec.resources +[↩ Parent](#instrumentationspecnodejsvolumeclaimtemplatespec) -Selects a resource of the container: only resources limits and requests -(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. +resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources @@ -3107,36 +6349,33 @@ Selects a resource of the container: only resources limits and requests - - - - - - - + + - - + +
resourcestring - Required: resource to select
-
true
containerNamestringlimitsmap[string]int or string - Container name: required for volumes, optional for env vars
+ Limits describes the maximum amount of compute resources allowed. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
false
divisorint or stringrequestsmap[string]int or string - Specifies the output format of the exposed resources, defaults to "1"
+ Requests describes the minimum amount of compute resources required. +If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, +otherwise to an implementation-defined value. Requests cannot exceed Limits. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
false
-### Instrumentation.spec.nginx.env[index].valueFrom.secretKeyRef -[↩ Parent](#instrumentationspecnginxenvindexvaluefrom) +### Instrumentation.spec.nodejs.volumeClaimTemplate.spec.selector +[↩ Parent](#instrumentationspecnodejsvolumeclaimtemplatespec) -Selects a key of a secret in the pod's namespace +selector is a label query over volumes to consider for binding. @@ -3148,42 +6387,32 @@ Selects a key of a secret in the pod's namespace - - - - - - - + + - - + +
keystring - The key of the secret to select from. Must be a valid secret key.
-
true
namestringmatchExpressions[]object - Name of the referent. -This field is effectively required, but due to backwards compatibility is -allowed to be empty. Instances of this type with an empty value here are -almost certainly wrong. -More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-
- Default:
+ matchExpressions is a list of label selector requirements. The requirements are ANDed.
false
optionalbooleanmatchLabelsmap[string]string - Specify whether the Secret or its key must be defined
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels +map is equivalent to an element of matchExpressions, whose key field is "key", the +operator is "In", and the values array contains only "value". The requirements are ANDed.
false
-### Instrumentation.spec.nginx.resourceRequirements -[↩ Parent](#instrumentationspecnginx) +### Instrumentation.spec.nodejs.volumeClaimTemplate.spec.selector.matchExpressions[index] +[↩ Parent](#instrumentationspecnodejsvolumeclaimtemplatespecselector) -Resources describes the compute resource requirements. +A label selector requirement is a selector that contains values, a key, and an operator that +relates the key and values. @@ -3195,46 +6424,42 @@ Resources describes the compute resource requirements. - - - + + - + - - + + - + - - + +
claims[]object - Claims lists the names of resources, defined in spec.resourceClaims, -that are used by this container. - -This is an alpha field and requires enabling the -DynamicResourceAllocation feature gate. - -This field is immutable. It can only be set for containers.
+
keystring + key is the label key that the selector applies to.
falsetrue
limitsmap[string]int or stringoperatorstring - Limits describes the maximum amount of compute resources allowed. -More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ operator represents a key's relationship to a set of values. +Valid operators are In, NotIn, Exists and DoesNotExist.
falsetrue
requestsmap[string]int or stringvalues[]string - Requests describes the minimum amount of compute resources required. -If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, -otherwise to an implementation-defined value. Requests cannot exceed Limits. -More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+ values is an array of string values. If the operator is In or NotIn, +the values array must be non-empty. If the operator is Exists or DoesNotExist, +the values array must be empty. This array is replaced during a strategic +merge patch.
false
-### Instrumentation.spec.nginx.resourceRequirements.claims[index] -[↩ Parent](#instrumentationspecnginxresourcerequirements) +### Instrumentation.spec.nodejs.volumeClaimTemplate.metadata +[↩ Parent](#instrumentationspecnodejsvolumeclaimtemplate) -ResourceClaim references one entry in PodSpec.ResourceClaims. +May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation. @@ -3246,33 +6471,50 @@ ResourceClaim references one entry in PodSpec.ResourceClaims. + + + + + + + + + + + + + + + - + - +
annotationsmap[string]string +
+
false
finalizers[]string +
+
false
labelsmap[string]string +
+
false
name string - Name must match the name of one entry in pod.spec.resourceClaims of -the Pod where this field is used. It makes that resource available -inside a container.
+
truefalse
requestnamespace string - Request is the name chosen for a request in the referenced claim. -If empty, everything from the claim is made available, otherwise -only the result of this request.
+
false
-### Instrumentation.spec.nodejs +### Instrumentation.spec.python [↩ Parent](#instrumentationspec) -NodeJS defines configuration for nodejs auto-instrumentation. +Python defines configuration for python auto-instrumentation. @@ -3284,10 +6526,10 @@ NodeJS defines configuration for nodejs auto-instrumentation. - + @@ -3296,16 +6538,24 @@ If the former var had been defined, then the other vars would be ignored.
- + + + + + + @@ -3318,8 +6568,8 @@ The default size is 200Mi.
envenv []object - Env defines nodejs specific env vars. There are four layers for env vars' definitions and + Env defines python specific env vars. There are four layers for env vars' definitions and the precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`. If the former var had been defined, then the other vars would be ignored.
image string - Image is a container image with NodeJS SDK and auto-instrumentation.
+ Image is a container image with Python SDK and auto-instrumentation.
false
resourceRequirementsresourceRequirements object Resources describes the compute resource requirements.
false
volumeClaimTemplateobject + VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit
+
false
volumeLimitSize int or string
-### Instrumentation.spec.nodejs.env[index] -[↩ Parent](#instrumentationspecnodejs) +### Instrumentation.spec.python.env[index] +[↩ Parent](#instrumentationspecpython) @@ -3357,7 +6607,7 @@ Defaults to "".
false - valueFrom + valueFrom object Source for the environment variable's value. Cannot be used if value is not empty.
@@ -3367,8 +6617,8 @@ Defaults to "".
-### Instrumentation.spec.nodejs.env[index].valueFrom -[↩ Parent](#instrumentationspecnodejsenvindex) +### Instrumentation.spec.python.env[index].valueFrom +[↩ Parent](#instrumentationspecpythonenvindex) @@ -3384,14 +6634,14 @@ Source for the environment variable's value. Cannot be used if value is not empt - configMapKeyRef + configMapKeyRef object Selects a key of a ConfigMap.
false - fieldRef + fieldRef object Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, @@ -3399,7 +6649,7 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI false - resourceFieldRef + resourceFieldRef object Selects a resource of the container: only resources limits and requests @@ -3407,7 +6657,7 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI false - secretKeyRef + secretKeyRef object Selects a key of a secret in the pod's namespace
@@ -3417,8 +6667,8 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI -### Instrumentation.spec.nodejs.env[index].valueFrom.configMapKeyRef -[↩ Parent](#instrumentationspecnodejsenvindexvaluefrom) +### Instrumentation.spec.python.env[index].valueFrom.configMapKeyRef +[↩ Parent](#instrumentationspecpythonenvindexvaluefrom) @@ -3464,8 +6714,8 @@ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/nam -### Instrumentation.spec.nodejs.env[index].valueFrom.fieldRef -[↩ Parent](#instrumentationspecnodejsenvindexvaluefrom) +### Instrumentation.spec.python.env[index].valueFrom.fieldRef +[↩ Parent](#instrumentationspecpythonenvindexvaluefrom) @@ -3499,8 +6749,8 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI -### Instrumentation.spec.nodejs.env[index].valueFrom.resourceFieldRef -[↩ Parent](#instrumentationspecnodejsenvindexvaluefrom) +### Instrumentation.spec.python.env[index].valueFrom.resourceFieldRef +[↩ Parent](#instrumentationspecpythonenvindexvaluefrom) @@ -3541,8 +6791,8 @@ Selects a resource of the container: only resources limits and requests -### Instrumentation.spec.nodejs.env[index].valueFrom.secretKeyRef -[↩ Parent](#instrumentationspecnodejsenvindexvaluefrom) +### Instrumentation.spec.python.env[index].valueFrom.secretKeyRef +[↩ Parent](#instrumentationspecpythonenvindexvaluefrom) @@ -3588,8 +6838,8 @@ More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/nam -### Instrumentation.spec.nodejs.resourceRequirements -[↩ Parent](#instrumentationspecnodejs) +### Instrumentation.spec.python.resourceRequirements +[↩ Parent](#instrumentationspecpython) @@ -3605,7 +6855,7 @@ Resources describes the compute resource requirements. - claims + claims []object Claims lists the names of resources, defined in spec.resourceClaims, @@ -3639,8 +6889,8 @@ More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-co -### Instrumentation.spec.nodejs.resourceRequirements.claims[index] -[↩ Parent](#instrumentationspecnodejsresourcerequirements) +### Instrumentation.spec.python.resourceRequirements.claims[index] +[↩ Parent](#instrumentationspecpythonresourcerequirements) @@ -3677,12 +6927,13 @@ only the result of this request.
-### Instrumentation.spec.python -[↩ Parent](#instrumentationspec) +### Instrumentation.spec.python.volumeClaimTemplate +[↩ Parent](#instrumentationspecpython) -Python defines configuration for python auto-instrumentation. +VolumeClaimTemplate defines a ephemeral volume used for auto-instrumentation. +If omitted, an emptyDir is used with size limit VolumeSizeLimit @@ -3694,46 +6945,37 @@ Python defines configuration for python auto-instrumentation. - - - - - - - - - - - + - + - - + +
env[]object - Env defines python specific env vars. There are four layers for env vars' definitions and -the precedence order is: `original container env vars` > `language specific env vars` > `common env vars` > `instrument spec configs' vars`. -If the former var had been defined, then the other vars would be ignored.
-
false
imagestring - Image is a container image with Python SDK and auto-instrumentation.
-
false
resourceRequirementsspec object - Resources describes the compute resource requirements.
+ The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here.
falsetrue
volumeLimitSizeint or stringmetadataobject - VolumeSizeLimit defines size limit for volume used for auto-instrumentation. -The default size is 200Mi.
+ May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation.
false
-### Instrumentation.spec.python.env[index] -[↩ Parent](#instrumentationspecpython) +### Instrumentation.spec.python.volumeClaimTemplate.spec +[↩ Parent](#instrumentationspecpythonvolumeclaimtemplate) -EnvVar represents an environment variable present in a Container. +The specification for the PersistentVolumeClaim. The entire content is +copied unchanged into the PVC that gets created from this +template. The same fields as in a PersistentVolumeClaim +are also valid here. @@ -3745,44 +6987,125 @@ EnvVar represents an environment variable present in a Container. - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + + + + + +
nameaccessModes[]string + accessModes contains the desired access modes the volume should have. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
+
false
dataSourceobject + dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource.
+
false
dataSourceRefobject + dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects.
+
false
resourcesobject + resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
+
false
selectorobject + selector is a label query over volumes to consider for binding.
+
false
storageClassName string - Name of the environment variable. Must be a C_IDENTIFIER.
+ storageClassName is the name of the StorageClass required by the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#class-1
truefalse
valuevolumeAttributesClassName string - Variable references $(VAR_NAME) are expanded -using the previously defined environment variables in the container and -any service environment variables. If a variable cannot be resolved, -the reference in the input string will be unchanged. Double $$ are reduced -to a single $, which allows for escaping the $(VAR_NAME) syntax: i.e. -"$$(VAR_NAME)" will produce the string literal "$(VAR_NAME)". -Escaped references will never be expanded, regardless of whether the variable -exists or not. -Defaults to "".
+ volumeAttributesClassName may be used to set the VolumeAttributesClass used by this claim. +If specified, the CSI driver will create or update the volume with the attributes defined +in the corresponding VolumeAttributesClass. This has a different purpose than storageClassName, +it can be changed after the claim is created. An empty string value means that no VolumeAttributesClass +will be applied to the claim but it's not allowed to reset this field to empty string once it is set. +If unspecified and the PersistentVolumeClaim is unbound, the default VolumeAttributesClass +will be set by the persistentvolume controller if it exists. +If the resource referred to by volumeAttributesClass does not exist, this PersistentVolumeClaim will be +set to a Pending state, as reflected by the modifyVolumeStatus field, until such as a resource +exists. +More info: https://kubernetes.io/docs/concepts/storage/volume-attributes-classes/ +(Beta) Using this field requires the VolumeAttributesClass feature gate to be enabled (off by default).
false
valueFromobjectvolumeModestring - Source for the environment variable's value. Cannot be used if value is not empty.
+ volumeMode defines what type of volume is required by the claim. +Value of Filesystem is implied when not included in claim spec.
+
false
volumeNamestring + volumeName is the binding reference to the PersistentVolume backing this claim.
false
-### Instrumentation.spec.python.env[index].valueFrom -[↩ Parent](#instrumentationspecpythonenvindex) +### Instrumentation.spec.python.volumeClaimTemplate.spec.dataSource +[↩ Parent](#instrumentationspecpythonvolumeclaimtemplatespec) -Source for the environment variable's value. Cannot be used if value is not empty. +dataSource field can be used to specify either: +* An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot) +* An existing PVC (PersistentVolumeClaim) +If the provisioner or an external controller can support the specified data source, +it will create a new volume based on the contents of the specified data source. +When the AnyVolumeDataSource feature gate is enabled, dataSource contents will be copied to dataSourceRef, +and dataSourceRef contents will be copied to dataSource when dataSourceRef.namespace is not specified. +If the namespace is specified, then dataSourceRef will not be copied to dataSource. @@ -3794,45 +7117,53 @@ Source for the environment variable's value. Cannot be used if value is not empt - - - - - - - + + - + - - + + - + - - + +
configMapKeyRefobject - Selects a key of a ConfigMap.
-
false
fieldRefobjectkindstring - Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, -spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
+ Kind is the type of resource being referenced
falsetrue
resourceFieldRefobjectnamestring - Selects a resource of the container: only resources limits and requests -(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
+ Name is the name of resource being referenced
falsetrue
secretKeyRefobjectapiGroupstring - Selects a key of a secret in the pod's namespace
+ APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
false
-### Instrumentation.spec.python.env[index].valueFrom.configMapKeyRef -[↩ Parent](#instrumentationspecpythonenvindexvaluefrom) +### Instrumentation.spec.python.volumeClaimTemplate.spec.dataSourceRef +[↩ Parent](#instrumentationspecpythonvolumeclaimtemplatespec) -Selects a key of a ConfigMap. +dataSourceRef specifies the object from which to populate the volume with data, if a non-empty +volume is desired. This may be any object from a non-empty API group (non +core object) or a PersistentVolumeClaim object. +When this field is specified, volume binding will only succeed if the type of +the specified object matches some installed volume populator or dynamic +provisioner. +This field will replace the functionality of the dataSource field and as such +if both fields are non-empty, they must have the same value. For backwards +compatibility, when namespace isn't specified in dataSourceRef, +both fields (dataSource and dataSourceRef) will be set to the same +value automatically if one of them is empty and the other is non-empty. +When namespace is specified in dataSourceRef, +dataSource isn't set to the same value and must be empty. +There are three important differences between dataSource and dataSourceRef: +* While dataSource only allows two specific types of objects, dataSourceRef + allows any non-core object, as well as PersistentVolumeClaim objects. @@ -3844,43 +7175,51 @@ Selects a key of a ConfigMap. - + + + + + + - - + +
keykind string - The key to select.
+ Kind is the type of resource being referenced
true
name string - Name of the referent. -This field is effectively required, but due to backwards compatibility is -allowed to be empty. Instances of this type with an empty value here are -almost certainly wrong. -More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-
- Default:
+ Name is the name of resource being referenced
+
true
apiGroupstring + APIGroup is the group for the resource being referenced. +If APIGroup is not specified, the specified Kind must be in the core API group. +For any other third-party types, APIGroup is required.
false
optionalbooleannamespacestring - Specify whether the ConfigMap or its key must be defined
+ Namespace is the namespace of resource being referenced +Note that when a namespace is specified, a gateway.networking.k8s.io/ReferenceGrant object is required in the referent namespace to allow that namespace's owner to accept the reference. See the ReferenceGrant documentation for details. +(Alpha) This field requires the CrossNamespaceVolumeDataSource feature gate to be enabled.
false
-### Instrumentation.spec.python.env[index].valueFrom.fieldRef -[↩ Parent](#instrumentationspecpythonenvindexvaluefrom) +### Instrumentation.spec.python.volumeClaimTemplate.spec.resources +[↩ Parent](#instrumentationspecpythonvolumeclaimtemplatespec) -Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, -spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. +resources represents the minimum resources the volume should have. +If RecoverVolumeExpansionFailure feature is enabled users are allowed to specify resource requirements +that are lower than previous value but must still be higher than capacity recorded in the +status field of the claim. +More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources @@ -3892,30 +7231,33 @@ spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podI - - + + - + - - + +
fieldPathstringlimitsmap[string]int or string - Path of the field to select in the specified API version.
+ Limits describes the maximum amount of compute resources allowed. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
truefalse
apiVersionstringrequestsmap[string]int or string - Version of the schema the FieldPath is written in terms of, defaults to "v1".
+ Requests describes the minimum amount of compute resources required. +If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, +otherwise to an implementation-defined value. Requests cannot exceed Limits. +More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
false
-### Instrumentation.spec.python.env[index].valueFrom.resourceFieldRef -[↩ Parent](#instrumentationspecpythonenvindexvaluefrom) +### Instrumentation.spec.python.volumeClaimTemplate.spec.selector +[↩ Parent](#instrumentationspecpythonvolumeclaimtemplatespec) -Selects a resource of the container: only resources limits and requests -(limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. +selector is a label query over volumes to consider for binding. @@ -3927,36 +7269,32 @@ Selects a resource of the container: only resources limits and requests - - - - - - - + + - - + +
resourcestring - Required: resource to select
-
true
containerNamestringmatchExpressions[]object - Container name: required for volumes, optional for env vars
+ matchExpressions is a list of label selector requirements. The requirements are ANDed.
false
divisorint or stringmatchLabelsmap[string]string - Specifies the output format of the exposed resources, defaults to "1"
+ matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels +map is equivalent to an element of matchExpressions, whose key field is "key", the +operator is "In", and the values array contains only "value". The requirements are ANDed.
false
-### Instrumentation.spec.python.env[index].valueFrom.secretKeyRef -[↩ Parent](#instrumentationspecpythonenvindexvaluefrom) +### Instrumentation.spec.python.volumeClaimTemplate.spec.selector.matchExpressions[index] +[↩ Parent](#instrumentationspecpythonvolumeclaimtemplatespecselector) -Selects a key of a secret in the pod's namespace +A label selector requirement is a selector that contains values, a key, and an operator that +relates the key and values. @@ -3971,39 +7309,39 @@ Selects a key of a secret in the pod's namespace - + - + - - + +
key string - The key of the secret to select from. Must be a valid secret key.
+ key is the label key that the selector applies to.
true
nameoperator string - Name of the referent. -This field is effectively required, but due to backwards compatibility is -allowed to be empty. Instances of this type with an empty value here are -almost certainly wrong. -More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
-
- Default:
+ operator represents a key's relationship to a set of values. +Valid operators are In, NotIn, Exists and DoesNotExist.
falsetrue
optionalbooleanvalues[]string - Specify whether the Secret or its key must be defined
+ values is an array of string values. If the operator is In or NotIn, +the values array must be non-empty. If the operator is Exists or DoesNotExist, +the values array must be empty. This array is replaced during a strategic +merge patch.
false
-### Instrumentation.spec.python.resourceRequirements -[↩ Parent](#instrumentationspecpython) +### Instrumentation.spec.python.volumeClaimTemplate.metadata +[↩ Parent](#instrumentationspecpythonvolumeclaimtemplate) -Resources describes the compute resource requirements. +May contain labels and annotations that will be copied into the PVC +when creating it. No other fields are allowed and will be rejected during +validation. @@ -4015,72 +7353,38 @@ Resources describes the compute resource requirements. - - + + - - + + - - + + - -
claims[]objectannotationsmap[string]string - Claims lists the names of resources, defined in spec.resourceClaims, -that are used by this container. - -This is an alpha field and requires enabling the -DynamicResourceAllocation feature gate. - -This field is immutable. It can only be set for containers.
+
false
limitsmap[string]int or stringfinalizers[]string - Limits describes the maximum amount of compute resources allowed. -More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
requestsmap[string]int or stringlabelsmap[string]string - Requests describes the minimum amount of compute resources required. -If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, -otherwise to an implementation-defined value. Requests cannot exceed Limits. -More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
+
false
- - -### Instrumentation.spec.python.resourceRequirements.claims[index] -[↩ Parent](#instrumentationspecpythonresourcerequirements) - - - -ResourceClaim references one entry in PodSpec.ResourceClaims. - - - - - - - - - - - + - + - + diff --git a/pkg/instrumentation/apachehttpd.go b/pkg/instrumentation/apachehttpd.go index 39a9e2d96f..87c1b744b4 100644 --- a/pkg/instrumentation/apachehttpd.go +++ b/pkg/instrumentation/apachehttpd.go @@ -61,6 +61,8 @@ const ( func injectApacheHttpdagent(_ logr.Logger, apacheSpec v1alpha1.ApacheHttpd, pod corev1.Pod, useLabelsForResourceAttributes bool, index int, otlpEndpoint string, resourceMap map[string]string) corev1.Pod { + volume := instrVolume(apacheSpec.VolumeClaimTemplate, apacheAgentVolume, apacheSpec.VolumeSizeLimit) + // caller checks if there is at least one container container := &pod.Spec.Containers[index] @@ -135,14 +137,7 @@ func injectApacheHttpdagent(_ logr.Logger, apacheSpec v1alpha1.ApacheHttpd, pod // Copy OTEL module to a shared volume if isApacheInitContainerMissing(pod, apacheAgentInitContainerName) { // Inject volume for agent - pod.Spec.Volumes = append(pod.Spec.Volumes, corev1.Volume{ - Name: apacheAgentVolume, - VolumeSource: corev1.VolumeSource{ - EmptyDir: &corev1.EmptyDirVolumeSource{ - SizeLimit: volumeSize(apacheSpec.VolumeSizeLimit), - }, - }}) - + pod.Spec.Volumes = append(pod.Spec.Volumes, volume) pod.Spec.InitContainers = append(pod.Spec.InitContainers, corev1.Container{ Name: apacheAgentInitContainerName, Image: apacheSpec.Image, diff --git a/pkg/instrumentation/dotnet.go b/pkg/instrumentation/dotnet.go index 437e256fc1..74f68744ac 100644 --- a/pkg/instrumentation/dotnet.go +++ b/pkg/instrumentation/dotnet.go @@ -52,6 +52,8 @@ const ( func injectDotNetSDK(dotNetSpec v1alpha1.DotNet, pod corev1.Pod, index int, runtime string) (corev1.Pod, error) { + volume := instrVolume(dotNetSpec.VolumeClaimTemplate, dotnetVolumeName, dotNetSpec.VolumeSizeLimit) + // caller checks if there is at least one container. container := &pod.Spec.Containers[index] @@ -110,27 +112,20 @@ func injectDotNetSDK(dotNetSpec v1alpha1.DotNet, pod corev1.Pod, index int, runt setDotNetEnvVar(container, envDotNetSharedStore, dotNetSharedStorePath, concatEnvValues) container.VolumeMounts = append(container.VolumeMounts, corev1.VolumeMount{ - Name: dotnetVolumeName, + Name: volume.Name, MountPath: dotnetInstrMountPath, }) // We just inject Volumes and init containers for the first processed container. if isInitContainerMissing(pod, dotnetInitContainerName) { - pod.Spec.Volumes = append(pod.Spec.Volumes, corev1.Volume{ - Name: dotnetVolumeName, - VolumeSource: corev1.VolumeSource{ - EmptyDir: &corev1.EmptyDirVolumeSource{ - SizeLimit: volumeSize(dotNetSpec.VolumeSizeLimit), - }, - }}) - + pod.Spec.Volumes = append(pod.Spec.Volumes, volume) pod.Spec.InitContainers = append(pod.Spec.InitContainers, corev1.Container{ Name: dotnetInitContainerName, Image: dotNetSpec.Image, Command: []string{"cp", "-r", "/autoinstrumentation/.", dotnetInstrMountPath}, Resources: dotNetSpec.Resources, VolumeMounts: []corev1.VolumeMount{{ - Name: dotnetVolumeName, + Name: volume.Name, MountPath: dotnetInstrMountPath, }}, }) diff --git a/pkg/instrumentation/helper.go b/pkg/instrumentation/helper.go index 1968fe8973..c1d5994853 100644 --- a/pkg/instrumentation/helper.go +++ b/pkg/instrumentation/helper.go @@ -16,6 +16,7 @@ package instrumentation import ( "fmt" + "reflect" "regexp" "sort" "strings" @@ -123,6 +124,28 @@ func isInstrWithoutContainers(inst instrumentationWithContainers) int { return 0 } +// Return volume if defined, otherwise return emptyDir with given name and size limit. +func instrVolume(volumeClaimTemplate corev1.PersistentVolumeClaimTemplate, name string, quantity *resource.Quantity) corev1.Volume { + if !reflect.ValueOf(volumeClaimTemplate).IsZero() { + return corev1.Volume{ + Name: name, + VolumeSource: corev1.VolumeSource{ + Ephemeral: &corev1.EphemeralVolumeSource{ + VolumeClaimTemplate: &volumeClaimTemplate, + }, + }, + } + } + + return corev1.Volume{ + Name: name, + VolumeSource: corev1.VolumeSource{ + EmptyDir: &corev1.EmptyDirVolumeSource{ + SizeLimit: volumeSize(quantity), + }, + }} +} + func volumeSize(quantity *resource.Quantity) *resource.Quantity { if quantity == nil { return &defaultSize diff --git a/pkg/instrumentation/helper_test.go b/pkg/instrumentation/helper_test.go index d852c94a4a..9272d50a47 100644 --- a/pkg/instrumentation/helper_test.go +++ b/pkg/instrumentation/helper_test.go @@ -20,6 +20,7 @@ import ( "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" "github.com/open-telemetry/opentelemetry-operator/pkg/constants" ) @@ -188,6 +189,92 @@ func TestDuplicatedContainers(t *testing.T) { } } +func TestInstrVolume(t *testing.T) { + tests := []struct { + name string + volume corev1.PersistentVolumeClaimTemplate + volumeName string + quantity *resource.Quantity + expected corev1.Volume + }{ + { + name: "With volume", + volume: corev1.PersistentVolumeClaimTemplate{ + Spec: corev1.PersistentVolumeClaimSpec{ + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + }, + }, + volumeName: "default-vol", + quantity: nil, + expected: corev1.Volume{ + Name: "default-vol", + VolumeSource: corev1.VolumeSource{ + Ephemeral: &corev1.EphemeralVolumeSource{ + VolumeClaimTemplate: &corev1.PersistentVolumeClaimTemplate{ + Spec: corev1.PersistentVolumeClaimSpec{ + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + }, + }, + }, + }}, + }, + { + name: "With volume size limit", + volume: corev1.PersistentVolumeClaimTemplate{}, + volumeName: "default-vol", + quantity: &defaultVolumeLimitSize, + expected: corev1.Volume{ + Name: "default-vol", + VolumeSource: corev1.VolumeSource{ + EmptyDir: &corev1.EmptyDirVolumeSource{ + SizeLimit: &defaultVolumeLimitSize, + }, + }}, + }, + { + name: "No volume or size limit", + volume: corev1.PersistentVolumeClaimTemplate{}, + volumeName: "default-vol", + quantity: nil, + expected: corev1.Volume{ + Name: "default-vol", + VolumeSource: corev1.VolumeSource{ + EmptyDir: &corev1.EmptyDirVolumeSource{ + SizeLimit: &defaultSize, + }, + }}, + }, + { + name: "With volume and size limit", + volume: corev1.PersistentVolumeClaimTemplate{ + Spec: corev1.PersistentVolumeClaimSpec{ + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + }, + }, + volumeName: "default-vol", + quantity: &defaultVolumeLimitSize, + expected: corev1.Volume{ + Name: "default-vol", + VolumeSource: corev1.VolumeSource{ + Ephemeral: &corev1.EphemeralVolumeSource{ + VolumeClaimTemplate: &corev1.PersistentVolumeClaimTemplate{ + Spec: corev1.PersistentVolumeClaimSpec{ + AccessModes: []corev1.PersistentVolumeAccessMode{corev1.ReadWriteOnce}, + }, + }, + }, + }}, + }, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + res := instrVolume(test.volume, test.volumeName, test.quantity) + assert.Equal(t, test.expected, res) + }) + } +} + func TestInstrWithContainers(t *testing.T) { tests := []struct { name string diff --git a/pkg/instrumentation/javaagent.go b/pkg/instrumentation/javaagent.go index f77d3ae0c3..ef91d296d8 100644 --- a/pkg/instrumentation/javaagent.go +++ b/pkg/instrumentation/javaagent.go @@ -31,6 +31,8 @@ const ( ) func injectJavaagent(javaSpec v1alpha1.Java, pod corev1.Pod, index int) (corev1.Pod, error) { + volume := instrVolume(javaSpec.VolumeClaimTemplate, javaVolumeName, javaSpec.VolumeSizeLimit) + // caller checks if there is at least one container. container := &pod.Spec.Containers[index] @@ -63,27 +65,20 @@ func injectJavaagent(javaSpec v1alpha1.Java, pod corev1.Pod, index int) (corev1. } container.VolumeMounts = append(container.VolumeMounts, corev1.VolumeMount{ - Name: javaVolumeName, + Name: volume.Name, MountPath: javaInstrMountPath, }) // We just inject Volumes and init containers for the first processed container. if isInitContainerMissing(pod, javaInitContainerName) { - pod.Spec.Volumes = append(pod.Spec.Volumes, corev1.Volume{ - Name: javaVolumeName, - VolumeSource: corev1.VolumeSource{ - EmptyDir: &corev1.EmptyDirVolumeSource{ - SizeLimit: volumeSize(javaSpec.VolumeSizeLimit), - }, - }}) - + pod.Spec.Volumes = append(pod.Spec.Volumes, volume) pod.Spec.InitContainers = append(pod.Spec.InitContainers, corev1.Container{ Name: javaInitContainerName, Image: javaSpec.Image, Command: []string{"cp", "/javaagent.jar", javaInstrMountPath + "/javaagent.jar"}, Resources: javaSpec.Resources, VolumeMounts: []corev1.VolumeMount{{ - Name: javaVolumeName, + Name: volume.Name, MountPath: javaInstrMountPath, }}, }) @@ -95,7 +90,7 @@ func injectJavaagent(javaSpec v1alpha1.Java, pod corev1.Pod, index int) (corev1. Command: []string{"cp", "-r", extension.Dir + "/.", javaInstrMountPath + "/extensions"}, Resources: javaSpec.Resources, VolumeMounts: []corev1.VolumeMount{{ - Name: javaVolumeName, + Name: volume.Name, MountPath: javaInstrMountPath, }}, }) diff --git a/pkg/instrumentation/nodejs.go b/pkg/instrumentation/nodejs.go index 655e35ee5f..a3d02ea53d 100644 --- a/pkg/instrumentation/nodejs.go +++ b/pkg/instrumentation/nodejs.go @@ -29,6 +29,8 @@ const ( ) func injectNodeJSSDK(nodeJSSpec v1alpha1.NodeJS, pod corev1.Pod, index int) (corev1.Pod, error) { + volume := instrVolume(nodeJSSpec.VolumeClaimTemplate, nodejsVolumeName, nodeJSSpec.VolumeSizeLimit) + // caller checks if there is at least one container. container := &pod.Spec.Containers[index] @@ -56,27 +58,20 @@ func injectNodeJSSDK(nodeJSSpec v1alpha1.NodeJS, pod corev1.Pod, index int) (cor } container.VolumeMounts = append(container.VolumeMounts, corev1.VolumeMount{ - Name: nodejsVolumeName, + Name: volume.Name, MountPath: nodejsInstrMountPath, }) // We just inject Volumes and init containers for the first processed container if isInitContainerMissing(pod, nodejsInitContainerName) { - pod.Spec.Volumes = append(pod.Spec.Volumes, corev1.Volume{ - Name: nodejsVolumeName, - VolumeSource: corev1.VolumeSource{ - EmptyDir: &corev1.EmptyDirVolumeSource{ - SizeLimit: volumeSize(nodeJSSpec.VolumeSizeLimit), - }, - }}) - + pod.Spec.Volumes = append(pod.Spec.Volumes, volume) pod.Spec.InitContainers = append(pod.Spec.InitContainers, corev1.Container{ Name: nodejsInitContainerName, Image: nodeJSSpec.Image, Command: []string{"cp", "-r", "/autoinstrumentation/.", nodejsInstrMountPath}, Resources: nodeJSSpec.Resources, VolumeMounts: []corev1.VolumeMount{{ - Name: nodejsVolumeName, + Name: volume.Name, MountPath: nodejsInstrMountPath, }}, }) diff --git a/pkg/instrumentation/python.go b/pkg/instrumentation/python.go index c0745cd814..db1c9d6a2d 100644 --- a/pkg/instrumentation/python.go +++ b/pkg/instrumentation/python.go @@ -36,6 +36,8 @@ const ( ) func injectPythonSDK(pythonSpec v1alpha1.Python, pod corev1.Pod, index int) (corev1.Pod, error) { + volume := instrVolume(pythonSpec.VolumeClaimTemplate, pythonVolumeName, pythonSpec.VolumeSizeLimit) + // caller checks if there is at least one container. container := &pod.Spec.Containers[index] @@ -99,27 +101,20 @@ func injectPythonSDK(pythonSpec v1alpha1.Python, pod corev1.Pod, index int) (cor } container.VolumeMounts = append(container.VolumeMounts, corev1.VolumeMount{ - Name: pythonVolumeName, + Name: volume.Name, MountPath: pythonInstrMountPath, }) // We just inject Volumes and init containers for the first processed container. if isInitContainerMissing(pod, pythonInitContainerName) { - pod.Spec.Volumes = append(pod.Spec.Volumes, corev1.Volume{ - Name: pythonVolumeName, - VolumeSource: corev1.VolumeSource{ - EmptyDir: &corev1.EmptyDirVolumeSource{ - SizeLimit: volumeSize(pythonSpec.VolumeSizeLimit), - }, - }}) - + pod.Spec.Volumes = append(pod.Spec.Volumes, volume) pod.Spec.InitContainers = append(pod.Spec.InitContainers, corev1.Container{ Name: pythonInitContainerName, Image: pythonSpec.Image, Command: []string{"cp", "-r", "/autoinstrumentation/.", pythonInstrMountPath}, Resources: pythonSpec.Resources, VolumeMounts: []corev1.VolumeMount{{ - Name: pythonVolumeName, + Name: volume.Name, MountPath: pythonInstrMountPath, }}, }) diff --git a/tests/e2e-instrumentation/instrumentation-nodejs-volume/00-install-collector.yaml b/tests/e2e-instrumentation/instrumentation-nodejs-volume/00-install-collector.yaml new file mode 100644 index 0000000000..34a26ebb2c --- /dev/null +++ b/tests/e2e-instrumentation/instrumentation-nodejs-volume/00-install-collector.yaml @@ -0,0 +1,22 @@ +apiVersion: opentelemetry.io/v1alpha1 +kind: OpenTelemetryCollector +metadata: + name: sidecar +spec: + config: | + receivers: + otlp: + protocols: + grpc: + http: + processors: + + exporters: + debug: + + service: + pipelines: + traces: + receivers: [otlp] + exporters: [debug] + mode: sidecar diff --git a/tests/e2e-instrumentation/instrumentation-nodejs-volume/00-install-instrumentation.yaml b/tests/e2e-instrumentation/instrumentation-nodejs-volume/00-install-instrumentation.yaml new file mode 100644 index 0000000000..06c5c8dd03 --- /dev/null +++ b/tests/e2e-instrumentation/instrumentation-nodejs-volume/00-install-instrumentation.yaml @@ -0,0 +1,38 @@ +apiVersion: opentelemetry.io/v1alpha1 +kind: Instrumentation +metadata: + name: nodejs +spec: + env: + - name: OTEL_TRACES_EXPORTER + value: otlp + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://localhost:4317 + - name: OTEL_EXPORTER_OTLP_TIMEOUT + value: "20" + - name: OTEL_TRACES_SAMPLER + value: parentbased_traceidratio + - name: OTEL_TRACES_SAMPLER_ARG + value: "0.85" + - name: SPLUNK_TRACE_RESPONSE_HEADER_ENABLED + value: "true" + - name: OTEL_METRICS_EXPORTER + value: prometheus + exporter: + endpoint: http://localhost:4317 + propagators: + - jaeger + - b3 + sampler: + type: parentbased_traceidratio + argument: "0.25" + nodejs: + env: + - name: OTEL_NODEJS_DEBUG + value: "true" + volumeClaimTemplate: + spec: + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: 1Gi diff --git a/tests/e2e-instrumentation/instrumentation-nodejs-volume/01-assert.yaml b/tests/e2e-instrumentation/instrumentation-nodejs-volume/01-assert.yaml new file mode 100644 index 0000000000..227a175150 --- /dev/null +++ b/tests/e2e-instrumentation/instrumentation-nodejs-volume/01-assert.yaml @@ -0,0 +1,88 @@ +apiVersion: v1 +kind: Pod +metadata: + annotations: + instrumentation.opentelemetry.io/inject-nodejs: "true" + sidecar.opentelemetry.io/inject: "true" + labels: + app: my-nodejs +spec: + containers: + - env: + - name: OTEL_NODE_IP + valueFrom: + fieldRef: + fieldPath: status.hostIP + - name: OTEL_POD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + - name: NODE_PATH + value: /usr/local/lib/node_modules + - name: OTEL_NODEJS_DEBUG + value: "true" + - name: NODE_OPTIONS + value: " --require /otel-auto-instrumentation-nodejs/autoinstrumentation.js" + - name: OTEL_TRACES_EXPORTER + value: otlp + - name: OTEL_EXPORTER_OTLP_ENDPOINT + value: http://localhost:4317 + - name: OTEL_EXPORTER_OTLP_TIMEOUT + value: "20" + - name: OTEL_TRACES_SAMPLER + value: parentbased_traceidratio + - name: OTEL_TRACES_SAMPLER_ARG + value: "0.85" + - name: SPLUNK_TRACE_RESPONSE_HEADER_ENABLED + value: "true" + - name: OTEL_METRICS_EXPORTER + value: prometheus + - name: OTEL_SERVICE_NAME + value: my-nodejs + - name: OTEL_RESOURCE_ATTRIBUTES_POD_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: metadata.name + - name: OTEL_RESOURCE_ATTRIBUTES_NODE_NAME + valueFrom: + fieldRef: + apiVersion: v1 + fieldPath: spec.nodeName + - name: OTEL_PROPAGATORS + value: jaeger,b3 + - name: OTEL_RESOURCE_ATTRIBUTES + name: myapp + volumeMounts: + - mountPath: /var/run/secrets/kubernetes.io/serviceaccount + readOnly: true + - mountPath: /otel-auto-instrumentation-nodejs + name: opentelemetry-auto-instrumentation-nodejs + - args: + - --config=env:OTEL_CONFIG + name: otc-container + initContainers: + - name: opentelemetry-auto-instrumentation-nodejs + volumes: + - projected: + defaultMode: 420 + - name: opentelemetry-auto-instrumentation-nodejs + ephemeral: + volumeClaimTemplate: + spec: + accessModes: ["ReadWriteOnce"] + resources: + requests: + storage: 1Gi +status: + containerStatuses: + - name: myapp + ready: true + started: true + - name: otc-container + ready: true + started: true + initContainerStatuses: + - name: opentelemetry-auto-instrumentation-nodejs + ready: true + phase: Running diff --git a/tests/e2e-instrumentation/instrumentation-nodejs-volume/01-install-app.yaml b/tests/e2e-instrumentation/instrumentation-nodejs-volume/01-install-app.yaml new file mode 100644 index 0000000000..f92dc1491b --- /dev/null +++ b/tests/e2e-instrumentation/instrumentation-nodejs-volume/01-install-app.yaml @@ -0,0 +1,32 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: my-nodejs +spec: + selector: + matchLabels: + app: my-nodejs + replicas: 1 + template: + metadata: + labels: + app: my-nodejs + annotations: + sidecar.opentelemetry.io/inject: "true" + instrumentation.opentelemetry.io/inject-nodejs: "true" + spec: + securityContext: + runAsUser: 1000 + runAsGroup: 3000 + fsGroup: 3000 + containers: + - name: myapp + image: ghcr.io/open-telemetry/opentelemetry-operator/e2e-test-app-nodejs:main + securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: ["ALL"] + env: + - name: NODE_PATH + value: /usr/local/lib/node_modules + automountServiceAccountToken: false diff --git a/tests/e2e-instrumentation/instrumentation-nodejs-volume/chainsaw-test.yaml b/tests/e2e-instrumentation/instrumentation-nodejs-volume/chainsaw-test.yaml new file mode 100755 index 0000000000..7156d05d37 --- /dev/null +++ b/tests/e2e-instrumentation/instrumentation-nodejs-volume/chainsaw-test.yaml @@ -0,0 +1,40 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/kyverno/chainsaw/main/.schemas/json/test-chainsaw-v1alpha1.json +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + creationTimestamp: null + name: instrumentation-nodejs-volume +spec: + steps: + - name: step-00 + try: + # In OpenShift, when a namespace is created, all necessary SCC annotations are automatically added. However, if a namespace is created using a resource file with only selected SCCs, the other auto-added SCCs are not included. Therefore, the UID-range and supplemental groups SCC annotations must be set after the namespace is created. + - command: + entrypoint: kubectl + args: + - annotate + - namespace + - ${NAMESPACE} + - openshift.io/sa.scc.uid-range=1000/1000 + - --overwrite + - command: + entrypoint: kubectl + args: + - annotate + - namespace + - ${NAMESPACE} + - openshift.io/sa.scc.supplemental-groups=3000/3000 + - --overwrite + - apply: + file: 00-install-collector.yaml + - apply: + file: 00-install-instrumentation.yaml + - name: step-01 + try: + - apply: + file: 01-install-app.yaml + - assert: + file: 01-assert.yaml + catch: + - podLogs: + selector: app=my-nodejs From 15c6ec640fe3e045c917922fb0509cfbdb675672 Mon Sep 17 00:00:00 2001 From: Ishwar Kanse Date: Wed, 23 Oct 2024 19:50:15 +0530 Subject: [PATCH 2/4] Test operator metrics can be scraped by OpenShift Monitoring (#3377) --- .../monitoring/chainsaw-test.yaml | 26 ++++++++++++++++++- .../e2e-openshift/monitoring/check_metrics.sh | 2 +- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/tests/e2e-openshift/monitoring/chainsaw-test.yaml b/tests/e2e-openshift/monitoring/chainsaw-test.yaml index 0cf36e93f0..4752e8ccb3 100755 --- a/tests/e2e-openshift/monitoring/chainsaw-test.yaml +++ b/tests/e2e-openshift/monitoring/chainsaw-test.yaml @@ -1,4 +1,3 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/kyverno/chainsaw/main/.schemas/json/test-chainsaw-v1alpha1.json apiVersion: chainsaw.kyverno.io/v1alpha1 kind: Test metadata: @@ -14,6 +13,31 @@ spec: file: 00-workload-monitoring.yaml - assert: file: 00-assert.yaml + - name: Enable OpenShift platform monitoring on the OpenTelemetry operator namespace + try: + - command: + entrypoint: oc + args: + - get + - pods + - -A + - -l control-plane=controller-manager + - -l app.kubernetes.io/name=opentelemetry-operator + - -o + - jsonpath={.items[0].metadata.namespace} + outputs: + - name: OTEL_NAMESPACE + value: ($stdout) + - command: + env: + - name: otelnamespace + value: ($OTEL_NAMESPACE) + entrypoint: oc + args: + - label + - namespace + - $otelnamespace + - openshift.io/cluster-monitoring=true - name: step-01 try: - apply: diff --git a/tests/e2e-openshift/monitoring/check_metrics.sh b/tests/e2e-openshift/monitoring/check_metrics.sh index e92a1649e4..8dd65fc4e0 100755 --- a/tests/e2e-openshift/monitoring/check_metrics.sh +++ b/tests/e2e-openshift/monitoring/check_metrics.sh @@ -4,7 +4,7 @@ TOKEN=$(oc create token prometheus-user-workload -n openshift-user-workload-moni THANOS_QUERIER_HOST=$(oc get route thanos-querier -n openshift-monitoring -o json | jq -r '.spec.host') #Check metrics for OpenTelemetry collector instance. -metrics="otelcol_process_uptime otelcol_process_runtime_total_sys_memory_bytes otelcol_process_memory_rss otelcol_exporter_sent_spans otelcol_process_cpu_seconds otelcol_process_memory_rss otelcol_process_runtime_heap_alloc_bytes otelcol_process_runtime_total_alloc_bytes otelcol_process_runtime_total_sys_memory_bytes otelcol_process_uptime otelcol_receiver_accepted_spans otelcol_receiver_refused_spans" +metrics="otelcol_process_uptime otelcol_process_runtime_total_sys_memory_bytes otelcol_process_memory_rss otelcol_exporter_sent_spans otelcol_process_cpu_seconds otelcol_process_memory_rss otelcol_process_runtime_heap_alloc_bytes otelcol_process_runtime_total_alloc_bytes otelcol_process_runtime_total_sys_memory_bytes otelcol_process_uptime otelcol_receiver_accepted_spans otelcol_receiver_refused_spans opentelemetry_collector_info opentelemetry_collector_exporters opentelemetry_collector_receivers" for metric in $metrics; do query="$metric" From f374ea38d5b84b45ca3ca888d7a2607d1279a1aa Mon Sep 17 00:00:00 2001 From: Jacob Aronoff Date: Wed, 23 Oct 2024 14:38:30 -0400 Subject: [PATCH 3/4] Remove TA maintainers code ownership (#3386) --- .github/CODEOWNERS | 3 --- README.md | 9 --------- 2 files changed, 12 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 209e0fe34b..68f4834a72 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -17,6 +17,3 @@ # AutoInstrumentation owners # TBD - -# Target Allocator owners -cmd/otel-allocator @open-telemetry/operator-ta-maintainers diff --git a/README.md b/README.md index cfc2867391..cca3c34ebc 100644 --- a/README.md +++ b/README.md @@ -860,15 +860,6 @@ Emeritus Approvers: - [Owais Lone](https://github.com/owais), Splunk - [Pablo Baeyens](https://github.com/mx-psi), DataDog -Target Allocator Maintainers ([@open-telemetry/operator-ta-maintainers](https://github.com/orgs/open-telemetry/teams/operator-ta-maintainers)): - -- [Sebastian Poxhofer](https://github.com/secustor) - -Emeritus Target Allocator Maintainers - -- [Anthony Mirabella](https://github.com/Aneurysm9), AWS -- [Kristina Pathak](https://github.com/kristinapathak), Lightstep - Maintainers ([@open-telemetry/operator-maintainers](https://github.com/orgs/open-telemetry/teams/operator-maintainers)): - [Jacob Aronoff](https://github.com/jaronoff97), Lightstep From 22e8c06f20f0be6eee1df3e139040240cfa13f07 Mon Sep 17 00:00:00 2001 From: Jacob Aronoff Date: Wed, 23 Oct 2024 14:38:46 -0400 Subject: [PATCH 4/4] target allocator don't run as root (#3385) --- .chloggen/ta-no-root.yaml | 16 ++++++++++++++++ cmd/otel-allocator/Dockerfile | 6 ++++-- 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100755 .chloggen/ta-no-root.yaml diff --git a/.chloggen/ta-no-root.yaml b/.chloggen/ta-no-root.yaml new file mode 100755 index 0000000000..6daeb7840f --- /dev/null +++ b/.chloggen/ta-no-root.yaml @@ -0,0 +1,16 @@ +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: bug_fix + +# The name of the component, or a single word describing the area of concern, (e.g. collector, target allocator, auto-instrumentation, opamp, github action) +component: target allocator + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: Change docker image to run as non-root + +# One or more tracking issues related to the change +issues: [3378] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: diff --git a/cmd/otel-allocator/Dockerfile b/cmd/otel-allocator/Dockerfile index 2e57628925..26ed93dbe0 100644 --- a/cmd/otel-allocator/Dockerfile +++ b/cmd/otel-allocator/Dockerfile @@ -1,5 +1,5 @@ # Get CA certificates from the Alpine package repo -FROM alpine:3.20 as certificates +FROM alpine:3.20 AS certificates RUN apk --no-cache add ca-certificates @@ -8,7 +8,7 @@ FROM scratch ARG TARGETARCH -WORKDIR /root/ +WORKDIR / # Copy the certs COPY --from=certificates /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt @@ -16,4 +16,6 @@ COPY --from=certificates /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-ce # Copy binary built on the host COPY bin/targetallocator_${TARGETARCH} ./main +USER 65532:65532 + ENTRYPOINT ["./main"]
NameTypeDescriptionRequired
name string - Name must match the name of one entry in pod.spec.resourceClaims of -the Pod where this field is used. It makes that resource available -inside a container.
+
truefalse
requestnamespace string - Request is the name chosen for a request in the referenced claim. -If empty, everything from the claim is made available, otherwise -only the result of this request.
+
false