build/k8s/ingestor.yaml (275 lines of code) (raw):
---
apiVersion: v1
kind: Namespace
metadata:
name: adx-mon
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: ingestor
namespace: adx-mon
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: adx-mon:ingestor
rules:
- apiGroups:
- ""
resources:
- namespaces
- pods
verbs:
- get
- list
- watch
- update
- apiGroups:
- adx-mon.azure.com
resources:
- functions
- managementcommands
- summaryrules
verbs:
- get
- list
- update
- patch
- apiGroups:
- adx-mon.azure.com
resources:
- functions/status
verbs:
- update
- patch
- apiGroups:
- adx-mon.azure.com
resources:
- functions/finalizers
- managementcommands/finalizers
- summaryrules/finalizers
verbs:
- get
- update
- delete
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: adx-mon:ingestor
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: adx-mon:ingestor
subjects:
- kind: ServiceAccount
name: ingestor
namespace: adx-mon
---
apiVersion: v1
kind: Service
metadata:
name: ingestor
namespace: adx-mon
spec:
type: ClusterIP
selector:
app: ingestor
ports:
# By default and for convenience, the `targetPort` is set to the same value as the `port` field.
- port: 443
targetPort: 9090
# Optional field
# By default and for convenience, the Kubernetes control plane will allocate a port from a range (default: 30000-32767)
#nodePort: 30007
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: ingestor
namespace: adx-mon
spec:
serviceName: "adx-mon"
replicas: 1
updateStrategy:
type: RollingUpdate
selector:
matchLabels:
app: ingestor
template:
metadata:
labels:
app: ingestor
annotations:
adx-mon/scrape: "true"
adx-mon/port: "9091"
adx-mon/path: "/metrics"
adx-mon/log-destination: "Logs:Ingestor"
adx-mon/log-parsers: json
spec:
serviceAccountName: ingestor
containers:
- name: ingestor
image: ghcr.io/azure/adx-mon/ingestor:latest
ports:
- containerPort: 9090
name: ingestor
- containerPort: 9091
name: metrics
env:
- name: LOG_LEVEL
value: INFO
- name: "GODEBUG"
value: "http2client=0"
- name: "AZURE_RESOURCE"
value: "$ADX_URL"
- name: "AZURE_CLIENT_ID"
value: "$CLIENT_ID"
command:
- /ingestor
args:
- "--storage-dir=/mnt/data"
- "--max-segment-age=5s"
- "--max-disk-usage=21474836480"
- "--max-transfer-size=10485760"
- "--max-connections=1000"
- "--insecure-skip-verify"
- "--metrics-kusto-endpoints=Metrics=$ADX_URL"
- "--logs-kusto-endpoints=Logs=$ADX_URL"
volumeMounts:
- name: metrics
mountPath: /mnt/data
- mountPath: /etc/pki/ca-trust/extracted
name: etc-pki-ca-certs
readOnly: true
- mountPath: /etc/ssl/certs
name: ca-certs
readOnly: true
readinessProbe:
httpGet:
path: /readyz
port: 9090
scheme: HTTPS
initialDelaySeconds: 10
periodSeconds: 5
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- ingestor
topologyKey: kubernetes.io/hostname
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
preference:
matchExpressions:
- key: agentpool
operator: In
values:
- aks-system
volumes:
- name: ca-certs
hostPath:
path: /etc/ssl/certs
type: Directory
- name: etc-pki-ca-certs
hostPath:
path: /etc/pki/ca-trust/extracted
type: DirectoryOrCreate
- name: metrics
hostPath:
path: /mnt/ingestor
tolerations:
- key: CriticalAddonsOnly
operator: Exists
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
---
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.1
name: functions.adx-mon.azure.com
spec:
group: adx-mon.azure.com
names:
kind: Function
listKind: FunctionList
plural: functions
singular: function
scope: Namespaced
versions:
- name: v1
schema:
openAPIV3Schema:
description: Function defines a KQL function to be maintained in the Kusto
cluster
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
description: FunctionSpec defines the desired state of Function
properties:
body:
description: Body is the KQL body of the function
type: string
database:
description: Database is the name of the database in which the function
will be created
type: string
required:
- body
- database
type: object
status:
description: FunctionStatus defines the observed state of Function
properties:
error:
description: Error is a string that communicates any error message
if one exists
type: string
lastTimeReconciled:
description: LastTimeReconciled is the last time the Function was
reconciled
format: date-time
type: string
message:
description: Message is a human-readable message indicating details
about the Function
type: string
status:
description: Status is an enum that represents the status of the Function
type: string
required:
- lastTimeReconciled
- status
type: object
type: object
served: true
storage: true
subresources:
status: {}