Compare commits
	
		
			40 Commits
		
	
	
		
			ingressrou
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| a51b041621 | |||
| 1d6cf0a521 | |||
| 19d66801df | |||
| d2a719af43 | |||
| 34369d211b | |||
| cadb38126b | |||
| 414d044909 | |||
| ea23a52d6b | |||
| 3458cbd694 | |||
| 0a40686c16 | |||
| 222fca8b8f | |||
| 75df3e2a41 | |||
| 5516ad195c | |||
| d0ac3b0361 | |||
| c7daada4f4 | |||
| 3a11207783 | |||
| 3586309c4e | |||
| 960103eb40 | |||
| 34b48308ff | |||
| d8471da75f | |||
| 3dfa8e3203 | |||
| 2a8c685345 | |||
| bccd2c6458 | |||
| c65835c6a4 | |||
| 76cfcd083b | |||
| 98ae369b41 | |||
| 4ccfd3d21a | |||
| ea9b63b7cc | |||
| b5ee891c97 | |||
| eccfb43aa1 | |||
| 8f99b1b03d | |||
| 024897a083 | |||
| 18c4764687 | |||
| 7b9cb6184b | |||
| 9dd32af3cb | |||
| a1cc066927 | |||
| 029572872e | |||
| 30f1c32815 | |||
| 0c14283136 | |||
| 587748343d | 
							
								
								
									
										91
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										91
									
								
								README.md
									
									
									
									
									
								
							| @@ -155,7 +155,8 @@ these should be handled by `tls:` section in Ingress. | |||||||
|  |  | ||||||
| ## Cluster formation | ## Cluster formation | ||||||
|  |  | ||||||
| Create Ubuntu 20.04 VM-s on Proxmox with local storage. | Created Ubuntu 22.04 VM-s on Proxmox with local storage. | ||||||
|  | Added some ARM64 workers by using Ubuntu 22.04 server on Raspberry Pi. | ||||||
|  |  | ||||||
| After machines have booted up and you can reach them via SSH: | After machines have booted up and you can reach them via SSH: | ||||||
|  |  | ||||||
| @@ -173,6 +174,13 @@ net.ipv4.conf.all.accept_redirects  = 0 | |||||||
| net.bridge.bridge-nf-call-iptables  = 1 | net.bridge.bridge-nf-call-iptables  = 1 | ||||||
| net.ipv4.ip_forward                 = 1 | net.ipv4.ip_forward                 = 1 | ||||||
| net.bridge.bridge-nf-call-ip6tables = 1 | net.bridge.bridge-nf-call-ip6tables = 1 | ||||||
|  |  | ||||||
|  | # Elasticsearch needs this | ||||||
|  | vm.max_map_count                    = 524288 | ||||||
|  |  | ||||||
|  | # Bump inotify limits to make sure | ||||||
|  | fs.inotify.max_user_instances=1280 | ||||||
|  | fs.inotify.max_user_watches=655360 | ||||||
| EOF | EOF | ||||||
| sysctl --system | sysctl --system | ||||||
|  |  | ||||||
| @@ -186,32 +194,23 @@ nameserver 8.8.8.8 | |||||||
| EOF | EOF | ||||||
|  |  | ||||||
| # Disable multipathd as Longhorn handles that itself | # Disable multipathd as Longhorn handles that itself | ||||||
| systemctl mask multipathd | systemctl mask multipathd snapd | ||||||
| systemctl disable multipathd | systemctl disable --now multipathd snapd bluetooth ModemManager hciuart wpa_supplicant packagekit | ||||||
| systemctl stop multipathd |  | ||||||
|  |  | ||||||
| # Disable Snapcraft |  | ||||||
| systemctl mask snapd |  | ||||||
| systemctl disable snapd |  | ||||||
| systemctl stop snapd |  | ||||||
|  |  | ||||||
| # Permit root login | # Permit root login | ||||||
| sed -i -e 's/PermitRootLogin no/PermitRootLogin without-password/' /etc/ssh/sshd_config | sed -i -e 's/PermitRootLogin no/PermitRootLogin without-password/' /etc/ssh/sshd_config | ||||||
| systemctl reload ssh | systemctl reload ssh | ||||||
| cat << EOF > /root/.ssh/authorized_keys | cat ~ubuntu/.ssh/authorized_keys > /root/.ssh/authorized_keys | ||||||
| sk-ecdsa-sha2-nistp256@openssh.com AAAAInNrLWVjZHNhLXNoYTItbmlzdHAyNTZAb3BlbnNzaC5jb20AAAAIbmlzdHAyNTYAAABBBD4/e9SWYWYoNZMkkF+NirhbmHuUgjoCap42kAq0pLIXFwIqgVTCre03VPoChIwBClc8RspLKqr5W3j0fG8QwnQAAAAEc3NoOg== lauri@lauri-x13 |  | ||||||
| EOF |  | ||||||
| userdel -f ubuntu | userdel -f ubuntu | ||||||
| apt-get remove -yq cloud-init | apt-get install -yqq linux-image-generic | ||||||
|  | apt-get remove -yq cloud-init linux-image-*-kvm | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| Install packages, for Raspbian set `OS=Debian_11` | Install packages: | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| OS=xUbuntu_20.04 | OS=xUbuntu_22.04 | ||||||
| VERSION=1.23 | VERSION=1.24 | ||||||
| cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list | cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list | ||||||
| deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ / | deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ / | ||||||
| EOF | EOF | ||||||
| @@ -219,17 +218,26 @@ cat <<EOF | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cr | |||||||
| deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ / | deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:/cri-o:/$VERSION/$OS/ / | ||||||
| EOF | EOF | ||||||
|  |  | ||||||
| curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers.gpg add - | rm -fv /etc/apt/trusted.gpg | ||||||
| curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/libcontainers-cri-o.gpg add - | curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | gpg --dearmor > /etc/apt/trusted.gpg.d/libcontainers.gpg | ||||||
| curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - | curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/Release.key | gpg --dearmor > /etc/apt/trusted.gpg.d/libcontainers-cri-o.gpg | ||||||
|  | curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg > /etc/apt/trusted.gpg.d/packages-cloud-google.gpg | ||||||
| echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list | echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list | ||||||
|  |  | ||||||
| apt-get update | apt-get update | ||||||
| apt-get install -yqq apt-transport-https curl cri-o cri-o-runc kubelet=1.23.5-00 kubectl=1.23.5-00 kubeadm=1.23.5-00 | apt-get install -yqq --allow-change-held-packages apt-transport-https curl cri-o cri-o-runc kubelet=1.24.10-00 kubectl=1.24.10-00 kubeadm=1.24.10-00 | ||||||
|  |  | ||||||
|  | cat << \EOF > /etc/containers/registries.conf | ||||||
|  | unqualified-search-registries = ["docker.io"] | ||||||
|  | # To pull Docker images from a mirror uncomment following | ||||||
|  | #[[registry]] | ||||||
|  | #prefix = "docker.io" | ||||||
|  | #location = "mirror.gcr.io" | ||||||
|  | EOF | ||||||
|  | sudo systemctl restart crio | ||||||
| sudo systemctl daemon-reload | sudo systemctl daemon-reload | ||||||
| sudo systemctl enable crio --now | sudo systemctl enable crio --now | ||||||
| apt-mark hold kubelet kubeadm kubectl | apt-mark hold kubelet kubeadm kubectl | ||||||
| sed -i -e 's/unqualified-search-registries = .*/unqualified-search-registries = ["docker.io"]/' /etc/containers/registries.conf |  | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| On master: | On master: | ||||||
| @@ -240,6 +248,16 @@ kubeadm init --token-ttl=120m --pod-network-cidr=10.244.0.0/16 --control-plane-e | |||||||
|  |  | ||||||
| For the `kubeadm join` command specify FQDN via `--node-name $(hostname -f)`. | For the `kubeadm join` command specify FQDN via `--node-name $(hostname -f)`. | ||||||
|  |  | ||||||
|  | Set AZ labels: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | for j in $(seq 1 9); do | ||||||
|  |   for t in master mon worker storage; do | ||||||
|  |     kubectl label nodes ${t}${j}.kube.k-space.ee topology.kubernetes.io/zone=node${j} | ||||||
|  |   done | ||||||
|  | done | ||||||
|  | ``` | ||||||
|  |  | ||||||
| After forming the cluster add taints: | After forming the cluster add taints: | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| @@ -247,7 +265,7 @@ for j in $(seq 1 9); do | |||||||
|   kubectl label nodes worker${j}.kube.k-space.ee node-role.kubernetes.io/worker='' |   kubectl label nodes worker${j}.kube.k-space.ee node-role.kubernetes.io/worker='' | ||||||
| done | done | ||||||
|  |  | ||||||
| for j in $(seq 1 3); do | for j in $(seq 1 4); do | ||||||
|   kubectl taint nodes mon${j}.kube.k-space.ee dedicated=monitoring:NoSchedule |   kubectl taint nodes mon${j}.kube.k-space.ee dedicated=monitoring:NoSchedule | ||||||
|   kubectl label nodes mon${j}.kube.k-space.ee dedicated=monitoring |   kubectl label nodes mon${j}.kube.k-space.ee dedicated=monitoring | ||||||
| done | done | ||||||
| @@ -258,15 +276,26 @@ for j in $(seq 1 4); do | |||||||
| done | done | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| On Raspberry Pi you need to take additonal steps: |  | ||||||
|  |  | ||||||
| * Manually enable cgroups by appending |  | ||||||
|   `cgroup_memory=1 cgroup_enable=memory` to `/boot/cmdline.txt`, |  | ||||||
| * Disable swap with `swapoff -a; apt-get purge -y dphys-swapfile` |  | ||||||
| * For mounting Longhorn volumes on Rasbian install `open-iscsi` |  | ||||||
|  |  | ||||||
| For `arm64` nodes add suitable taint to prevent scheduling non-multiarch images on them: | For `arm64` nodes add suitable taint to prevent scheduling non-multiarch images on them: | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| kubectl taint nodes worker9.kube.k-space.ee arch=arm64:NoSchedule | kubectl taint nodes worker9.kube.k-space.ee arch=arm64:NoSchedule | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | For door controllers: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | for j in ground front back; do | ||||||
|  |   kubectl taint nodes door-${j}.kube.k-space.ee dedicated=door:NoSchedule | ||||||
|  |   kubectl label nodes door-${j}.kube.k-space.ee dedicated=door | ||||||
|  |   kubectl taint nodes door-${j}.kube.k-space.ee arch=arm64:NoSchedule | ||||||
|  | done | ||||||
|  | ``` | ||||||
|  |  | ||||||
|  | To reduce wear on storage: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | echo StandardOutput=null >> /etc/systemd/system/kubelet.service.d/10-kubeadm.conf | ||||||
|  | systemctl daemon-reload | ||||||
|  | systemctl restart kubelet | ||||||
|  | ``` | ||||||
|   | |||||||
							
								
								
									
										17
									
								
								argocd/applications/logmower.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								argocd/applications/logmower.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | |||||||
|  | apiVersion: argoproj.io/v1alpha1 | ||||||
|  | kind: Application | ||||||
|  | metadata: | ||||||
|  |   name: logmower | ||||||
|  |   namespace: argocd | ||||||
|  | spec: | ||||||
|  |   project: default | ||||||
|  |   source: | ||||||
|  |     repoURL: 'git@git.k-space.ee:k-space/kube.git' | ||||||
|  |     path: logmower | ||||||
|  |     targetRevision: HEAD | ||||||
|  |   destination: | ||||||
|  |     server: 'https://kubernetes.default.svc' | ||||||
|  |     namespace: logmower | ||||||
|  |   syncPolicy: | ||||||
|  |     syncOptions: | ||||||
|  |       - CreateNamespace=true | ||||||
| @@ -1,7 +1,16 @@ | |||||||
| To apply changes: | To apply changes: | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| kubectl apply -n camtiler -f application.yml -f persistence.yml -f mongoexpress.yml -f mongodb-support.yml -f networkpolicy-base.yml -f minio-support.yml | kubectl apply -n camtiler \ | ||||||
|  |   -f application.yml \ | ||||||
|  |   -f persistence.yml \ | ||||||
|  |   -f mongoexpress.yml \ | ||||||
|  |   -f mongodb-support.yml \ | ||||||
|  |   -f camera-tiler.yml \ | ||||||
|  |   -f logmower.yml \ | ||||||
|  |   -f ingress.yml \ | ||||||
|  |   -f network-policies.yml \ | ||||||
|  |   -f networkpolicy-base.yml | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| To deploy changes: | To deploy changes: | ||||||
| @@ -15,15 +24,16 @@ To initialize secrets: | |||||||
| ``` | ``` | ||||||
| kubectl create secret generic -n camtiler mongodb-application-readwrite-password --from-literal="password=$(cat /dev/urandom | base64 | head -c 30)" | kubectl create secret generic -n camtiler mongodb-application-readwrite-password --from-literal="password=$(cat /dev/urandom | base64 | head -c 30)" | ||||||
| kubectl create secret generic -n camtiler mongodb-application-readonly-password --from-literal="password=$(cat /dev/urandom | base64 | head -c 30)" | kubectl create secret generic -n camtiler mongodb-application-readonly-password --from-literal="password=$(cat /dev/urandom | base64 | head -c 30)" | ||||||
| kubectl create secret generic -n camtiler minio-secret \ | kubectl create secret generic -n camtiler minio-secrets \ | ||||||
|     --from-literal=accesskey=application \ |  | ||||||
|     --from-literal=secretkey=$(cat /dev/urandom | base64 | head -c 30) |  | ||||||
| kubectl create secret generic -n camtiler minio-env-configuration \ |  | ||||||
|     --from-literal="MINIO_BROWSER=off" \ |  | ||||||
|     --from-literal="MINIO_ROOT_USER=root" \ |     --from-literal="MINIO_ROOT_USER=root" \ | ||||||
|     --from-literal="MINIO_ROOT_PASSWORD=$(cat /dev/urandom | base64 | head -c 30)" \ |     --from-literal="MINIO_ROOT_PASSWORD=$(cat /dev/urandom | base64 | head -c 30)" | ||||||
|     --from-literal="MINIO_STORAGE_CLASS_STANDARD=EC:4" |  | ||||||
| kubectl -n camtiler create secret generic camera-secrets \ | kubectl -n camtiler create secret generic camera-secrets \ | ||||||
|     --from-literal=username=... \ |     --from-literal=username=... \ | ||||||
|     --from-literal=password=... |     --from-literal=password=... | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | To restart all deployments: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | for j in $(kubectl get deployments -n camtiler -o name); do kubectl rollout restart -n camtiler $j; done | ||||||
|  | ``` | ||||||
|   | |||||||
| @@ -1,388 +1,4 @@ | |||||||
| --- | --- | ||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: camtiler |  | ||||||
|   annotations: |  | ||||||
|     keel.sh/policy: force |  | ||||||
|     keel.sh/trigger: poll |  | ||||||
| spec: |  | ||||||
|   revisionHistoryLimit: 0 |  | ||||||
|   replicas: 2 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app.kubernetes.io/name: camtiler |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app.kubernetes.io/name: camtiler |  | ||||||
|         component: camtiler |  | ||||||
|     spec: |  | ||||||
|       serviceAccountName: camtiler |  | ||||||
|       containers: |  | ||||||
|         - name: camtiler |  | ||||||
|           image: harbor.k-space.ee/k-space/camera-tiler:latest |  | ||||||
|           securityContext: |  | ||||||
|             readOnlyRootFilesystem: true |  | ||||||
|             runAsNonRoot: true |  | ||||||
|             runAsUser: 1000 |  | ||||||
|           ports: |  | ||||||
|             - containerPort: 5001 |  | ||||||
|               name: "http" |  | ||||||
| --- |  | ||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: log-viewer-frontend |  | ||||||
|   annotations: |  | ||||||
|     keel.sh/policy: force |  | ||||||
|     keel.sh/trigger: poll |  | ||||||
| spec: |  | ||||||
|   revisionHistoryLimit: 0 |  | ||||||
|   replicas: 2 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app.kubernetes.io/name: log-viewer-frontend |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app.kubernetes.io/name: log-viewer-frontend |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|         - name: log-viewer-frontend |  | ||||||
|           image: harbor.k-space.ee/k-space/log-viewer-frontend:latest |  | ||||||
| #          securityContext: |  | ||||||
| #            readOnlyRootFilesystem: true |  | ||||||
| #            runAsNonRoot: true |  | ||||||
| #            runAsUser: 1000 |  | ||||||
| --- |  | ||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: log-viewer-backend |  | ||||||
|   annotations: |  | ||||||
|     keel.sh/policy: force |  | ||||||
|     keel.sh/trigger: poll |  | ||||||
| spec: |  | ||||||
|   revisionHistoryLimit: 0 |  | ||||||
|   replicas: 3 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app.kubernetes.io/name: log-viewer-backend |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app.kubernetes.io/name: log-viewer-backend |  | ||||||
|     spec: |  | ||||||
|       containers: |  | ||||||
|         - name: log-backend-backend |  | ||||||
|           image: harbor.k-space.ee/k-space/log-viewer:latest |  | ||||||
|           securityContext: |  | ||||||
|             readOnlyRootFilesystem: true |  | ||||||
|             runAsNonRoot: true |  | ||||||
|             runAsUser: 1000 |  | ||||||
|           env: |  | ||||||
|             - name: MONGO_URI |  | ||||||
|               valueFrom: |  | ||||||
|                 secretKeyRef: |  | ||||||
|                   name: mongodb-application-readwrite |  | ||||||
|                   key: connectionString.standard |  | ||||||
|             - name: MINIO_BUCKET |  | ||||||
|               value: application |  | ||||||
|             - name: MINIO_HOSTNAME |  | ||||||
|               value: cams-s3.k-space.ee |  | ||||||
|             - name: MINIO_PORT |  | ||||||
|               value: "443" |  | ||||||
|             - name: MINIO_SCHEME |  | ||||||
|               value: "https" |  | ||||||
|             - name: MINIO_SECRET_KEY |  | ||||||
|               valueFrom: |  | ||||||
|                 secretKeyRef: |  | ||||||
|                   name: minio-secret |  | ||||||
|                   key: secretkey |  | ||||||
|             - name: MINIO_ACCESS_KEY |  | ||||||
|               valueFrom: |  | ||||||
|                 secretKeyRef: |  | ||||||
|                   name: minio-secret |  | ||||||
|                   key: accesskey |  | ||||||
| --- |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: log-viewer-frontend |  | ||||||
| spec: |  | ||||||
|   type: ClusterIP |  | ||||||
|   selector: |  | ||||||
|     app.kubernetes.io/name: log-viewer-frontend |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: 3003 |  | ||||||
| --- |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: log-viewer-backend |  | ||||||
| spec: |  | ||||||
|   type: ClusterIP |  | ||||||
|   selector: |  | ||||||
|     app.kubernetes.io/name: log-viewer-backend |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: 3002 |  | ||||||
| --- |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: Service |  | ||||||
| metadata: |  | ||||||
|   name: camtiler |  | ||||||
|   labels: |  | ||||||
|     component: camtiler |  | ||||||
| spec: |  | ||||||
|   type: ClusterIP |  | ||||||
|   selector: |  | ||||||
|     app.kubernetes.io/name: camtiler |  | ||||||
|     component: camtiler |  | ||||||
|   ports: |  | ||||||
|     - protocol: TCP |  | ||||||
|       port: 5001 |  | ||||||
| --- |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: ServiceAccount |  | ||||||
| metadata: |  | ||||||
|   name: camtiler |  | ||||||
| --- |  | ||||||
| kind: Role |  | ||||||
| apiVersion: rbac.authorization.k8s.io/v1 |  | ||||||
| metadata: |  | ||||||
|   name: camtiler |  | ||||||
| rules: |  | ||||||
|   - apiGroups: |  | ||||||
|       - "" |  | ||||||
|     resources: |  | ||||||
|       - services |  | ||||||
|     verbs: |  | ||||||
|       - list |  | ||||||
| --- |  | ||||||
| kind: RoleBinding |  | ||||||
| apiVersion: rbac.authorization.k8s.io/v1 |  | ||||||
| metadata: |  | ||||||
|   name: camtiler |  | ||||||
| subjects: |  | ||||||
|   - kind: ServiceAccount |  | ||||||
|     name: camtiler |  | ||||||
|     apiGroup: "" |  | ||||||
| roleRef: |  | ||||||
|   kind: Role |  | ||||||
|   name: camtiler |  | ||||||
|   apiGroup: "" |  | ||||||
| --- |  | ||||||
| apiVersion: networking.k8s.io/v1 |  | ||||||
| kind: Ingress |  | ||||||
| metadata: |  | ||||||
|   name: camtiler |  | ||||||
|   annotations: |  | ||||||
|     kubernetes.io/ingress.class: traefik |  | ||||||
|  |  | ||||||
|     # This tells Traefik this Ingress object is associated with the |  | ||||||
|     # https:// entrypoint |  | ||||||
|     # Global http:// to https:// redirect is enabled in |  | ||||||
|     # ../traefik/values.yml using `globalArguments` |  | ||||||
|     traefik.ingress.kubernetes.io/router.entrypoints: websecure |  | ||||||
|  |  | ||||||
|     # Following enables Authelia intercepting middleware |  | ||||||
|     # which makes sure user is authenticated and then |  | ||||||
|     # proceeds to inject Remote-User header for the application |  | ||||||
|     traefik.ingress.kubernetes.io/router.middlewares: traefik-sso@kubernetescrd |  | ||||||
|  |  | ||||||
|     traefik.ingress.kubernetes.io/router.tls: "true" |  | ||||||
|  |  | ||||||
|     # Following tells external-dns to add CNAME entry which makes |  | ||||||
|     # cams.k-space.ee point to same IP address as traefik.k-space.ee |  | ||||||
|     # The A record for traefik.k-space.ee is created via annotation |  | ||||||
|     # added in ../traefik/ingress.yml |  | ||||||
|     external-dns.alpha.kubernetes.io/target: traefik.k-space.ee |  | ||||||
| spec: |  | ||||||
|   rules: |  | ||||||
|     - host: cams.k-space.ee |  | ||||||
|       http: |  | ||||||
|         paths: |  | ||||||
|           - pathType: Prefix |  | ||||||
|             path: "/tiled" |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: camtiler |  | ||||||
|                 port: |  | ||||||
|                   number: 5001 |  | ||||||
|           - pathType: Prefix |  | ||||||
|             path: "/events" |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: log-viewer-backend |  | ||||||
|                 port: |  | ||||||
|                   number: 3002 |  | ||||||
|           - pathType: Prefix |  | ||||||
|             path: "/" |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: log-viewer-frontend |  | ||||||
|                 port: |  | ||||||
|                   number: 3003 |  | ||||||
|   tls: |  | ||||||
|     - hosts: |  | ||||||
|         - "*.k-space.ee" |  | ||||||
| --- |  | ||||||
| apiVersion: networking.k8s.io/v1 |  | ||||||
| kind: NetworkPolicy |  | ||||||
| metadata: |  | ||||||
|   name: camera-motion-detect |  | ||||||
| spec: |  | ||||||
|   podSelector: |  | ||||||
|     matchLabels: |  | ||||||
|       component: camdetect |  | ||||||
|   policyTypes: |  | ||||||
|     - Ingress |  | ||||||
|     - Egress |  | ||||||
|   ingress: |  | ||||||
|     - from: |  | ||||||
|         - podSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               component: camtiler |  | ||||||
|     - from: |  | ||||||
|         - namespaceSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               kubernetes.io/metadata.name: prometheus-operator |  | ||||||
|           podSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               app.kubernetes.io/name: prometheus |  | ||||||
|   egress: |  | ||||||
|     - to: |  | ||||||
|         - ipBlock: |  | ||||||
|             # Permit access to cameras outside the cluster |  | ||||||
|             cidr: 100.102.0.0/16 |  | ||||||
|     - to: |  | ||||||
|         - podSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               app: mongodb-svc |  | ||||||
|       ports: |  | ||||||
|         - port: 27017 |  | ||||||
|     - to: |  | ||||||
|         - podSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               v1.min.io/tenant: minio |  | ||||||
|       ports: |  | ||||||
|         - port: 9000 |  | ||||||
| --- |  | ||||||
| apiVersion: networking.k8s.io/v1 |  | ||||||
| kind: NetworkPolicy |  | ||||||
| metadata: |  | ||||||
|   name: camera-tiler |  | ||||||
| spec: |  | ||||||
|   podSelector: |  | ||||||
|     matchLabels: |  | ||||||
|       component: camtiler |  | ||||||
|   policyTypes: |  | ||||||
|     - Ingress |  | ||||||
|     - Egress |  | ||||||
|   egress: |  | ||||||
|     - to: |  | ||||||
|         - podSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               component: camdetect |  | ||||||
|       ports: |  | ||||||
|         - port: 5000 |  | ||||||
|   ingress: |  | ||||||
|     - from: |  | ||||||
|         - namespaceSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               kubernetes.io/metadata.name: prometheus-operator |  | ||||||
|           podSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               app.kubernetes.io/name: prometheus |  | ||||||
|     - from: |  | ||||||
|         - namespaceSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               kubernetes.io/metadata.name: traefik |  | ||||||
|           podSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               app.kubernetes.io/name: traefik |  | ||||||
| --- |  | ||||||
| apiVersion: networking.k8s.io/v1 |  | ||||||
| kind: NetworkPolicy |  | ||||||
| metadata: |  | ||||||
|   name: log-viewer-backend |  | ||||||
| spec: |  | ||||||
|   podSelector: |  | ||||||
|     matchLabels: |  | ||||||
|       app.kubernetes.io/name: log-viewer-backend |  | ||||||
|   policyTypes: |  | ||||||
|     - Ingress |  | ||||||
|     - Egress |  | ||||||
|   egress: |  | ||||||
|     - to: |  | ||||||
|         - podSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               app: mongodb-svc |  | ||||||
|     - to: |  | ||||||
|         # Minio access via Traefik's public endpoint |  | ||||||
|         - namespaceSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               kubernetes.io/metadata.name: traefik |  | ||||||
|           podSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               app.kubernetes.io/name: traefik |  | ||||||
|   ingress: |  | ||||||
|     - from: |  | ||||||
|         - namespaceSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               kubernetes.io/metadata.name: traefik |  | ||||||
|           podSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               app.kubernetes.io/name: traefik |  | ||||||
| --- |  | ||||||
| apiVersion: networking.k8s.io/v1 |  | ||||||
| kind: NetworkPolicy |  | ||||||
| metadata: |  | ||||||
|   name: log-viewer-frontend |  | ||||||
| spec: |  | ||||||
|   podSelector: |  | ||||||
|     matchLabels: |  | ||||||
|       app.kubernetes.io/name: log-viewer-frontend |  | ||||||
|   policyTypes: |  | ||||||
|     - Ingress |  | ||||||
|     - Egress |  | ||||||
|   ingress: |  | ||||||
|     - from: |  | ||||||
|         - namespaceSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               kubernetes.io/metadata.name: traefik |  | ||||||
|           podSelector: |  | ||||||
|             matchLabels: |  | ||||||
|               app.kubernetes.io/name: traefik |  | ||||||
| --- |  | ||||||
| apiVersion: networking.k8s.io/v1 |  | ||||||
| kind: Ingress |  | ||||||
| metadata: |  | ||||||
|   name: minio |  | ||||||
|   annotations: |  | ||||||
|     kubernetes.io/ingress.class: traefik |  | ||||||
|     traefik.ingress.kubernetes.io/router.entrypoints: websecure |  | ||||||
|     traefik.ingress.kubernetes.io/router.tls: "true" |  | ||||||
|     external-dns.alpha.kubernetes.io/target: traefik.k-space.ee |  | ||||||
| spec: |  | ||||||
|   rules: |  | ||||||
|     - host: cams-s3.k-space.ee |  | ||||||
|       http: |  | ||||||
|         paths: |  | ||||||
|           - pathType: Prefix |  | ||||||
|             path: "/" |  | ||||||
|             backend: |  | ||||||
|               service: |  | ||||||
|                 name: minio |  | ||||||
|                 port: |  | ||||||
|                   number: 80 |  | ||||||
|   tls: |  | ||||||
|     - hosts: |  | ||||||
|         - "*.k-space.ee" |  | ||||||
| --- |  | ||||||
| apiVersion: apiextensions.k8s.io/v1 | apiVersion: apiextensions.k8s.io/v1 | ||||||
| kind: CustomResourceDefinition | kind: CustomResourceDefinition | ||||||
| metadata: | metadata: | ||||||
| @@ -473,12 +89,13 @@ spec: | |||||||
|       metadata: |       metadata: | ||||||
|         name: foobar |         name: foobar | ||||||
|         labels: |         labels: | ||||||
|           component: camdetect |           app.kubernetes.io/name: foobar | ||||||
|  |           component: camera-motion-detect | ||||||
|       spec: |       spec: | ||||||
|         type: ClusterIP |         type: ClusterIP | ||||||
|         selector: |         selector: | ||||||
|           app.kubernetes.io/name: foobar |           app.kubernetes.io/name: foobar | ||||||
|           component: camdetect |           component: camera-motion-detect | ||||||
|         ports: |         ports: | ||||||
|           - protocol: TCP |           - protocol: TCP | ||||||
|             port: 80 |             port: 80 | ||||||
| @@ -493,14 +110,15 @@ spec: | |||||||
|           keel.sh/policy: force |           keel.sh/policy: force | ||||||
|           keel.sh/trigger: poll |           keel.sh/trigger: poll | ||||||
|       spec: |       spec: | ||||||
|  |         revisionHistoryLimit: 0 | ||||||
|         replicas: 1 |         replicas: 1 | ||||||
|  |  | ||||||
|         # Make sure we do not congest the network during rollout |  | ||||||
|         strategy: |         strategy: | ||||||
|           type: RollingUpdate |           type: RollingUpdate | ||||||
|           rollingUpdate: |           rollingUpdate: | ||||||
|             maxSurge: 0 |             # Swap following two with replicas: 2 | ||||||
|             maxUnavailable: 1 |             maxSurge: 1 | ||||||
|  |             maxUnavailable: 0 | ||||||
|         selector: |         selector: | ||||||
|           matchLabels: |           matchLabels: | ||||||
|             app.kubernetes.io/name: foobar |             app.kubernetes.io/name: foobar | ||||||
| @@ -508,18 +126,25 @@ spec: | |||||||
|           metadata: |           metadata: | ||||||
|             labels: |             labels: | ||||||
|               app.kubernetes.io/name: foobar |               app.kubernetes.io/name: foobar | ||||||
|               component: camdetect |               component: camera-motion-detect | ||||||
|           spec: |           spec: | ||||||
|             containers: |             containers: | ||||||
|               - name: camdetect |               - name: camera-motion-detect | ||||||
|                 image: harbor.k-space.ee/k-space/camera-motion-detect:latest |                 image: harbor.k-space.ee/k-space/camera-motion-detect:latest | ||||||
|  |                 starupProbe: | ||||||
|  |                   httpGet: | ||||||
|  |                     path: /healthz | ||||||
|  |                     port: 5000 | ||||||
|  |                   initialDelaySeconds: 2 | ||||||
|  |                   periodSeconds: 180 | ||||||
|  |                   timeoutSeconds: 60 | ||||||
|                 readinessProbe: |                 readinessProbe: | ||||||
|                   httpGet: |                   httpGet: | ||||||
|                     path: /readyz |                     path: /readyz | ||||||
|                     port: 5000 |                     port: 5000 | ||||||
|                   initialDelaySeconds: 10 |                   initialDelaySeconds: 60 | ||||||
|                   periodSeconds: 180 |                   periodSeconds: 60 | ||||||
|                   timeoutSeconds: 60 |                   timeoutSeconds: 5 | ||||||
|                 ports: |                 ports: | ||||||
|                   - containerPort: 5000 |                   - containerPort: 5000 | ||||||
|                     name: "http" |                     name: "http" | ||||||
| @@ -529,7 +154,7 @@ spec: | |||||||
|                     cpu: "200m" |                     cpu: "200m" | ||||||
|                   limits: |                   limits: | ||||||
|                     memory: "256Mi" |                     memory: "256Mi" | ||||||
|                     cpu: "1" |                     cpu: "4000m" | ||||||
|                 securityContext: |                 securityContext: | ||||||
|                   readOnlyRootFilesystem: true |                   readOnlyRootFilesystem: true | ||||||
|                   runAsNonRoot: true |                   runAsNonRoot: true | ||||||
| @@ -557,13 +182,13 @@ spec: | |||||||
|                   - name: AWS_SECRET_ACCESS_KEY |                   - name: AWS_SECRET_ACCESS_KEY | ||||||
|                     valueFrom: |                     valueFrom: | ||||||
|                       secretKeyRef: |                       secretKeyRef: | ||||||
|                         name: minio-secret |                         name: minio-secrets | ||||||
|                         key: secretkey |                         key: MINIO_ROOT_PASSWORD | ||||||
|                   - name: AWS_ACCESS_KEY_ID |                   - name: AWS_ACCESS_KEY_ID | ||||||
|                     valueFrom: |                     valueFrom: | ||||||
|                       secretKeyRef: |                       secretKeyRef: | ||||||
|                         name: minio-secret |                         name: minio-secrets | ||||||
|                         key: accesskey |                         key: MINIO_ROOT_USER | ||||||
|  |  | ||||||
|             # Make sure 2+ pods of same camera are scheduled on different hosts |             # Make sure 2+ pods of same camera are scheduled on different hosts | ||||||
|             affinity: |             affinity: | ||||||
| @@ -571,7 +196,7 @@ spec: | |||||||
|                 requiredDuringSchedulingIgnoredDuringExecution: |                 requiredDuringSchedulingIgnoredDuringExecution: | ||||||
|                   - labelSelector: |                   - labelSelector: | ||||||
|                       matchExpressions: |                       matchExpressions: | ||||||
|                         - key: app |                         - key: app.kubernetes.io/name | ||||||
|                           operator: In |                           operator: In | ||||||
|                           values: |                           values: | ||||||
|                             - foobar |                             - foobar | ||||||
| @@ -585,18 +210,7 @@ spec: | |||||||
|                 labelSelector: |                 labelSelector: | ||||||
|                   matchLabels: |                   matchLabels: | ||||||
|                     app.kubernetes.io/name: foobar |                     app.kubernetes.io/name: foobar | ||||||
|                     component: camdetect |                     component: camera-motion-detect | ||||||
| --- |  | ||||||
| apiVersion: monitoring.coreos.com/v1 |  | ||||||
| kind: PodMonitor |  | ||||||
| metadata: |  | ||||||
|   name: camtiler |  | ||||||
| spec: |  | ||||||
|   selector: {} |  | ||||||
|   podMetricsEndpoints: |  | ||||||
|     - port: http |  | ||||||
|   podTargetLabels: |  | ||||||
|     - app.kubernetes.io/name |  | ||||||
| --- | --- | ||||||
| apiVersion: monitoring.coreos.com/v1 | apiVersion: monitoring.coreos.com/v1 | ||||||
| kind: PrometheusRule | kind: PrometheusRule | ||||||
| @@ -607,21 +221,21 @@ spec: | |||||||
|     - name: cameras |     - name: cameras | ||||||
|       rules: |       rules: | ||||||
|         - alert: CameraLost |         - alert: CameraLost | ||||||
|           expr: rate(camdetect_rx_frames_total[2m]) < 1 |           expr: rate(camtiler_frames_total{stage="downloaded"}[1m]) < 1 | ||||||
|           for: 2m |           for: 2m | ||||||
|           labels: |           labels: | ||||||
|             severity: warning |             severity: warning | ||||||
|           annotations: |           annotations: | ||||||
|             summary: Camera feed stopped |             summary: Camera feed stopped | ||||||
|         - alert: CameraServerRoomMotion |         - alert: CameraServerRoomMotion | ||||||
|           expr: camdetect_event_active {app="camdetect-server-room"} > 0 |           expr: rate(camtiler_events_total{app_kubernetes_io_name="server-room"}[30m]) > 0 | ||||||
|           for: 1m |           for: 1m | ||||||
|           labels: |           labels: | ||||||
|             severity: warning |             severity: warning | ||||||
|           annotations: |           annotations: | ||||||
|             summary: Motion was detected in server room |             summary: Motion was detected in server room | ||||||
|         - alert: CameraSlowUploads |         - alert: CameraSlowUploads | ||||||
|           expr: rate(camdetect_upload_dropped_frames_total[2m]) > 1 |           expr: camtiler_queue_frames{stage="upload"} > 10 | ||||||
|           for: 5m |           for: 5m | ||||||
|           labels: |           labels: | ||||||
|             severity: warning |             severity: warning | ||||||
| @@ -629,13 +243,20 @@ spec: | |||||||
|             summary: Motion detect snapshots are piling up and |             summary: Motion detect snapshots are piling up and | ||||||
|               not getting uploaded to S3 |               not getting uploaded to S3 | ||||||
|         - alert: CameraSlowProcessing |         - alert: CameraSlowProcessing | ||||||
|           expr: rate(camdetect_download_dropped_frames_total[2m]) > 1 |           expr: camtiler_queue_frames{stage="download"} > 10 | ||||||
|           for: 5m |           for: 5m | ||||||
|           labels: |           labels: | ||||||
|             severity: warning |             severity: warning | ||||||
|           annotations: |           annotations: | ||||||
|             summary: Motion detection processing pipeline is not keeping up |             summary: Motion detection processing pipeline is not keeping up | ||||||
|               with incoming frames |               with incoming frames | ||||||
|  |         - alert: CameraResourcesThrottled | ||||||
|  |           expr: sum by (pod) (rate(container_cpu_cfs_throttled_periods_total{namespace="camtiler"}[1m])) > 0 | ||||||
|  |           for: 5m | ||||||
|  |           labels: | ||||||
|  |             severity: warning | ||||||
|  |           annotations: | ||||||
|  |             summary: CPU limits are bottleneck | ||||||
| --- | --- | ||||||
| apiVersion: k-space.ee/v1alpha1 | apiVersion: k-space.ee/v1alpha1 | ||||||
| kind: Camera | kind: Camera | ||||||
| @@ -644,6 +265,7 @@ metadata: | |||||||
| spec: | spec: | ||||||
|   target: http://user@workshop.cam.k-space.ee:8080/?action=stream |   target: http://user@workshop.cam.k-space.ee:8080/?action=stream | ||||||
|   secretRef: camera-secrets |   secretRef: camera-secrets | ||||||
|  |   replicas: 1 | ||||||
| --- | --- | ||||||
| apiVersion: k-space.ee/v1alpha1 | apiVersion: k-space.ee/v1alpha1 | ||||||
| kind: Camera | kind: Camera | ||||||
| @@ -652,6 +274,7 @@ metadata: | |||||||
| spec: | spec: | ||||||
|   target: http://user@server-room.cam.k-space.ee:8080/?action=stream |   target: http://user@server-room.cam.k-space.ee:8080/?action=stream | ||||||
|   secretRef: camera-secrets |   secretRef: camera-secrets | ||||||
|  |   replicas: 1 | ||||||
| --- | --- | ||||||
| apiVersion: k-space.ee/v1alpha1 | apiVersion: k-space.ee/v1alpha1 | ||||||
| kind: Camera | kind: Camera | ||||||
| @@ -660,6 +283,7 @@ metadata: | |||||||
| spec: | spec: | ||||||
|   target: http://user@printer.cam.k-space.ee:8080/?action=stream |   target: http://user@printer.cam.k-space.ee:8080/?action=stream | ||||||
|   secretRef: camera-secrets |   secretRef: camera-secrets | ||||||
|  |   replicas: 1 | ||||||
| --- | --- | ||||||
| apiVersion: k-space.ee/v1alpha1 | apiVersion: k-space.ee/v1alpha1 | ||||||
| kind: Camera | kind: Camera | ||||||
| @@ -668,6 +292,7 @@ metadata: | |||||||
| spec: | spec: | ||||||
|   target: http://user@chaos.cam.k-space.ee:8080/?action=stream |   target: http://user@chaos.cam.k-space.ee:8080/?action=stream | ||||||
|   secretRef: camera-secrets |   secretRef: camera-secrets | ||||||
|  |   replicas: 1 | ||||||
| --- | --- | ||||||
| apiVersion: k-space.ee/v1alpha1 | apiVersion: k-space.ee/v1alpha1 | ||||||
| kind: Camera | kind: Camera | ||||||
| @@ -676,6 +301,7 @@ metadata: | |||||||
| spec: | spec: | ||||||
|   target: http://user@cyber.cam.k-space.ee:8080/?action=stream |   target: http://user@cyber.cam.k-space.ee:8080/?action=stream | ||||||
|   secretRef: camera-secrets |   secretRef: camera-secrets | ||||||
|  |   replicas: 1 | ||||||
| --- | --- | ||||||
| apiVersion: k-space.ee/v1alpha1 | apiVersion: k-space.ee/v1alpha1 | ||||||
| kind: Camera | kind: Camera | ||||||
| @@ -684,6 +310,7 @@ metadata: | |||||||
| spec: | spec: | ||||||
|   target: http://user@kitchen.cam.k-space.ee:8080/?action=stream |   target: http://user@kitchen.cam.k-space.ee:8080/?action=stream | ||||||
|   secretRef: camera-secrets |   secretRef: camera-secrets | ||||||
|  |   replicas: 1 | ||||||
| --- | --- | ||||||
| apiVersion: k-space.ee/v1alpha1 | apiVersion: k-space.ee/v1alpha1 | ||||||
| kind: Camera | kind: Camera | ||||||
| @@ -692,6 +319,7 @@ metadata: | |||||||
| spec: | spec: | ||||||
|   target: http://user@back-door.cam.k-space.ee:8080/?action=stream |   target: http://user@back-door.cam.k-space.ee:8080/?action=stream | ||||||
|   secretRef: camera-secrets |   secretRef: camera-secrets | ||||||
|  |   replicas: 1 | ||||||
| --- | --- | ||||||
| apiVersion: k-space.ee/v1alpha1 | apiVersion: k-space.ee/v1alpha1 | ||||||
| kind: Camera | kind: Camera | ||||||
| @@ -700,3 +328,4 @@ metadata: | |||||||
| spec: | spec: | ||||||
|   target: http://user@ground-door.cam.k-space.ee:8080/?action=stream |   target: http://user@ground-door.cam.k-space.ee:8080/?action=stream | ||||||
|   secretRef: camera-secrets |   secretRef: camera-secrets | ||||||
|  |   replicas: 1 | ||||||
|   | |||||||
							
								
								
									
										98
									
								
								camtiler/camera-tiler.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								camtiler/camera-tiler.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,98 @@ | |||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: camera-tiler | ||||||
|  |   annotations: | ||||||
|  |     keel.sh/policy: force | ||||||
|  |     keel.sh/trigger: poll | ||||||
|  | spec: | ||||||
|  |   revisionHistoryLimit: 0 | ||||||
|  |   replicas: 2 | ||||||
|  |   selector: | ||||||
|  |     matchLabels: &selectorLabels | ||||||
|  |       app.kubernetes.io/name: camtiler | ||||||
|  |       component: camera-tiler | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: *selectorLabels | ||||||
|  |     spec: | ||||||
|  |       serviceAccountName: camera-tiler | ||||||
|  |       containers: | ||||||
|  |         - name: camera-tiler | ||||||
|  |           image: harbor.k-space.ee/k-space/camera-tiler:latest | ||||||
|  |           securityContext: | ||||||
|  |             readOnlyRootFilesystem: true | ||||||
|  |             runAsNonRoot: true | ||||||
|  |             runAsUser: 1000 | ||||||
|  |           ports: | ||||||
|  |             - containerPort: 5001 | ||||||
|  |               name: "http" | ||||||
|  |           resources: | ||||||
|  |             requests: | ||||||
|  |               memory: "200Mi" | ||||||
|  |               cpu: "100m" | ||||||
|  |             limits: | ||||||
|  |               memory: "500Mi" | ||||||
|  |               cpu: "4000m" | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Service | ||||||
|  | metadata: | ||||||
|  |   name: camera-tiler | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: camtiler | ||||||
|  |     component: camera-tiler | ||||||
|  | spec: | ||||||
|  |   type: ClusterIP | ||||||
|  |   selector: | ||||||
|  |     app.kubernetes.io/name: camtiler | ||||||
|  |     component: camera-tiler | ||||||
|  |   ports: | ||||||
|  |     - protocol: TCP | ||||||
|  |       port: 5001 | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ServiceAccount | ||||||
|  | metadata: | ||||||
|  |   name: camera-tiler | ||||||
|  | --- | ||||||
|  | kind: Role | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: camera-tiler | ||||||
|  | rules: | ||||||
|  |   - apiGroups: | ||||||
|  |       - "" | ||||||
|  |     resources: | ||||||
|  |       - services | ||||||
|  |     verbs: | ||||||
|  |       - list | ||||||
|  | --- | ||||||
|  | kind: RoleBinding | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: camera-tiler | ||||||
|  | subjects: | ||||||
|  |   - kind: ServiceAccount | ||||||
|  |     name: camera-tiler | ||||||
|  |     apiGroup: "" | ||||||
|  | roleRef: | ||||||
|  |   kind: Role | ||||||
|  |   name: camera-tiler | ||||||
|  |   apiGroup: "" | ||||||
|  | --- | ||||||
|  | apiVersion: monitoring.coreos.com/v1 | ||||||
|  | kind: PodMonitor | ||||||
|  | metadata: | ||||||
|  |   name: camtiler | ||||||
|  | spec: | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: camtiler | ||||||
|  |       component: camera-tiler | ||||||
|  |   podMetricsEndpoints: | ||||||
|  |     - port: http | ||||||
|  |   podTargetLabels: | ||||||
|  |     - app.kubernetes.io/name | ||||||
|  |     - component | ||||||
							
								
								
									
										67
									
								
								camtiler/ingress.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								camtiler/ingress.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | |||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: Ingress | ||||||
|  | metadata: | ||||||
|  |   name: camtiler | ||||||
|  |   annotations: | ||||||
|  |     kubernetes.io/ingress.class: traefik | ||||||
|  |     traefik.ingress.kubernetes.io/router.entrypoints: websecure | ||||||
|  |     traefik.ingress.kubernetes.io/router.middlewares: traefik-sso@kubernetescrd,camtiler-redirect@kubernetescrd | ||||||
|  |     traefik.ingress.kubernetes.io/router.tls: "true" | ||||||
|  |     external-dns.alpha.kubernetes.io/target: traefik.k-space.ee | ||||||
|  | spec: | ||||||
|  |   rules: | ||||||
|  |     - host: cams.k-space.ee | ||||||
|  |       http: | ||||||
|  |         paths: | ||||||
|  |           - pathType: Prefix | ||||||
|  |             path: "/" | ||||||
|  |             backend: | ||||||
|  |               service: | ||||||
|  |                 name: logmower-frontend | ||||||
|  |                 port: | ||||||
|  |                   number: 8080 | ||||||
|  |     - host: cam.k-space.ee | ||||||
|  |       http: | ||||||
|  |         paths: | ||||||
|  |           - pathType: Prefix | ||||||
|  |             path: "/tiled" | ||||||
|  |             backend: | ||||||
|  |               service: | ||||||
|  |                 name: camera-tiler | ||||||
|  |                 port: | ||||||
|  |                   number: 5001 | ||||||
|  |           - pathType: Prefix | ||||||
|  |             path: "/m" | ||||||
|  |             backend: | ||||||
|  |               service: | ||||||
|  |                 name: camera-tiler | ||||||
|  |                 port: | ||||||
|  |                   number: 5001 | ||||||
|  |           - pathType: Prefix | ||||||
|  |             path: "/events" | ||||||
|  |             backend: | ||||||
|  |               service: | ||||||
|  |                 name: logmower-eventsource | ||||||
|  |                 port: | ||||||
|  |                   number: 3002 | ||||||
|  |           - pathType: Prefix | ||||||
|  |             path: "/" | ||||||
|  |             backend: | ||||||
|  |               service: | ||||||
|  |                 name: logmower-frontend | ||||||
|  |                 port: | ||||||
|  |                   number: 8080 | ||||||
|  |   tls: | ||||||
|  |     - hosts: | ||||||
|  |         - "*.k-space.ee" | ||||||
|  | --- | ||||||
|  | apiVersion: traefik.containo.us/v1alpha1 | ||||||
|  | kind: Middleware | ||||||
|  | metadata: | ||||||
|  |   name: redirect | ||||||
|  | spec: | ||||||
|  |   redirectRegex: | ||||||
|  |     regex: ^https://cams.k-space.ee/(.*)$ | ||||||
|  |     replacement: https://cam.k-space.ee/$1 | ||||||
|  |     permanent: false | ||||||
							
								
								
									
										137
									
								
								camtiler/logmower.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								camtiler/logmower.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,137 @@ | |||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: logmower-eventsource | ||||||
|  | spec: | ||||||
|  |   revisionHistoryLimit: 0 | ||||||
|  |   replicas: 2 | ||||||
|  |   selector: | ||||||
|  |     matchLabels: &selectorLabels | ||||||
|  |       app.kubernetes.io/name: camtiler | ||||||
|  |       component: logmower-eventsource | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: *selectorLabels | ||||||
|  |     spec: | ||||||
|  |       containers: | ||||||
|  |         - name: logmower-eventsource | ||||||
|  |           image: harbor.k-space.ee/k-space/logmower-eventsource | ||||||
|  |           ports: | ||||||
|  |             - containerPort: 3002 | ||||||
|  |               name: nodejs | ||||||
|  |           env: | ||||||
|  |             - name: MONGO_COLLECTION | ||||||
|  |               value: eventlog | ||||||
|  |             - name: MONGODB_HOST | ||||||
|  |               valueFrom: | ||||||
|  |                 secretKeyRef: | ||||||
|  |                   name: mongodb-application-readonly | ||||||
|  |                   key: connectionString.standard | ||||||
|  |             - name: BACKEND | ||||||
|  |               value: 'camtiler' | ||||||
|  |             - name: BACKEND_BROKER_URL | ||||||
|  |               value: 'http://logmower-event-broker' | ||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: logmower-event-broker | ||||||
|  | spec: | ||||||
|  |   revisionHistoryLimit: 0 | ||||||
|  |   replicas: 5 | ||||||
|  |   selector: | ||||||
|  |     matchLabels: &selectorLabels | ||||||
|  |       app.kubernetes.io/name: camtiler | ||||||
|  |       component: logmower-event-broker | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: *selectorLabels | ||||||
|  |     spec: | ||||||
|  |       containers: | ||||||
|  |         - name: logmower-event-broker | ||||||
|  |           image: harbor.k-space.ee/k-space/camera-event-broker | ||||||
|  |           ports: | ||||||
|  |             - containerPort: 3000 | ||||||
|  |           env: | ||||||
|  |             - name: AWS_SECRET_ACCESS_KEY | ||||||
|  |               valueFrom: | ||||||
|  |                   secretKeyRef: | ||||||
|  |                     name: minio-secrets | ||||||
|  |                     key: MINIO_ROOT_PASSWORD | ||||||
|  |             - name: AWS_ACCESS_KEY_ID | ||||||
|  |               valueFrom: | ||||||
|  |                   secretKeyRef: | ||||||
|  |                     name: minio-secrets | ||||||
|  |                     key: MINIO_ROOT_USER | ||||||
|  |             - name: MINIO_BUCKET | ||||||
|  |               value: 'application' | ||||||
|  |             - name: MINIO_HOSTNAME | ||||||
|  |               value: 'cams-s3.k-space.ee' | ||||||
|  |             - name: MINIO_PORT | ||||||
|  |               value: '443' | ||||||
|  |             - name: MINIO_SCHEMA | ||||||
|  |               value: 'https' | ||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: logmower-frontend | ||||||
|  | spec: | ||||||
|  |   revisionHistoryLimit: 0 | ||||||
|  |   replicas: 2 | ||||||
|  |   selector: | ||||||
|  |     matchLabels: &selectorLabels | ||||||
|  |       app.kubernetes.io/name: camtiler | ||||||
|  |       component: logmower-frontend | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: *selectorLabels | ||||||
|  |     spec: | ||||||
|  |       containers: | ||||||
|  |         - name: logmower-frontend | ||||||
|  |           image: harbor.k-space.ee/k-space/logmower-frontend | ||||||
|  |           ports: | ||||||
|  |             - containerPort: 8080 | ||||||
|  |               name: http | ||||||
|  |  | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Service | ||||||
|  | metadata: | ||||||
|  |   name: logmower-frontend | ||||||
|  | spec: | ||||||
|  |   type: ClusterIP | ||||||
|  |   selector: | ||||||
|  |     app.kubernetes.io/name: camtiler | ||||||
|  |     component: logmower-frontend | ||||||
|  |   ports: | ||||||
|  |     - protocol: TCP | ||||||
|  |       port: 8080 | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Service | ||||||
|  | metadata: | ||||||
|  |   name: logmower-eventsource | ||||||
|  | spec: | ||||||
|  |   type: ClusterIP | ||||||
|  |   selector: | ||||||
|  |     app.kubernetes.io/name: camtiler | ||||||
|  |     component: logmower-eventsource | ||||||
|  |   ports: | ||||||
|  |     - protocol: TCP | ||||||
|  |       port: 3002 | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Service | ||||||
|  | metadata: | ||||||
|  |   name: logmower-event-broker | ||||||
|  | spec: | ||||||
|  |   type: ClusterIP | ||||||
|  |   selector: | ||||||
|  |       app.kubernetes.io/name: camtiler | ||||||
|  |       component: logmower-event-broker | ||||||
|  |   ports: | ||||||
|  |     - protocol: TCP | ||||||
|  |       port: 80 | ||||||
|  |       targetPort: 3000 | ||||||
| @@ -1 +0,0 @@ | |||||||
| ../shared/minio-support.yml |  | ||||||
							
								
								
									
										199
									
								
								camtiler/minio.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										199
									
								
								camtiler/minio.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,199 @@ | |||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: StatefulSet | ||||||
|  | metadata: | ||||||
|  |   name: minio | ||||||
|  |   labels: | ||||||
|  |      app.kubernetes.io/name: minio | ||||||
|  | spec: | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: minio | ||||||
|  |   serviceName: minio-svc | ||||||
|  |   replicas: 4 | ||||||
|  |   podManagementPolicy: Parallel | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: | ||||||
|  |         app.kubernetes.io/name: minio | ||||||
|  |     spec: | ||||||
|  |       affinity: | ||||||
|  |         podAntiAffinity: | ||||||
|  |           requiredDuringSchedulingIgnoredDuringExecution: | ||||||
|  |             - labelSelector: | ||||||
|  |                 matchExpressions: | ||||||
|  |                   - key: app | ||||||
|  |                     operator: In | ||||||
|  |                     values: | ||||||
|  |                       - minio | ||||||
|  |               topologyKey: kubernetes.io/hostname | ||||||
|  |       nodeSelector: | ||||||
|  |         dedicated: storage | ||||||
|  |       tolerations: | ||||||
|  |         - key: dedicated | ||||||
|  |           operator: Equal | ||||||
|  |           value: storage | ||||||
|  |           effect: NoSchedule | ||||||
|  |       containers: | ||||||
|  |         - name: minio | ||||||
|  |           env: | ||||||
|  |             - name: MINIO_PROMETHEUS_AUTH_TYPE | ||||||
|  |               value: public | ||||||
|  |           envFrom: | ||||||
|  |             - secretRef: | ||||||
|  |                 name: minio-secrets | ||||||
|  |           image: minio/minio:RELEASE.2022-12-12T19-27-27Z | ||||||
|  |           args: | ||||||
|  |             - server | ||||||
|  |             - http://minio-{0...3}.minio-svc.camtiler.svc.cluster.local/data | ||||||
|  |             - --address | ||||||
|  |             - 0.0.0.0:9000 | ||||||
|  |             - --console-address | ||||||
|  |             - 0.0.0.0:9001 | ||||||
|  |           ports: | ||||||
|  |             - containerPort: 9000 | ||||||
|  |               name: http | ||||||
|  |             - containerPort: 9001 | ||||||
|  |               name: console | ||||||
|  |           readinessProbe: | ||||||
|  |             httpGet: | ||||||
|  |               path: /minio/health/ready | ||||||
|  |               port: 9000 | ||||||
|  |             initialDelaySeconds: 2 | ||||||
|  |             periodSeconds: 5 | ||||||
|  |           resources: | ||||||
|  |             requests: | ||||||
|  |               cpu: 300m | ||||||
|  |               memory: 1Gi | ||||||
|  |             limits: | ||||||
|  |               cpu: 4000m | ||||||
|  |               memory: 2Gi | ||||||
|  |           volumeMounts: | ||||||
|  |             - name: minio-data | ||||||
|  |               mountPath: /data | ||||||
|  |   volumeClaimTemplates: | ||||||
|  |     - metadata: | ||||||
|  |         name: minio-data | ||||||
|  |       spec: | ||||||
|  |         accessModes: | ||||||
|  |           - ReadWriteOnce | ||||||
|  |         resources: | ||||||
|  |           requests: | ||||||
|  |             storage: '30Gi' | ||||||
|  |         storageClassName: minio | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Service | ||||||
|  | metadata: | ||||||
|  |   name: minio | ||||||
|  | spec: | ||||||
|  |   sessionAffinity: ClientIP | ||||||
|  |   type: ClusterIP | ||||||
|  |   ports: | ||||||
|  |     - port: 80 | ||||||
|  |       targetPort: 9000 | ||||||
|  |       protocol: TCP | ||||||
|  |       name: http | ||||||
|  |   selector: | ||||||
|  |     app.kubernetes.io/name: minio | ||||||
|  | --- | ||||||
|  | kind: Service | ||||||
|  | apiVersion: v1 | ||||||
|  | metadata: | ||||||
|  |   name: minio-svc | ||||||
|  | spec: | ||||||
|  |   selector: | ||||||
|  |     app.kubernetes.io/name: minio | ||||||
|  |   clusterIP: None | ||||||
|  |   publishNotReadyAddresses: true | ||||||
|  |   ports: | ||||||
|  |     - name: http | ||||||
|  |       port: 9000 | ||||||
|  |     - name: console | ||||||
|  |       port: 9001 | ||||||
|  | --- | ||||||
|  | apiVersion: monitoring.coreos.com/v1 | ||||||
|  | kind: PodMonitor | ||||||
|  | metadata: | ||||||
|  |   name: minio | ||||||
|  | spec: | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: minio | ||||||
|  |   podMetricsEndpoints: | ||||||
|  |     - port: http | ||||||
|  |       path: /minio/v2/metrics/node | ||||||
|  |   podTargetLabels: | ||||||
|  |     - app.kubernetes.io/name | ||||||
|  | --- | ||||||
|  | apiVersion: monitoring.coreos.com/v1 | ||||||
|  | kind: ServiceMonitor | ||||||
|  | metadata: | ||||||
|  |   name: minio | ||||||
|  | spec: | ||||||
|  |   endpoints: | ||||||
|  |   - bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token | ||||||
|  |     honorLabels: true | ||||||
|  |     port: minio | ||||||
|  |     path: /minio/v2/metrics/cluster | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: minio | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: Ingress | ||||||
|  | metadata: | ||||||
|  |   name: minio | ||||||
|  |   annotations: | ||||||
|  |     kubernetes.io/ingress.class: traefik | ||||||
|  |     traefik.ingress.kubernetes.io/router.entrypoints: websecure | ||||||
|  |     traefik.ingress.kubernetes.io/router.tls: "true" | ||||||
|  |     external-dns.alpha.kubernetes.io/target: traefik.k-space.ee | ||||||
|  | spec: | ||||||
|  |   rules: | ||||||
|  |     - host: cams-s3.k-space.ee | ||||||
|  |       http: | ||||||
|  |         paths: | ||||||
|  |           - pathType: Prefix | ||||||
|  |             path: "/" | ||||||
|  |             backend: | ||||||
|  |               service: | ||||||
|  |                 name: minio-svc | ||||||
|  |                 port: | ||||||
|  |                   name: http | ||||||
|  |   tls: | ||||||
|  |     - hosts: | ||||||
|  |         - "*.k-space.ee" | ||||||
|  | --- | ||||||
|  | apiVersion: monitoring.coreos.com/v1 | ||||||
|  | kind: PrometheusRule | ||||||
|  | metadata: | ||||||
|  |   name: minio | ||||||
|  | spec: | ||||||
|  |   groups: | ||||||
|  |     - name: minio | ||||||
|  |       rules: | ||||||
|  |         - alert: MinioClusterDiskOffline | ||||||
|  |           expr: minio_cluster_disk_offline_total > 0 | ||||||
|  |           for: 0m | ||||||
|  |           labels: | ||||||
|  |             severity: critical | ||||||
|  |           annotations: | ||||||
|  |             summary: Minio cluster disk offline (instance {{ $labels.instance }}) | ||||||
|  |             description: "Minio cluster disk is offline" | ||||||
|  |         - alert: MinioNodeDiskOffline | ||||||
|  |           expr: minio_cluster_nodes_offline_total > 0 | ||||||
|  |           for: 0m | ||||||
|  |           labels: | ||||||
|  |             severity: critical | ||||||
|  |           annotations: | ||||||
|  |             summary: Minio node disk offline (instance {{ $labels.instance }}) | ||||||
|  |             description: "Minio cluster node disk is offline" | ||||||
|  |         - alert: MinioDiskSpaceUsage | ||||||
|  |           expr: disk_storage_available / disk_storage_total * 100 < 10 | ||||||
|  |           for: 0m | ||||||
|  |           labels: | ||||||
|  |             severity: warning | ||||||
|  |           annotations: | ||||||
|  |             summary: Minio disk space usage (instance {{ $labels.instance }}) | ||||||
|  |             description: "Minio available free space is low (< 10%)" | ||||||
| @@ -7,9 +7,10 @@ spec: | |||||||
|   additionalMongodConfig: |   additionalMongodConfig: | ||||||
|     systemLog: |     systemLog: | ||||||
|       quiet: true |       quiet: true | ||||||
|   members: 3 |   members: 2 | ||||||
|  |   arbiters: 1 | ||||||
|   type: ReplicaSet |   type: ReplicaSet | ||||||
|   version: "5.0.9" |   version: "6.0.3" | ||||||
|   security: |   security: | ||||||
|     authentication: |     authentication: | ||||||
|       modes: ["SCRAM"] |       modes: ["SCRAM"] | ||||||
| @@ -27,7 +28,7 @@ spec: | |||||||
|       passwordSecretRef: |       passwordSecretRef: | ||||||
|         name: mongodb-application-readonly-password |         name: mongodb-application-readonly-password | ||||||
|       roles: |       roles: | ||||||
|         - name: readOnly |         - name: read | ||||||
|           db: application |           db: application | ||||||
|       scramCredentialsSecretName: mongodb-application-readonly |       scramCredentialsSecretName: mongodb-application-readonly | ||||||
|   statefulSet: |   statefulSet: | ||||||
| @@ -35,6 +36,24 @@ spec: | |||||||
|       logLevel: WARN |       logLevel: WARN | ||||||
|       template: |       template: | ||||||
|         spec: |         spec: | ||||||
|  |           containers: | ||||||
|  |             - name: mongod | ||||||
|  |               resources: | ||||||
|  |                 requests: | ||||||
|  |                   cpu: 100m | ||||||
|  |                   memory: 512Mi | ||||||
|  |                 limits: | ||||||
|  |                   cpu: 500m | ||||||
|  |                   memory: 1Gi | ||||||
|  |               volumeMounts: | ||||||
|  |                 - name: journal-volume | ||||||
|  |                   mountPath: /data/journal | ||||||
|  |             - name: mongodb-agent | ||||||
|  |               resources: | ||||||
|  |                 requests: | ||||||
|  |                   cpu: 1m | ||||||
|  |                   memory: 100Mi | ||||||
|  |                 limits: {} | ||||||
|           affinity: |           affinity: | ||||||
|             podAntiAffinity: |             podAntiAffinity: | ||||||
|               requiredDuringSchedulingIgnoredDuringExecution: |               requiredDuringSchedulingIgnoredDuringExecution: | ||||||
| @@ -55,8 +74,21 @@ spec: | |||||||
|       volumeClaimTemplates: |       volumeClaimTemplates: | ||||||
|         - metadata: |         - metadata: | ||||||
|             name: logs-volume |             name: logs-volume | ||||||
|  |             labels: | ||||||
|  |               usecase: logs | ||||||
|           spec: |           spec: | ||||||
|             storageClassName: local-path |             storageClassName: mongo | ||||||
|  |             accessModes: | ||||||
|  |               - ReadWriteOnce | ||||||
|  |             resources: | ||||||
|  |               requests: | ||||||
|  |                 storage: 100Mi | ||||||
|  |         - metadata: | ||||||
|  |             name: journal-volume | ||||||
|  |             labels: | ||||||
|  |               usecase: journal | ||||||
|  |           spec: | ||||||
|  |             storageClassName: mongo | ||||||
|             accessModes: |             accessModes: | ||||||
|             - ReadWriteOnce |             - ReadWriteOnce | ||||||
|             resources: |             resources: | ||||||
| @@ -64,67 +96,12 @@ spec: | |||||||
|                 storage: 512Mi |                 storage: 512Mi | ||||||
|         - metadata: |         - metadata: | ||||||
|             name: data-volume |             name: data-volume | ||||||
|  |             labels: | ||||||
|  |               usecase: data | ||||||
|           spec: |           spec: | ||||||
|             storageClassName: local-path |             storageClassName: mongo | ||||||
|             accessModes: |             accessModes: | ||||||
|             - ReadWriteOnce |             - ReadWriteOnce | ||||||
|             resources: |             resources: | ||||||
|               requests: |               requests: | ||||||
|                 storage: 2Gi |                 storage: 2Gi | ||||||
| --- |  | ||||||
| apiVersion: minio.min.io/v2 |  | ||||||
| kind: Tenant |  | ||||||
| metadata: |  | ||||||
|   name: minio |  | ||||||
|   annotations: |  | ||||||
|     prometheus.io/path: /minio/prometheus/metrics |  | ||||||
|     prometheus.io/port: "9000" |  | ||||||
|     prometheus.io/scrape: "true" |  | ||||||
| spec: |  | ||||||
|   credsSecret: |  | ||||||
|     name: minio-secret |  | ||||||
|   buckets: |  | ||||||
|     - name: application |  | ||||||
|   requestAutoCert: false |  | ||||||
|   users: |  | ||||||
|     - name: minio-user-0 |  | ||||||
|   pools: |  | ||||||
|     - name: pool-0 |  | ||||||
|       affinity: |  | ||||||
|         podAntiAffinity: |  | ||||||
|           requiredDuringSchedulingIgnoredDuringExecution: |  | ||||||
|             - labelSelector: |  | ||||||
|                 matchExpressions: |  | ||||||
|                   - key: v1.min.io/tenant |  | ||||||
|                     operator: In |  | ||||||
|                     values: |  | ||||||
|                       - minio |  | ||||||
|                   - key: v1.min.io/pool |  | ||||||
|                     operator: In |  | ||||||
|                     values: |  | ||||||
|                       - pool-0 |  | ||||||
|               topologyKey: kubernetes.io/hostname |  | ||||||
|       resources: |  | ||||||
|         requests: |  | ||||||
|           cpu: '1' |  | ||||||
|           memory: 512Mi |  | ||||||
|       servers: 4 |  | ||||||
|       volumesPerServer: 1 |  | ||||||
|       volumeClaimTemplate: |  | ||||||
|         metadata: |  | ||||||
|           name: data |  | ||||||
|         spec: |  | ||||||
|           accessModes: |  | ||||||
|             - ReadWriteOnce |  | ||||||
|           resources: |  | ||||||
|             requests: |  | ||||||
|               storage: '30Gi' |  | ||||||
|           storageClassName: local-path |  | ||||||
|         status: {} |  | ||||||
|       nodeSelector: |  | ||||||
|         dedicated: storage |  | ||||||
|       tolerations: |  | ||||||
|         - key: dedicated |  | ||||||
|           operator: Equal |  | ||||||
|           value: storage |  | ||||||
|           effect: NoSchedule |  | ||||||
							
								
								
									
										192
									
								
								camtiler/network-policies.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								camtiler/network-policies.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,192 @@ | |||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: NetworkPolicy | ||||||
|  | metadata: | ||||||
|  |   name: camera-motion-detect | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       component: camera-motion-detect | ||||||
|  |   policyTypes: | ||||||
|  |     - Ingress | ||||||
|  |     - Egress | ||||||
|  |   ingress: | ||||||
|  |     - from: | ||||||
|  |         - podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: camtiler | ||||||
|  |               component: camera-tiler | ||||||
|  |     - from: | ||||||
|  |         - namespaceSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               kubernetes.io/metadata.name: prometheus-operator | ||||||
|  |           podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: prometheus | ||||||
|  |   egress: | ||||||
|  |     - to: | ||||||
|  |         - ipBlock: | ||||||
|  |             # Permit access to cameras outside the cluster | ||||||
|  |             cidr: 100.102.0.0/16 | ||||||
|  |     - to: | ||||||
|  |         - podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app: mongodb-svc | ||||||
|  |       ports: | ||||||
|  |         - port: 27017 | ||||||
|  |     - to: | ||||||
|  |         - podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: minio | ||||||
|  |       ports: | ||||||
|  |         - port: 9000 | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: NetworkPolicy | ||||||
|  | metadata: | ||||||
|  |   name: camera-tiler | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: camtiler | ||||||
|  |       component: camera-tiler | ||||||
|  |   policyTypes: | ||||||
|  |     - Ingress | ||||||
|  |     - Egress | ||||||
|  |   egress: | ||||||
|  |     - to: | ||||||
|  |         - podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               component: camera-motion-detect | ||||||
|  |       ports: | ||||||
|  |         - port: 5000 | ||||||
|  |   ingress: | ||||||
|  |     - from: | ||||||
|  |         - namespaceSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               kubernetes.io/metadata.name: prometheus-operator | ||||||
|  |           podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: prometheus | ||||||
|  |     - from: | ||||||
|  |         - namespaceSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               kubernetes.io/metadata.name: traefik | ||||||
|  |           podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: traefik | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: NetworkPolicy | ||||||
|  | metadata: | ||||||
|  |   name: logmower-eventsource | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: camtiler | ||||||
|  |       component: logmower-eventsource | ||||||
|  |   policyTypes: | ||||||
|  |     - Ingress | ||||||
|  |     - Egress | ||||||
|  |   egress: | ||||||
|  |     - to: | ||||||
|  |         - podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app: mongodb-svc | ||||||
|  |         - podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               component: logmower-event-broker | ||||||
|  |   ingress: | ||||||
|  |     - from: | ||||||
|  |         - namespaceSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               kubernetes.io/metadata.name: traefik | ||||||
|  |           podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: traefik | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: NetworkPolicy | ||||||
|  | metadata: | ||||||
|  |   name: logmower-event-broker | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: camtiler | ||||||
|  |       component: logmower-event-broker | ||||||
|  |   policyTypes: | ||||||
|  |     - Ingress | ||||||
|  |     - Egress | ||||||
|  |   egress: | ||||||
|  |     - to: | ||||||
|  |         # Minio access via Traefik's public endpoint | ||||||
|  |         - namespaceSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               kubernetes.io/metadata.name: traefik | ||||||
|  |           podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: traefik | ||||||
|  |   ingress: | ||||||
|  |     - from: | ||||||
|  |         - podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               component: logmower-eventsource | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: NetworkPolicy | ||||||
|  | metadata: | ||||||
|  |   name: logmower-frontend | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: camtiler | ||||||
|  |       component: logmower-frontend | ||||||
|  |   policyTypes: | ||||||
|  |     - Ingress | ||||||
|  |     - Egress | ||||||
|  |   ingress: | ||||||
|  |     - from: | ||||||
|  |         - namespaceSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               kubernetes.io/metadata.name: traefik | ||||||
|  |           podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: traefik | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: NetworkPolicy | ||||||
|  | metadata: | ||||||
|  |   name: minio | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: minio | ||||||
|  |   policyTypes: | ||||||
|  |     - Ingress | ||||||
|  |     - Egress | ||||||
|  |   egress: | ||||||
|  |     - ports: | ||||||
|  |         - port: http | ||||||
|  |       to: | ||||||
|  |         - podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: minio | ||||||
|  |   ingress: | ||||||
|  |     - ports: | ||||||
|  |         - port: http | ||||||
|  |       from: | ||||||
|  |         - podSelector: {} | ||||||
|  |     - from: | ||||||
|  |         - namespaceSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               kubernetes.io/metadata.name: traefik | ||||||
|  |           podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: traefik | ||||||
|  |     - from: | ||||||
|  |         - namespaceSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               kubernetes.io/metadata.name: prometheus-operator | ||||||
|  |           podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: prometheus | ||||||
| @@ -2,9 +2,9 @@ Before applying replace the secret with the actual one. | |||||||
|  |  | ||||||
| For debugging add `- --log-level=debug`: | For debugging add `- --log-level=debug`: | ||||||
|  |  | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| kubectl apply -n external-dns -f external-dns.yml | wget https://raw.githubusercontent.com/kubernetes-sigs/external-dns/master/docs/contributing/crd-source/crd-manifest.yaml -O crd.yml | ||||||
|  | kubectl apply -n external-dns -f application.yml -f crd.yml | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| Insert TSIG secret: | Insert TSIG secret: | ||||||
|   | |||||||
| @@ -24,6 +24,20 @@ rules: | |||||||
|   - get |   - get | ||||||
|   - list |   - list | ||||||
|   - watch |   - watch | ||||||
|  | - apiGroups: | ||||||
|  |   - externaldns.k8s.io | ||||||
|  |   resources: | ||||||
|  |   - dnsendpoints | ||||||
|  |   verbs: | ||||||
|  |   - get | ||||||
|  |   - watch | ||||||
|  |   - list | ||||||
|  | - apiGroups: | ||||||
|  |   - externaldns.k8s.io | ||||||
|  |   resources: | ||||||
|  |   - dnsendpoints/status | ||||||
|  |   verbs: | ||||||
|  |   - update | ||||||
| --- | --- | ||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
| kind: ServiceAccount | kind: ServiceAccount | ||||||
| @@ -63,7 +77,7 @@ spec: | |||||||
|       serviceAccountName: external-dns |       serviceAccountName: external-dns | ||||||
|       containers: |       containers: | ||||||
|       - name: external-dns |       - name: external-dns | ||||||
|         image: k8s.gcr.io/external-dns/external-dns:v0.10.2 |         image: k8s.gcr.io/external-dns/external-dns:v0.13.1 | ||||||
|         envFrom: |         envFrom: | ||||||
|         - secretRef: |         - secretRef: | ||||||
|             name: tsig-secret |             name: tsig-secret | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ data: | |||||||
|   TRIVY_ADAPTER_URL: "http://harbor-trivy:8080" |   TRIVY_ADAPTER_URL: "http://harbor-trivy:8080" | ||||||
|   REGISTRY_STORAGE_PROVIDER_NAME: "filesystem" |   REGISTRY_STORAGE_PROVIDER_NAME: "filesystem" | ||||||
|   WITH_CHARTMUSEUM: "false" |   WITH_CHARTMUSEUM: "false" | ||||||
|   LOG_LEVEL: "info" |   LOG_LEVEL: "warning" | ||||||
|   CONFIG_PATH: "/etc/core/app.conf" |   CONFIG_PATH: "/etc/core/app.conf" | ||||||
|   CHART_CACHE_DRIVER: "redis" |   CHART_CACHE_DRIVER: "redis" | ||||||
|   _REDIS_URL_CORE: "redis://harbor-redis:6379/0?idle_timeout_seconds=30" |   _REDIS_URL_CORE: "redis://harbor-redis:6379/0?idle_timeout_seconds=30" | ||||||
|   | |||||||
							
								
								
									
										165
									
								
								kube-system/descheduler.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										165
									
								
								kube-system/descheduler.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,165 @@ | |||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ServiceAccount | ||||||
|  | metadata: | ||||||
|  |   name: descheduler | ||||||
|  |   namespace: kube-system | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: descheduler | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ConfigMap | ||||||
|  | metadata: | ||||||
|  |   name: descheduler | ||||||
|  |   namespace: kube-system | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: descheduler | ||||||
|  | data: | ||||||
|  |   policy.yaml: | | ||||||
|  |     apiVersion: "descheduler/v1alpha1" | ||||||
|  |     kind: "DeschedulerPolicy" | ||||||
|  |     strategies: | ||||||
|  |       LowNodeUtilization: | ||||||
|  |         enabled: true | ||||||
|  |         params: | ||||||
|  |           nodeResourceUtilizationThresholds: | ||||||
|  |             targetThresholds: | ||||||
|  |               cpu: 50 | ||||||
|  |               memory: 50 | ||||||
|  |               pods: 50 | ||||||
|  |             thresholds: | ||||||
|  |               cpu: 20 | ||||||
|  |               memory: 20 | ||||||
|  |               pods: 20 | ||||||
|  |       RemoveDuplicates: | ||||||
|  |         enabled: true | ||||||
|  |       RemovePodsHavingTooManyRestarts: | ||||||
|  |         enabled: true | ||||||
|  |         params: | ||||||
|  |           podsHavingTooManyRestarts: | ||||||
|  |             includingInitContainers: true | ||||||
|  |             podRestartThreshold: 100 | ||||||
|  |       RemovePodsViolatingInterPodAntiAffinity: | ||||||
|  |         enabled: true | ||||||
|  |       RemovePodsViolatingNodeAffinity: | ||||||
|  |         enabled: true | ||||||
|  |         params: | ||||||
|  |           nodeAffinityType: | ||||||
|  |           - requiredDuringSchedulingIgnoredDuringExecution | ||||||
|  |       RemovePodsViolatingNodeTaints: | ||||||
|  |         enabled: true | ||||||
|  |       RemovePodsViolatingTopologySpreadConstraint: | ||||||
|  |         enabled: true | ||||||
|  |         params: | ||||||
|  |           includeSoftConstraints: false | ||||||
|  | --- | ||||||
|  | kind: ClusterRole | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: descheduler | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: descheduler | ||||||
|  | rules: | ||||||
|  | - apiGroups: ["events.k8s.io"] | ||||||
|  |   resources: ["events"] | ||||||
|  |   verbs: ["create", "update"] | ||||||
|  | - apiGroups: [""] | ||||||
|  |   resources: ["nodes"] | ||||||
|  |   verbs: ["get", "watch", "list"] | ||||||
|  | - apiGroups: [""] | ||||||
|  |   resources: ["namespaces"] | ||||||
|  |   verbs: ["get", "watch", "list"] | ||||||
|  | - apiGroups: [""] | ||||||
|  |   resources: ["pods"] | ||||||
|  |   verbs: ["get", "watch", "list", "delete"] | ||||||
|  | - apiGroups: [""] | ||||||
|  |   resources: ["pods/eviction"] | ||||||
|  |   verbs: ["create"] | ||||||
|  | - apiGroups: ["scheduling.k8s.io"] | ||||||
|  |   resources: ["priorityclasses"] | ||||||
|  |   verbs: ["get", "watch", "list"] | ||||||
|  | - apiGroups: ["coordination.k8s.io"] | ||||||
|  |   resources: ["leases"] | ||||||
|  |   verbs: ["create", "update"] | ||||||
|  | - apiGroups: ["coordination.k8s.io"] | ||||||
|  |   resources: ["leases"] | ||||||
|  |   resourceNames: ["descheduler"] | ||||||
|  |   verbs: ["get", "patch", "delete"] | ||||||
|  | --- | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | kind: ClusterRoleBinding | ||||||
|  | metadata: | ||||||
|  |   name: descheduler | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: descheduler | ||||||
|  | roleRef: | ||||||
|  |   apiGroup: rbac.authorization.k8s.io | ||||||
|  |   kind: ClusterRole | ||||||
|  |   name: descheduler | ||||||
|  | subjects: | ||||||
|  |   - kind: ServiceAccount | ||||||
|  |     name: descheduler | ||||||
|  |     namespace: kube-system | ||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: descheduler | ||||||
|  |   namespace: kube-system | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: descheduler | ||||||
|  | spec: | ||||||
|  |   replicas: 2 | ||||||
|  |   selector: | ||||||
|  |     matchLabels: &selectorLabels | ||||||
|  |       app.kubernetes.io/name: descheduler | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: *selectorLabels | ||||||
|  |     spec: | ||||||
|  |       priorityClassName: system-cluster-critical | ||||||
|  |       serviceAccountName: descheduler | ||||||
|  |       containers: | ||||||
|  |         - name: descheduler | ||||||
|  |           image: "k8s.gcr.io/descheduler/descheduler:v0.25.1" | ||||||
|  |           imagePullPolicy: IfNotPresent | ||||||
|  |           command: | ||||||
|  |             - "/bin/descheduler" | ||||||
|  |           args: | ||||||
|  |             - "--policy-config-file" | ||||||
|  |             - "/policy-dir/policy.yaml" | ||||||
|  |             - "--descheduling-interval" | ||||||
|  |             - 5m | ||||||
|  |             - "--v" | ||||||
|  |             - "3" | ||||||
|  |             - --leader-elect=true | ||||||
|  |           ports: | ||||||
|  |             - containerPort: 10258 | ||||||
|  |               protocol: TCP | ||||||
|  |           livenessProbe: | ||||||
|  |             failureThreshold: 3 | ||||||
|  |             httpGet: | ||||||
|  |               path: /healthz | ||||||
|  |               port: 10258 | ||||||
|  |               scheme: HTTPS | ||||||
|  |             initialDelaySeconds: 3 | ||||||
|  |             periodSeconds: 10 | ||||||
|  |           resources: | ||||||
|  |             requests: | ||||||
|  |               cpu: 500m | ||||||
|  |               memory: 256Mi | ||||||
|  |           securityContext: | ||||||
|  |             allowPrivilegeEscalation: false | ||||||
|  |             capabilities: | ||||||
|  |               drop: | ||||||
|  |                 - ALL | ||||||
|  |             privileged: false | ||||||
|  |             readOnlyRootFilesystem: true | ||||||
|  |             runAsNonRoot: true | ||||||
|  |           volumeMounts: | ||||||
|  |             - mountPath: /policy-dir | ||||||
|  |               name: policy-volume | ||||||
|  |       volumes: | ||||||
|  |         - name: policy-volume | ||||||
|  |           configMap: | ||||||
|  |             name: descheduler | ||||||
| @@ -159,7 +159,9 @@ spec: | |||||||
|     spec: |     spec: | ||||||
|       automountServiceAccountToken: true |       automountServiceAccountToken: true | ||||||
|       containers: |       containers: | ||||||
|       - image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.6.0 |       - image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.7.0 | ||||||
|  |         args: | ||||||
|  |           - --metric-labels-allowlist=pods=[*] | ||||||
|         livenessProbe: |         livenessProbe: | ||||||
|           httpGet: |           httpGet: | ||||||
|             path: /healthz |             path: /healthz | ||||||
| @@ -308,14 +310,6 @@ spec: | |||||||
|           annotations: |           annotations: | ||||||
|             summary: Kubernetes Volume out of disk space (instance {{ $labels.instance }}) |             summary: Kubernetes Volume out of disk space (instance {{ $labels.instance }}) | ||||||
|             description: "Volume is almost full (< 10% left)\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}" |             description: "Volume is almost full (< 10% left)\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}" | ||||||
|         - alert: KubernetesVolumeFullInFourDays |  | ||||||
|           expr: predict_linear(kubelet_volume_stats_available_bytes[6h], 4 * 24 * 3600) < 0 |  | ||||||
|           for: 0m |  | ||||||
|           labels: |  | ||||||
|             severity: critical |  | ||||||
|           annotations: |  | ||||||
|             summary: Kubernetes Volume full in four days (instance {{ $labels.instance }}) |  | ||||||
|             description: "{{ $labels.namespace }}/{{ $labels.persistentvolumeclaim }} is expected to fill up within four days. Currently {{ $value | humanize }}% is available.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}" |  | ||||||
|         - alert: KubernetesPersistentvolumeError |         - alert: KubernetesPersistentvolumeError | ||||||
|           expr: kube_persistentvolume_status_phase{phase=~"Failed|Pending", job="kube-state-metrics"} > 0 |           expr: kube_persistentvolume_status_phase{phase=~"Failed|Pending", job="kube-state-metrics"} > 0 | ||||||
|           for: 0m |           for: 0m | ||||||
| @@ -429,21 +423,13 @@ spec: | |||||||
|             summary: Kubernetes DaemonSet rollout stuck (instance {{ $labels.instance }}) |             summary: Kubernetes DaemonSet rollout stuck (instance {{ $labels.instance }}) | ||||||
|             description: "Some Pods of DaemonSet are not scheduled or not ready\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}" |             description: "Some Pods of DaemonSet are not scheduled or not ready\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}" | ||||||
|         - alert: KubernetesDaemonsetMisscheduled |         - alert: KubernetesDaemonsetMisscheduled | ||||||
|           expr: kube_daemonset_status_number_misscheduled > 0 |           expr: sum by (namespace, daemonset) (kube_daemonset_status_number_misscheduled) > 0 | ||||||
|           for: 1m |           for: 1m | ||||||
|           labels: |           labels: | ||||||
|             severity: critical |             severity: critical | ||||||
|           annotations: |           annotations: | ||||||
|             summary: Kubernetes DaemonSet misscheduled (instance {{ $labels.instance }}) |             summary: Kubernetes DaemonSet misscheduled (instance {{ $labels.instance }}) | ||||||
|             description: "Some DaemonSet Pods are running where they are not supposed to run\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}" |             description: "Some DaemonSet Pods are running where they are not supposed to run\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}" | ||||||
|         - alert: KubernetesCronjobTooLong |  | ||||||
|           expr: time() - kube_cronjob_next_schedule_time > 3600 |  | ||||||
|           for: 0m |  | ||||||
|           labels: |  | ||||||
|             severity: warning |  | ||||||
|           annotations: |  | ||||||
|             summary: Kubernetes CronJob too long (instance {{ $labels.instance }}) |  | ||||||
|             description: "CronJob {{ $labels.namespace }}/{{ $labels.cronjob }} is taking more than 1h to complete.\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}" |  | ||||||
|         - alert: KubernetesJobSlowCompletion |         - alert: KubernetesJobSlowCompletion | ||||||
|           expr: kube_job_spec_completions - kube_job_status_succeeded > 0 |           expr: kube_job_spec_completions - kube_job_status_succeeded > 0 | ||||||
|           for: 12h |           for: 12h | ||||||
|   | |||||||
							
								
								
									
										491
									
								
								logmower/application.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										491
									
								
								logmower/application.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,491 @@ | |||||||
|  | --- | ||||||
|  | apiVersion: codemowers.io/v1alpha1 | ||||||
|  | kind: GeneratedSecret | ||||||
|  | metadata: | ||||||
|  |   name: logmower-readwrite-password | ||||||
|  | spec: | ||||||
|  |   mapping: | ||||||
|  |     - key: password | ||||||
|  |       value: "%(password)s" | ||||||
|  | --- | ||||||
|  | apiVersion: codemowers.io/v1alpha1 | ||||||
|  | kind: GeneratedSecret | ||||||
|  | metadata: | ||||||
|  |   name: logmower-readonly-password | ||||||
|  | spec: | ||||||
|  |   mapping: | ||||||
|  |     - key: password | ||||||
|  |       value: "%(password)s" | ||||||
|  | --- | ||||||
|  | apiVersion: mongodbcommunity.mongodb.com/v1 | ||||||
|  | kind: MongoDBCommunity | ||||||
|  | metadata: | ||||||
|  |   name: logmower-mongodb | ||||||
|  | spec: | ||||||
|  |   additionalMongodConfig: | ||||||
|  |     systemLog: | ||||||
|  |       quiet: true | ||||||
|  |   members: 2 | ||||||
|  |   arbiters: 1 | ||||||
|  |   type: ReplicaSet | ||||||
|  |   version: "6.0.3" | ||||||
|  |   security: | ||||||
|  |     authentication: | ||||||
|  |       modes: ["SCRAM"] | ||||||
|  |   users: | ||||||
|  |     - name: readwrite | ||||||
|  |       db: application | ||||||
|  |       passwordSecretRef: | ||||||
|  |         name: logmower-readwrite-password | ||||||
|  |       roles: | ||||||
|  |         - name: readWrite | ||||||
|  |           db: application | ||||||
|  |       scramCredentialsSecretName: logmower-readwrite | ||||||
|  |     - name: readonly | ||||||
|  |       db: application | ||||||
|  |       passwordSecretRef: | ||||||
|  |         name: logmower-readonly-password | ||||||
|  |       roles: | ||||||
|  |         - name: read | ||||||
|  |           db: application | ||||||
|  |       scramCredentialsSecretName: logmower-readonly | ||||||
|  |   statefulSet: | ||||||
|  |     spec: | ||||||
|  |       logLevel: WARN | ||||||
|  |       template: | ||||||
|  |         spec: | ||||||
|  |           containers: | ||||||
|  |             - name: mongod | ||||||
|  |               resources: | ||||||
|  |                 requests: | ||||||
|  |                   cpu: 100m | ||||||
|  |                   memory: 1Gi | ||||||
|  |                 limits: | ||||||
|  |                   cpu: 4000m | ||||||
|  |                   memory: 1Gi | ||||||
|  |               volumeMounts: | ||||||
|  |                 - name: journal-volume | ||||||
|  |                   mountPath: /data/journal | ||||||
|  |             - name: mongodb-agent | ||||||
|  |               resources: | ||||||
|  |                 requests: | ||||||
|  |                   cpu: 1m | ||||||
|  |                   memory: 100Mi | ||||||
|  |                 limits: {} | ||||||
|  |           affinity: | ||||||
|  |             podAntiAffinity: | ||||||
|  |               requiredDuringSchedulingIgnoredDuringExecution: | ||||||
|  |                 - labelSelector: | ||||||
|  |                     matchExpressions: | ||||||
|  |                       - key: app | ||||||
|  |                         operator: In | ||||||
|  |                         values: | ||||||
|  |                           - logmower-mongodb-svc | ||||||
|  |                   topologyKey: kubernetes.io/hostname | ||||||
|  |           nodeSelector: | ||||||
|  |             dedicated: monitoring | ||||||
|  |           tolerations: | ||||||
|  |             - key: dedicated | ||||||
|  |               operator: Equal | ||||||
|  |               value: monitoring | ||||||
|  |               effect: NoSchedule | ||||||
|  |       volumeClaimTemplates: | ||||||
|  |         - metadata: | ||||||
|  |             name: logs-volume | ||||||
|  |             labels: | ||||||
|  |               usecase: logs | ||||||
|  |           spec: | ||||||
|  |             storageClassName: mongo | ||||||
|  |             accessModes: | ||||||
|  |             - ReadWriteOnce | ||||||
|  |             resources: | ||||||
|  |               requests: | ||||||
|  |                 storage: 100Mi | ||||||
|  |         - metadata: | ||||||
|  |             name: journal-volume | ||||||
|  |             labels: | ||||||
|  |               usecase: journal | ||||||
|  |           spec: | ||||||
|  |             storageClassName: mongo | ||||||
|  |             accessModes: | ||||||
|  |             - ReadWriteOnce | ||||||
|  |             resources: | ||||||
|  |               requests: | ||||||
|  |                 storage: 512Mi | ||||||
|  |         - metadata: | ||||||
|  |             name: data-volume | ||||||
|  |             labels: | ||||||
|  |               usecase: data | ||||||
|  |           spec: | ||||||
|  |             storageClassName: mongo | ||||||
|  |             accessModes: | ||||||
|  |             - ReadWriteOnce | ||||||
|  |             resources: | ||||||
|  |               requests: | ||||||
|  |                 storage: 10Gi | ||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: DaemonSet | ||||||
|  | metadata: | ||||||
|  |   name: logmower-shipper | ||||||
|  | spec: | ||||||
|  |   updateStrategy: | ||||||
|  |     type: RollingUpdate | ||||||
|  |     rollingUpdate: | ||||||
|  |       maxUnavailable: 50% | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app: logmower-shipper | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: | ||||||
|  |         app: logmower-shipper | ||||||
|  |     spec: | ||||||
|  |       serviceAccountName: logmower-shipper | ||||||
|  |       containers: | ||||||
|  |         - name: logmower-shipper | ||||||
|  |           image: harbor.k-space.ee/k-space/logmower-shipper-prototype:latest | ||||||
|  |           env: | ||||||
|  |             - name: NODE_NAME | ||||||
|  |               valueFrom: | ||||||
|  |                 fieldRef: | ||||||
|  |                   fieldPath: spec.nodeName | ||||||
|  |             - name: MONGO_URI | ||||||
|  |               valueFrom: | ||||||
|  |                 secretKeyRef: | ||||||
|  |                   name: logmower-mongodb-application-readwrite | ||||||
|  |                   key: connectionString.standard | ||||||
|  |           ports: | ||||||
|  |             - containerPort: 8000 | ||||||
|  |               name: metrics | ||||||
|  |           securityContext: | ||||||
|  |             readOnlyRootFilesystem: true | ||||||
|  |           command: | ||||||
|  |             - /app/log_shipper.py | ||||||
|  |             - --parse-json | ||||||
|  |             - --normalize-log-level | ||||||
|  |             - --stream-to-log-level | ||||||
|  |             - --merge-top-level | ||||||
|  |             - --max-collection-size | ||||||
|  |             - "10000000000" | ||||||
|  |           resources: | ||||||
|  |             limits: | ||||||
|  |               memory: 200Mi | ||||||
|  |             requests: | ||||||
|  |               cpu: 100m | ||||||
|  |               memory: 100Mi | ||||||
|  |           volumeMounts: | ||||||
|  |             - name: etcmachineid | ||||||
|  |               mountPath: /etc/machine-id | ||||||
|  |               readOnly: true | ||||||
|  |             - name: varlog | ||||||
|  |               mountPath: /var/log | ||||||
|  |               readOnly: true | ||||||
|  |       volumes: | ||||||
|  |         - name: etcmachineid | ||||||
|  |           hostPath: | ||||||
|  |             path: /etc/machine-id | ||||||
|  |         - name: varlog | ||||||
|  |           hostPath: | ||||||
|  |             path: /var/log | ||||||
|  |       tolerations: | ||||||
|  |         - operator: "Exists" | ||||||
|  |           effect: "NoSchedule" | ||||||
|  | --- | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | kind: ClusterRoleBinding | ||||||
|  | metadata: | ||||||
|  |   name: logging-logmower-shipper | ||||||
|  | subjects: | ||||||
|  |   - kind: ServiceAccount | ||||||
|  |     name: logmower-shipper | ||||||
|  |     namespace: logmower | ||||||
|  | roleRef: | ||||||
|  |   kind: ClusterRole | ||||||
|  |   name: filebeat | ||||||
|  |   apiGroup: rbac.authorization.k8s.io | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ServiceAccount | ||||||
|  | metadata: | ||||||
|  |   name: logmower-shipper | ||||||
|  |   labels: | ||||||
|  |     app: logmower-shipper | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: NetworkPolicy | ||||||
|  | metadata: | ||||||
|  |   name: logmower-shipper | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       app: logmower-shipper | ||||||
|  |   policyTypes: | ||||||
|  |     - Ingress | ||||||
|  |     - Egress | ||||||
|  |   ingress: | ||||||
|  |     - from: | ||||||
|  |         - namespaceSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               kubernetes.io/metadata.name: prometheus-operator | ||||||
|  |           podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: prometheus | ||||||
|  |   egress: | ||||||
|  |     - to: | ||||||
|  |         - podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app: logmower-mongodb-svc | ||||||
|  |       ports: | ||||||
|  |         - port: 27017 | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: NetworkPolicy | ||||||
|  | metadata: | ||||||
|  |   name: logmower-eventsource | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       app: logmower-eventsource | ||||||
|  |   policyTypes: | ||||||
|  |     - Ingress | ||||||
|  |     - Egress | ||||||
|  |   egress: | ||||||
|  |     - to: | ||||||
|  |         - podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app: logmower-mongodb-svc | ||||||
|  |   ingress: | ||||||
|  |     - from: | ||||||
|  |         - namespaceSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               kubernetes.io/metadata.name: traefik | ||||||
|  |           podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: traefik | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: NetworkPolicy | ||||||
|  | metadata: | ||||||
|  |   name: logmower-frontend | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       app: logmower-frontend | ||||||
|  |   policyTypes: | ||||||
|  |     - Ingress | ||||||
|  |     - Egress | ||||||
|  |   ingress: | ||||||
|  |     - from: | ||||||
|  |         - namespaceSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               kubernetes.io/metadata.name: traefik | ||||||
|  |           podSelector: | ||||||
|  |             matchLabels: | ||||||
|  |               app.kubernetes.io/name: traefik | ||||||
|  | --- | ||||||
|  | apiVersion: monitoring.coreos.com/v1 | ||||||
|  | kind: PodMonitor | ||||||
|  | metadata: | ||||||
|  |   name: logmower-shipper | ||||||
|  | spec: | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app: logmower-shipper | ||||||
|  |   podMetricsEndpoints: | ||||||
|  |     - port: metrics | ||||||
|  | --- | ||||||
|  | apiVersion: monitoring.coreos.com/v1 | ||||||
|  | kind: PrometheusRule | ||||||
|  | metadata: | ||||||
|  |   name: logmower-shipper | ||||||
|  | spec: | ||||||
|  |   groups: | ||||||
|  |     - name: logmower-shipper | ||||||
|  |       rules: | ||||||
|  |         - alert: LogmowerSingleInsertionErrors | ||||||
|  |           annotations: | ||||||
|  |             summary: Logmower shipper is having issues submitting log records | ||||||
|  |               to database | ||||||
|  |           expr: rate(logmower_insertion_error_count_total[30m]) > 0 | ||||||
|  |           for: 0m | ||||||
|  |           labels: | ||||||
|  |             severity: warning | ||||||
|  |         - alert: LogmowerBulkInsertionErrors | ||||||
|  |           annotations: | ||||||
|  |             summary: Logmower shipper is having issues submitting log records | ||||||
|  |               to database | ||||||
|  |           expr: rate(logmower_bulk_insertion_error_count_total[30m]) > 0 | ||||||
|  |           for: 0m | ||||||
|  |           labels: | ||||||
|  |             severity: warning | ||||||
|  |         - alert: LogmowerHighDatabaseLatency | ||||||
|  |           annotations: | ||||||
|  |             summary: Database operations are slow | ||||||
|  |           expr: histogram_quantile(0.95, logmower_database_operation_latency_bucket) > 10 | ||||||
|  |           for: 1m | ||||||
|  |           labels: | ||||||
|  |             severity: warning | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: Ingress | ||||||
|  | metadata: | ||||||
|  |   name: logmower | ||||||
|  |   annotations: | ||||||
|  |     kubernetes.io/ingress.class: traefik | ||||||
|  |     cert-manager.io/cluster-issuer: default | ||||||
|  |     traefik.ingress.kubernetes.io/router.entrypoints: websecure | ||||||
|  |     traefik.ingress.kubernetes.io/router.middlewares: traefik-sso@kubernetescrd | ||||||
|  |     traefik.ingress.kubernetes.io/router.tls: "true" | ||||||
|  |     external-dns.alpha.kubernetes.io/target: traefik.k-space.ee | ||||||
|  | spec: | ||||||
|  |   rules: | ||||||
|  |   - host: log.k-space.ee | ||||||
|  |     http: | ||||||
|  |       paths: | ||||||
|  |       - pathType: Prefix | ||||||
|  |         path: "/events" | ||||||
|  |         backend: | ||||||
|  |           service: | ||||||
|  |             name: logmower-eventsource | ||||||
|  |             port: | ||||||
|  |               number: 3002 | ||||||
|  |       - pathType: Prefix | ||||||
|  |         path: "/" | ||||||
|  |         backend: | ||||||
|  |           service: | ||||||
|  |             name: logmower-frontend | ||||||
|  |             port: | ||||||
|  |               number: 8080 | ||||||
|  |   tls: | ||||||
|  |   - hosts: | ||||||
|  |     - "*.k-space.ee" | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Service | ||||||
|  | metadata: | ||||||
|  |   name: logmower-eventsource | ||||||
|  | spec: | ||||||
|  |   type: ClusterIP | ||||||
|  |   selector: | ||||||
|  |     app: logmower-eventsource | ||||||
|  |   ports: | ||||||
|  |     - protocol: TCP | ||||||
|  |       port: 3002 | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Service | ||||||
|  | metadata: | ||||||
|  |   name: logmower-frontend | ||||||
|  | spec: | ||||||
|  |   type: ClusterIP | ||||||
|  |   selector: | ||||||
|  |     app: logmower-frontend | ||||||
|  |   ports: | ||||||
|  |     - protocol: TCP | ||||||
|  |       port: 8080 | ||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: logmower-frontend | ||||||
|  | spec: | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app: logmower-frontend | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: | ||||||
|  |         app: logmower-frontend | ||||||
|  |     spec: | ||||||
|  |       containers: | ||||||
|  |         - name: logmower-frontend | ||||||
|  |           image: harbor.k-space.ee/k-space/logmower-frontend | ||||||
|  |           ports: | ||||||
|  |           - containerPort: 8080 | ||||||
|  |             name: http | ||||||
|  |           securityContext: | ||||||
|  |             readOnlyRootFilesystem: true | ||||||
|  |             runAsNonRoot: true | ||||||
|  |             runAsUser: 1000 | ||||||
|  |           resources: | ||||||
|  |             limits: | ||||||
|  |               memory: 50Mi | ||||||
|  |             requests: | ||||||
|  |               cpu: 1m | ||||||
|  |               memory: 20Mi | ||||||
|  |           volumeMounts: | ||||||
|  |           - name : nginx-cache | ||||||
|  |             mountPath: /var/cache/nginx/ | ||||||
|  |           - name : nginx-config | ||||||
|  |             mountPath: /var/config/nginx/ | ||||||
|  |           - name: var-run | ||||||
|  |             mountPath: /var/run/ | ||||||
|  |       volumes: | ||||||
|  |       - emptyDir: {} | ||||||
|  |         name: nginx-cache | ||||||
|  |       - emptyDir: {} | ||||||
|  |         name: nginx-config | ||||||
|  |       - emptyDir: {} | ||||||
|  |         name: var-run | ||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: logmower-eventsource | ||||||
|  | spec: | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app: logmower-eventsource | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: | ||||||
|  |         app: logmower-eventsource | ||||||
|  |     spec: | ||||||
|  |       containers: | ||||||
|  |         - name: logmower-eventsource | ||||||
|  |           image: harbor.k-space.ee/k-space/logmower-eventsource | ||||||
|  |           ports: | ||||||
|  |             - containerPort: 3002 | ||||||
|  |               name: nodejs | ||||||
|  |           securityContext: | ||||||
|  |             readOnlyRootFilesystem: true | ||||||
|  |             runAsNonRoot: true | ||||||
|  |             runAsUser: 1000 | ||||||
|  |           resources: | ||||||
|  |             limits: | ||||||
|  |               cpu: 500m | ||||||
|  |               memory: 200Mi | ||||||
|  |             requests: | ||||||
|  |               cpu: 10m | ||||||
|  |               memory: 100Mi | ||||||
|  |           env: | ||||||
|  |             - name: MONGODB_HOST | ||||||
|  |               valueFrom: | ||||||
|  |                 secretKeyRef: | ||||||
|  |                   name: logmower-mongodb-application-readonly | ||||||
|  |                   key: connectionString.standard | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: NetworkPolicy | ||||||
|  | metadata: | ||||||
|  |   name: logmower-mongodb | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       app: logmower-mongodb-svc | ||||||
|  |   policyTypes: | ||||||
|  |   - Ingress | ||||||
|  |   - Egress | ||||||
|  |   ingress: | ||||||
|  |     - from: | ||||||
|  |       - podSelector: {} | ||||||
|  |       ports: | ||||||
|  |       - port: 27017 | ||||||
|  |   egress: | ||||||
|  |     - to: | ||||||
|  |       - podSelector: | ||||||
|  |           matchLabels: | ||||||
|  |             app: logmower-mongodb-svc | ||||||
|  |       ports: | ||||||
|  |       - port: 27017 | ||||||
							
								
								
									
										1
									
								
								logmower/mongodb-support.yml
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								logmower/mongodb-support.yml
									
									
									
									
									
										Symbolic link
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | ../mongodb-operator/mongodb-support.yml | ||||||
							
								
								
									
										47
									
								
								logmower/mongoexpress.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								logmower/mongoexpress.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,47 @@ | |||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: logmower-mongoexpress | ||||||
|  | spec: | ||||||
|  |   revisionHistoryLimit: 0 | ||||||
|  |   replicas: 1 | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app: logmower-mongoexpress | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: | ||||||
|  |         app: logmower-mongoexpress | ||||||
|  |     spec: | ||||||
|  |       containers: | ||||||
|  |         - name: mongoexpress | ||||||
|  |           image: mongo-express | ||||||
|  |           ports: | ||||||
|  |            - name: mongoexpress | ||||||
|  |              containerPort: 8081 | ||||||
|  |           env: | ||||||
|  |             - name: ME_CONFIG_MONGODB_URL | ||||||
|  |               valueFrom: | ||||||
|  |                 secretKeyRef: | ||||||
|  |                   name: logmower-mongodb-application-readonly | ||||||
|  |                   key: connectionString.standard | ||||||
|  |             - name: ME_CONFIG_MONGODB_ENABLE_ADMIN | ||||||
|  |               value: "true" | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: NetworkPolicy | ||||||
|  | metadata: | ||||||
|  |   name: logmower-mongoexpress | ||||||
|  | spec: | ||||||
|  |   podSelector: | ||||||
|  |     matchLabels: | ||||||
|  |       app: logmower-mongoexpress | ||||||
|  |   policyTypes: | ||||||
|  |   - Egress | ||||||
|  |   egress: | ||||||
|  |     - to: | ||||||
|  |       - podSelector: | ||||||
|  |           matchLabels: | ||||||
|  |             app: logmower-mongodb-svc | ||||||
|  |       ports: | ||||||
|  |       - port: 27017 | ||||||
							
								
								
									
										1
									
								
								logmower/networkpolicy-base.yml
									
									
									
									
									
										Symbolic link
									
								
							
							
						
						
									
										1
									
								
								logmower/networkpolicy-base.yml
									
									
									
									
									
										Symbolic link
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | ../shared/networkpolicy-base.yml | ||||||
| @@ -1,8 +1,8 @@ | |||||||
| # Longhorn distributed block storage system | # Longhorn distributed block storage system | ||||||
|  |  | ||||||
| The manifest was fetched from | The manifest was fetched from | ||||||
| https://raw.githubusercontent.com/longhorn/longhorn/v1.2.4/deploy/longhorn.yaml | https://raw.githubusercontent.com/longhorn/longhorn/v1.4.0/deploy/longhorn.yaml | ||||||
| and then heavily modified. | and then heavily modified as per `changes.diff` | ||||||
|  |  | ||||||
| To deploy Longhorn use following: | To deploy Longhorn use following: | ||||||
|  |  | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										92
									
								
								longhorn-system/changes.diff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								longhorn-system/changes.diff
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,92 @@ | |||||||
|  | --- ref	2023-02-20 11:15:07.340650467 +0200 | ||||||
|  | +++ application.yml	2023-02-19 18:38:05.059234209 +0200 | ||||||
|  | @@ -60,14 +60,14 @@ | ||||||
|  |          storageclass.kubernetes.io/is-default-class: "true" | ||||||
|  |      provisioner: driver.longhorn.io | ||||||
|  |      allowVolumeExpansion: true | ||||||
|  | -    reclaimPolicy: "Delete" | ||||||
|  | +    reclaimPolicy: "Retain" | ||||||
|  |      volumeBindingMode: Immediate | ||||||
|  |      parameters: | ||||||
|  | -      numberOfReplicas: "3" | ||||||
|  | +      numberOfReplicas: "2" | ||||||
|  |        staleReplicaTimeout: "30" | ||||||
|  |        fromBackup: "" | ||||||
|  | -      fsType: "ext4" | ||||||
|  | -      dataLocality: "disabled" | ||||||
|  | +      fsType: "xfs" | ||||||
|  | +      dataLocality: "best-effort" | ||||||
|  |  --- | ||||||
|  |  # Source: longhorn/templates/crds.yaml | ||||||
|  |  apiVersion: apiextensions.k8s.io/v1 | ||||||
|  | @@ -3869,6 +3869,11 @@ | ||||||
|  |          app.kubernetes.io/version: v1.4.0 | ||||||
|  |          app: longhorn-manager | ||||||
|  |      spec: | ||||||
|  | +      tolerations: | ||||||
|  | +      - key: dedicated | ||||||
|  | +        operator: Equal | ||||||
|  | +        value: storage | ||||||
|  | +        effect: NoSchedule | ||||||
|  |        initContainers: | ||||||
|  |        - name: wait-longhorn-admission-webhook | ||||||
|  |          image: longhornio/longhorn-manager:v1.4.0 | ||||||
|  | @@ -3968,6 +3973,10 @@ | ||||||
|  |          app.kubernetes.io/version: v1.4.0 | ||||||
|  |          app: longhorn-driver-deployer | ||||||
|  |      spec: | ||||||
|  | +      tolerations: | ||||||
|  | +      - key: dedicated | ||||||
|  | +        operator: Equal | ||||||
|  | +        value: storage | ||||||
|  |        initContainers: | ||||||
|  |          - name: wait-longhorn-manager | ||||||
|  |            image: longhornio/longhorn-manager:v1.4.0 | ||||||
|  | @@ -4037,6 +4046,11 @@ | ||||||
|  |          app.kubernetes.io/version: v1.4.0 | ||||||
|  |          app: longhorn-recovery-backend | ||||||
|  |      spec: | ||||||
|  | +      tolerations: | ||||||
|  | +      - key: dedicated | ||||||
|  | +        operator: Equal | ||||||
|  | +        value: storage | ||||||
|  | +        effect: NoSchedule | ||||||
|  |        affinity: | ||||||
|  |          podAntiAffinity: | ||||||
|  |            preferredDuringSchedulingIgnoredDuringExecution: | ||||||
|  | @@ -4103,6 +4117,11 @@ | ||||||
|  |          app.kubernetes.io/version: v1.4.0 | ||||||
|  |          app: longhorn-ui | ||||||
|  |      spec: | ||||||
|  | +      tolerations: | ||||||
|  | +      - key: dedicated | ||||||
|  | +        operator: Equal | ||||||
|  | +        value: storage | ||||||
|  | +        effect: NoSchedule | ||||||
|  |        affinity: | ||||||
|  |          podAntiAffinity: | ||||||
|  |            preferredDuringSchedulingIgnoredDuringExecution: | ||||||
|  | @@ -4166,6 +4185,11 @@ | ||||||
|  |          app.kubernetes.io/version: v1.4.0 | ||||||
|  |          app: longhorn-conversion-webhook | ||||||
|  |      spec: | ||||||
|  | +      tolerations: | ||||||
|  | +      - key: dedicated | ||||||
|  | +        operator: Equal | ||||||
|  | +        value: storage | ||||||
|  | +        effect: NoSchedule | ||||||
|  |        affinity: | ||||||
|  |          podAntiAffinity: | ||||||
|  |            preferredDuringSchedulingIgnoredDuringExecution: | ||||||
|  | @@ -4226,6 +4250,11 @@ | ||||||
|  |          app.kubernetes.io/version: v1.4.0 | ||||||
|  |          app: longhorn-admission-webhook | ||||||
|  |      spec: | ||||||
|  | +      tolerations: | ||||||
|  | +      - key: dedicated | ||||||
|  | +        operator: Equal | ||||||
|  | +        value: storage | ||||||
|  | +        effect: NoSchedule | ||||||
|  |        affinity: | ||||||
|  |          podAntiAffinity: | ||||||
|  |            preferredDuringSchedulingIgnoredDuringExecution: | ||||||
							
								
								
									
										158
									
								
								member-site/doorboy.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								member-site/doorboy.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,158 @@ | |||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: doorboy-proxy | ||||||
|  |   annotations: | ||||||
|  |     keel.sh/policy: force | ||||||
|  |     keel.sh/trigger: poll | ||||||
|  | spec: | ||||||
|  |   revisionHistoryLimit: 0 | ||||||
|  |   replicas: 3 | ||||||
|  |   selector: | ||||||
|  |     matchLabels: &selectorLabels | ||||||
|  |       app.kubernetes.io/name: doorboy-proxy | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: *selectorLabels | ||||||
|  |     spec: | ||||||
|  |       affinity: | ||||||
|  |         podAntiAffinity: | ||||||
|  |           preferredDuringSchedulingIgnoredDuringExecution: | ||||||
|  |             - podAffinityTerm: | ||||||
|  |                 labelSelector: | ||||||
|  |                   matchExpressions: | ||||||
|  |                   - key: app.kubernetes.io/name | ||||||
|  |                     operator: In | ||||||
|  |                     values: | ||||||
|  |                       - doorboy-proxy | ||||||
|  |                 topologyKey: kubernetes.io/hostname | ||||||
|  |               weight: 100 | ||||||
|  |       containers: | ||||||
|  |         - name: doorboy-proxy | ||||||
|  |           image: harbor.k-space.ee/k-space/doorboy-proxy:latest | ||||||
|  |           envFrom: | ||||||
|  |             - secretRef: | ||||||
|  |                 name: doorboy-api | ||||||
|  |           env: | ||||||
|  |             - name: MONGO_URI | ||||||
|  |               valueFrom: | ||||||
|  |                 secretKeyRef: | ||||||
|  |                   name: mongo-application-readwrite | ||||||
|  |                   key: connectionString.standard | ||||||
|  |           securityContext: | ||||||
|  |             readOnlyRootFilesystem: true | ||||||
|  |             runAsNonRoot: true | ||||||
|  |             runAsUser: 1000 | ||||||
|  |           ports: | ||||||
|  |             - containerPort: 5000 | ||||||
|  |               name: "http" | ||||||
|  |           resources: | ||||||
|  |             requests: | ||||||
|  |               memory: "200Mi" | ||||||
|  |               cpu: "100m" | ||||||
|  |             limits: | ||||||
|  |               memory: "500Mi" | ||||||
|  |               cpu: "1" | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Service | ||||||
|  | metadata: | ||||||
|  |   name: doorboy-proxy | ||||||
|  | spec: | ||||||
|  |   selector: | ||||||
|  |     app.kubernetes.io/name: doorboy-proxy | ||||||
|  |   ports: | ||||||
|  |   - protocol: TCP | ||||||
|  |     name: http | ||||||
|  |     port: 5000 | ||||||
|  | --- | ||||||
|  | apiVersion: networking.k8s.io/v1 | ||||||
|  | kind: Ingress | ||||||
|  | metadata: | ||||||
|  |   name: doorboy-proxy | ||||||
|  |   annotations: | ||||||
|  |     kubernetes.io/ingress.class: traefik | ||||||
|  |     traefik.ingress.kubernetes.io/router.entrypoints: websecure | ||||||
|  |     traefik.ingress.kubernetes.io/router.tls: "true" | ||||||
|  |     external-dns.alpha.kubernetes.io/target: traefik.k-space.ee | ||||||
|  | spec: | ||||||
|  |   rules: | ||||||
|  |   - host: doorboy-proxy.k-space.ee | ||||||
|  |     http: | ||||||
|  |       paths: | ||||||
|  |       - pathType: Prefix | ||||||
|  |         path: "/" | ||||||
|  |         backend: | ||||||
|  |           service: | ||||||
|  |             name: doorboy-proxy | ||||||
|  |             port: | ||||||
|  |               name: http | ||||||
|  |   tls: | ||||||
|  |   - hosts: | ||||||
|  |     - "*.k-space.ee" | ||||||
|  | --- | ||||||
|  | apiVersion: monitoring.coreos.com/v1 | ||||||
|  | kind: PodMonitor | ||||||
|  | metadata: | ||||||
|  |   name: doorboy-proxy | ||||||
|  | spec: | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: doorboy-proxy | ||||||
|  |   podMetricsEndpoints: | ||||||
|  |     - port: http | ||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: DaemonSet | ||||||
|  | metadata: | ||||||
|  |   name: kdoorpi | ||||||
|  | spec: | ||||||
|  |   selector: | ||||||
|  |     matchLabels: &selectorLabels | ||||||
|  |       app.kubernetes.io/name: kdoorpi | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: *selectorLabels | ||||||
|  |     spec: | ||||||
|  |       containers: | ||||||
|  |         - name: kdoorpi | ||||||
|  |           image: harbor.k-space.ee/k-space/kdoorpi:latest | ||||||
|  |           env: | ||||||
|  |             - name: KDOORPI_API_ALLOWED | ||||||
|  |               value: https://doorboy-proxy.k-space.ee/allowed | ||||||
|  |             - name: KDOORPI_API_LONGPOLL | ||||||
|  |               value: https://doorboy-proxy.k-space.ee/longpoll | ||||||
|  |             - name: KDOORPI_API_SWIPE | ||||||
|  |               value: http://172.21.99.98/swipe | ||||||
|  |             - name: KDOORPI_DOOR | ||||||
|  |               valueFrom: | ||||||
|  |                 fieldRef: | ||||||
|  |                   fieldPath: spec.nodeName | ||||||
|  |             - name: KDOORPI_API_KEY | ||||||
|  |               valueFrom: | ||||||
|  |                 secretKeyRef: | ||||||
|  |                   name: doorboy-api | ||||||
|  |                   key: DOORBOY_SECRET | ||||||
|  |             - name: KDOORPI_UID_SALT | ||||||
|  |               valueFrom: | ||||||
|  |                 secretKeyRef: | ||||||
|  |                   name: doorboy-uid-hash-salt | ||||||
|  |                   key: KDOORPI_UID_SALT | ||||||
|  |           resources: | ||||||
|  |             limits: | ||||||
|  |               memory: 200Mi | ||||||
|  |             requests: | ||||||
|  |               cpu: 100m | ||||||
|  |               memory: 100Mi | ||||||
|  |       nodeSelector: | ||||||
|  |         dedicated: door | ||||||
|  |       tolerations: | ||||||
|  |       - key: dedicated | ||||||
|  |         operator: Equal | ||||||
|  |         value: door | ||||||
|  |         effect: NoSchedule | ||||||
|  |       - key: arch | ||||||
|  |         operator: Equal | ||||||
|  |         value: arm64 | ||||||
|  |         effect: NoSchedule | ||||||
| @@ -1,11 +0,0 @@ | |||||||
| # meta-operator |  | ||||||
|  |  | ||||||
| Meta operator enables creating operators without building any binaries or |  | ||||||
| Docker images. |  | ||||||
|  |  | ||||||
| For example operator declaration see `keydb.yml` |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| kubectl create namespace meta-operator |  | ||||||
| kubectl apply -f application.yml -f keydb.yml |  | ||||||
| ``` |  | ||||||
| @@ -1,220 +0,0 @@ | |||||||
| apiVersion: apiextensions.k8s.io/v1 |  | ||||||
| kind: CustomResourceDefinition |  | ||||||
| metadata: |  | ||||||
|  name: clusteroperators.codemowers.io |  | ||||||
| spec: |  | ||||||
|  group: codemowers.io |  | ||||||
|  names: |  | ||||||
|    plural: clusteroperators |  | ||||||
|    singular: clusteroperator |  | ||||||
|    kind: ClusterOperator |  | ||||||
|    shortNames: |  | ||||||
|    - clusteroperator |  | ||||||
|  scope: Cluster |  | ||||||
|  versions: |  | ||||||
|    - name: v1alpha1 |  | ||||||
|      served: true |  | ||||||
|      storage: true |  | ||||||
|      schema: |  | ||||||
|        openAPIV3Schema: |  | ||||||
|          type: object |  | ||||||
|          properties: |  | ||||||
|            spec: |  | ||||||
|              type: object |  | ||||||
|              properties: |  | ||||||
|                resource: |  | ||||||
|                  type: object |  | ||||||
|                  properties: |  | ||||||
|                    group: |  | ||||||
|                      type: string |  | ||||||
|                    version: |  | ||||||
|                      type: string |  | ||||||
|                    plural: |  | ||||||
|                      type: string |  | ||||||
|                secret: |  | ||||||
|                  type: object |  | ||||||
|                  properties: |  | ||||||
|                    name: |  | ||||||
|                      type: string |  | ||||||
|                    enabled: |  | ||||||
|                      type: boolean |  | ||||||
|                    structure: |  | ||||||
|                      type: array |  | ||||||
|                      items: |  | ||||||
|                        type: object |  | ||||||
|                        properties: |  | ||||||
|                          key: |  | ||||||
|                            type: string |  | ||||||
|                          value: |  | ||||||
|                            type: string |  | ||||||
|                services: |  | ||||||
|                  type: array |  | ||||||
|                  items: |  | ||||||
|                    type: object |  | ||||||
|                    x-kubernetes-preserve-unknown-fields: true |  | ||||||
|                deployments: |  | ||||||
|                  type: array |  | ||||||
|                  items: |  | ||||||
|                    type: object |  | ||||||
|                    x-kubernetes-preserve-unknown-fields: true |  | ||||||
|                statefulsets: |  | ||||||
|                  type: array |  | ||||||
|                  items: |  | ||||||
|                    type: object |  | ||||||
|                    x-kubernetes-preserve-unknown-fields: true |  | ||||||
|                configmaps: |  | ||||||
|                  type: array |  | ||||||
|                  items: |  | ||||||
|                    type: object |  | ||||||
|                    x-kubernetes-preserve-unknown-fields: true |  | ||||||
|                customresources: |  | ||||||
|                  type: array |  | ||||||
|                  items: |  | ||||||
|                    type: object |  | ||||||
|                    x-kubernetes-preserve-unknown-fields: true |  | ||||||
|          required: ["spec"] |  | ||||||
| --- |  | ||||||
| apiVersion: apps/v1 |  | ||||||
| kind: Deployment |  | ||||||
| metadata: |  | ||||||
|   name: meta-operator |  | ||||||
|   namespace: meta-operator |  | ||||||
|   labels: |  | ||||||
|     app.kubernetes.io/name: meta-operator |  | ||||||
| spec: |  | ||||||
|   replicas: 1 |  | ||||||
|   selector: |  | ||||||
|     matchLabels: |  | ||||||
|       app.kubernetes.io/name: meta-operator |  | ||||||
|   template: |  | ||||||
|     metadata: |  | ||||||
|       labels: |  | ||||||
|         app.kubernetes.io/name: meta-operator |  | ||||||
|     spec: |  | ||||||
|       serviceAccountName: meta-operator |  | ||||||
|       containers: |  | ||||||
|         - name: meta-operator |  | ||||||
|           image: harbor.k-space.ee/k-space/meta-operator |  | ||||||
|           securityContext: |  | ||||||
|             readOnlyRootFilesystem: true |  | ||||||
|             runAsNonRoot: true |  | ||||||
|             runAsUser: 1000 |  | ||||||
|           env: |  | ||||||
|             - name: MY_POD_NAMESPACE |  | ||||||
|               valueFrom: |  | ||||||
|                 fieldRef: |  | ||||||
|                   fieldPath: metadata.namespace |  | ||||||
| --- |  | ||||||
| apiVersion: codemowers.io/v1alpha1 |  | ||||||
| kind: ClusterOperator |  | ||||||
| metadata: |  | ||||||
|   name: meta |  | ||||||
| spec: |  | ||||||
|   resource: |  | ||||||
|     group: codemowers.io |  | ||||||
|     version: v1alpha1 |  | ||||||
|     plural: clusteroperators |  | ||||||
|   secret: |  | ||||||
|     enabled: false |  | ||||||
|   deployments: |  | ||||||
|     - apiVersion: apps/v1 |  | ||||||
|       kind: Deployment |  | ||||||
|       metadata: |  | ||||||
|         name: foobar-operator |  | ||||||
|         labels: |  | ||||||
|           app.kubernetes.io/name: foobar-operator |  | ||||||
|       spec: |  | ||||||
|         replicas: 1 |  | ||||||
|         selector: |  | ||||||
|           matchLabels: |  | ||||||
|             app.kubernetes.io/name: foobar-operator |  | ||||||
|         template: |  | ||||||
|           metadata: |  | ||||||
|             labels: |  | ||||||
|               app.kubernetes.io/name: foobar-operator |  | ||||||
|           spec: |  | ||||||
|             serviceAccountName: meta-operator |  | ||||||
|             containers: |  | ||||||
|               - name: meta-operator |  | ||||||
|                 image: harbor.k-space.ee/k-space/meta-operator |  | ||||||
|                 command: |  | ||||||
|                   - /meta-operator.py |  | ||||||
|                   - --target |  | ||||||
|                   - foobar |  | ||||||
|                 securityContext: |  | ||||||
|                   readOnlyRootFilesystem: true |  | ||||||
|                   runAsNonRoot: true |  | ||||||
|                   runAsUser: 1000 |  | ||||||
|                 env: |  | ||||||
|                   - name: MY_POD_NAMESPACE |  | ||||||
|                     valueFrom: |  | ||||||
|                       fieldRef: |  | ||||||
|                         fieldPath: metadata.namespace |  | ||||||
| --- |  | ||||||
| apiVersion: rbac.authorization.k8s.io/v1 |  | ||||||
| kind: ClusterRole |  | ||||||
| metadata: |  | ||||||
|   name: meta-operator |  | ||||||
| rules: |  | ||||||
| - apiGroups: |  | ||||||
|   - "" |  | ||||||
|   resources: |  | ||||||
|   - secrets |  | ||||||
|   - configmaps |  | ||||||
|   - services |  | ||||||
|   verbs: |  | ||||||
|   - create |  | ||||||
|   - get |  | ||||||
|   - patch |  | ||||||
|   - update |  | ||||||
|   - delete |  | ||||||
|   - list |  | ||||||
| - apiGroups: |  | ||||||
|   - apps |  | ||||||
|   resources: |  | ||||||
|   - deployments |  | ||||||
|   - statefulsets |  | ||||||
|   verbs: |  | ||||||
|   - create |  | ||||||
|   - delete |  | ||||||
|   - list |  | ||||||
|   - update |  | ||||||
|   - patch |  | ||||||
| - apiGroups: |  | ||||||
|   - codemowers.io |  | ||||||
|   resources: |  | ||||||
|   - bindzones |  | ||||||
|   - clusteroperators |  | ||||||
|   - keydbs |  | ||||||
|   verbs: |  | ||||||
|   - get |  | ||||||
|   - list |  | ||||||
|   - watch |  | ||||||
| - apiGroups: |  | ||||||
|   - k-space.ee |  | ||||||
|   resources: |  | ||||||
|   - cams |  | ||||||
|   verbs: |  | ||||||
|   - get |  | ||||||
|   - list |  | ||||||
|   - watch |  | ||||||
| --- |  | ||||||
| apiVersion: v1 |  | ||||||
| kind: ServiceAccount |  | ||||||
| metadata: |  | ||||||
|   name: meta-operator |  | ||||||
|   namespace: meta-operator |  | ||||||
| --- |  | ||||||
| kind: ClusterRoleBinding |  | ||||||
| apiVersion: rbac.authorization.k8s.io/v1 |  | ||||||
| metadata: |  | ||||||
|   name: meta-operator |  | ||||||
| subjects: |  | ||||||
| - kind: ServiceAccount |  | ||||||
|   name: meta-operator |  | ||||||
|   namespace: meta-operator |  | ||||||
| roleRef: |  | ||||||
|   kind: ClusterRole |  | ||||||
|   name: meta-operator |  | ||||||
|   apiGroup: rbac.authorization.k8s.io |  | ||||||
|  |  | ||||||
| @@ -1,253 +0,0 @@ | |||||||
| --- |  | ||||||
| apiVersion: apiextensions.k8s.io/v1 |  | ||||||
| kind: CustomResourceDefinition |  | ||||||
| metadata: |  | ||||||
|  name: keydbs.codemowers.io |  | ||||||
| spec: |  | ||||||
|  group: codemowers.io |  | ||||||
|  names: |  | ||||||
|    plural: keydbs |  | ||||||
|    singular: keydb |  | ||||||
|    kind: KeyDBCluster |  | ||||||
|    shortNames: |  | ||||||
|    - keydb |  | ||||||
|  scope: Namespaced |  | ||||||
|  versions: |  | ||||||
|    - name: v1alpha1 |  | ||||||
|      served: true |  | ||||||
|      storage: true |  | ||||||
|      schema: |  | ||||||
|        openAPIV3Schema: |  | ||||||
|          type: object |  | ||||||
|          properties: |  | ||||||
|            spec: |  | ||||||
|              type: object |  | ||||||
|              properties: |  | ||||||
|                replicas: |  | ||||||
|                  type: integer |  | ||||||
|                  description: Replica count |  | ||||||
|          required: ["spec"] |  | ||||||
| --- |  | ||||||
| apiVersion: codemowers.io/v1alpha1 |  | ||||||
| kind: ClusterOperator |  | ||||||
| metadata: |  | ||||||
|   name: keydb |  | ||||||
| spec: |  | ||||||
|   resource: |  | ||||||
|     group: codemowers.io |  | ||||||
|     version: v1alpha1 |  | ||||||
|     plural: keydbs |  | ||||||
|   secret: |  | ||||||
|     enabled: true |  | ||||||
|     name: foobar-secrets |  | ||||||
|     structure: |  | ||||||
|     - key: REDIS_PASSWORD |  | ||||||
|       value: "%s" |  | ||||||
|     - key: REDIS_URI |  | ||||||
|       value: "redis://:%s@foobar" |  | ||||||
|   configmaps: |  | ||||||
|     - apiVersion: v1 |  | ||||||
|       kind: ConfigMap |  | ||||||
|       metadata: |  | ||||||
|         name: foobar-scripts |  | ||||||
|         labels: |  | ||||||
|           app.kubernetes.io/name: foobar |  | ||||||
|       data: |  | ||||||
|         entrypoint.sh: | |  | ||||||
|           #!/bin/bash |  | ||||||
|           set -euxo pipefail |  | ||||||
|           host="$(hostname)" |  | ||||||
|           port="6379" |  | ||||||
|           replicas=() |  | ||||||
|           for node in {0..2}; do |  | ||||||
|             if [ "${host}" != "redis-${node}" ]; then |  | ||||||
|                 replicas+=("--replicaof redis-${node}.redis-headless ${port}") |  | ||||||
|             fi |  | ||||||
|           done |  | ||||||
|           exec keydb-server /etc/keydb/redis.conf \ |  | ||||||
|               --active-replica "yes" \ |  | ||||||
|               --multi-master "yes" \ |  | ||||||
|               --appendonly "no" \ |  | ||||||
|               --bind "0.0.0.0" \ |  | ||||||
|               --port "${port}" \ |  | ||||||
|               --protected-mode "no" \ |  | ||||||
|               --server-threads "2" \ |  | ||||||
|               --masterauth "${REDIS_PASSWORD}" \ |  | ||||||
|               --requirepass "${REDIS_PASSWORD}" \ |  | ||||||
|               "${replicas[@]}" |  | ||||||
|         ping_readiness_local.sh: |- |  | ||||||
|           #!/bin/bash |  | ||||||
|           set -e |  | ||||||
|           [[ -n "${REDIS_PASSWORD}" ]] && export REDISCLI_AUTH="${REDIS_PASSWORD}" |  | ||||||
|           response="$( |  | ||||||
|             timeout -s 3 "${1}" \ |  | ||||||
|             keydb-cli \ |  | ||||||
|               -h localhost \ |  | ||||||
|               -p 6379 \ |  | ||||||
|               ping |  | ||||||
|           )" |  | ||||||
|           if [ "${response}" != "PONG" ]; then |  | ||||||
|             echo "${response}" |  | ||||||
|             exit 1 |  | ||||||
|           fi |  | ||||||
|         ping_liveness_local.sh: |- |  | ||||||
|           #!/bin/bash |  | ||||||
|           set -e |  | ||||||
|           [[ -n "${REDIS_PASSWORD}" ]] && export REDISCLI_AUTH="${REDIS_PASSWORD}" |  | ||||||
|           response="$( |  | ||||||
|             timeout -s 3 "${1}" \ |  | ||||||
|             keydb-cli \ |  | ||||||
|               -h localhost \ |  | ||||||
|               -p 6379 \ |  | ||||||
|               ping |  | ||||||
|           )" |  | ||||||
|           if [ "${response}" != "PONG" ] && [[ ! "${response}" =~ ^.*LOADING.*$ ]]; then |  | ||||||
|             echo "${response}" |  | ||||||
|             exit 1 |  | ||||||
|           fi |  | ||||||
|         cleanup_tempfiles.sh: |- |  | ||||||
|           #!/bin/bash |  | ||||||
|           set -e |  | ||||||
|           find /data/ -type f \( -name "temp-*.aof" -o -name "temp-*.rdb" \) -mmin +60 -delete |  | ||||||
|   services: |  | ||||||
|     - apiVersion: v1 |  | ||||||
|       kind: Service |  | ||||||
|       metadata: |  | ||||||
|         name: foobar-headless |  | ||||||
|         labels: |  | ||||||
|           app.kubernetes.io/name: foobar |  | ||||||
|       spec: |  | ||||||
|         type: ClusterIP |  | ||||||
|         clusterIP: None |  | ||||||
|         ports: |  | ||||||
|         - name: redis |  | ||||||
|           port: 6379 |  | ||||||
|           protocol: TCP |  | ||||||
|           targetPort: redis |  | ||||||
|         selector: |  | ||||||
|           app.kubernetes.io/name: foobar |  | ||||||
|     - apiVersion: v1 |  | ||||||
|       kind: Service |  | ||||||
|       metadata: |  | ||||||
|         name: foobar |  | ||||||
|         labels: |  | ||||||
|           app.kubernetes.io/name: foobar |  | ||||||
|         annotations: |  | ||||||
|           {} |  | ||||||
|       spec: |  | ||||||
|         type: ClusterIP |  | ||||||
|         ports: |  | ||||||
|         - name: redis |  | ||||||
|           port: 6379 |  | ||||||
|           protocol: TCP |  | ||||||
|           targetPort: redis |  | ||||||
|         - name: exporter |  | ||||||
|           port: 9121 |  | ||||||
|           protocol: TCP |  | ||||||
|           targetPort: exporter |  | ||||||
|         selector: |  | ||||||
|           app.kubernetes.io/name: foobar |  | ||||||
|         sessionAffinity: ClientIP |  | ||||||
|   statefulsets: |  | ||||||
|     - apiVersion: apps/v1 |  | ||||||
|       kind: StatefulSet |  | ||||||
|       metadata: |  | ||||||
|         name: foobar |  | ||||||
|         labels: |  | ||||||
|           app.kubernetes.io/name: foobar |  | ||||||
|       spec: |  | ||||||
|         replicas: 3 |  | ||||||
|         serviceName: foobar-headless |  | ||||||
|         selector: |  | ||||||
|           matchLabels: |  | ||||||
|             app.kubernetes.io/name: foobar |  | ||||||
|         template: |  | ||||||
|           metadata: |  | ||||||
|             labels: |  | ||||||
|               app.kubernetes.io/name: foobar |  | ||||||
|           spec: |  | ||||||
|             affinity: |  | ||||||
|               podAntiAffinity: |  | ||||||
|                 preferredDuringSchedulingIgnoredDuringExecution: |  | ||||||
|                 - podAffinityTerm: |  | ||||||
|                     labelSelector: |  | ||||||
|                       matchExpressions: |  | ||||||
|                       - key: app.kubernetes.io/name |  | ||||||
|                         operator: In |  | ||||||
|                         values: |  | ||||||
|                         - 'foobar' |  | ||||||
|                     topologyKey: kubernetes.io/hostname |  | ||||||
|                   weight: 100 |  | ||||||
|             containers: |  | ||||||
|             - name: redis |  | ||||||
|               image: eqalpha/keydb:x86_64_v6.3.1 |  | ||||||
|               imagePullPolicy: Always |  | ||||||
|               command: |  | ||||||
|               - /scripts/entrypoint.sh |  | ||||||
|               ports: |  | ||||||
|               - name: redis |  | ||||||
|                 containerPort: 6379 |  | ||||||
|                 protocol: TCP |  | ||||||
|               livenessProbe: |  | ||||||
|                 initialDelaySeconds: 20 |  | ||||||
|                 periodSeconds: 5 |  | ||||||
|                 # One second longer than command timeout should prevent generation of zombie processes. |  | ||||||
|                 timeoutSeconds: 6 |  | ||||||
|                 successThreshold: 1 |  | ||||||
|                 failureThreshold: 5 |  | ||||||
|                 exec: |  | ||||||
|                   command: |  | ||||||
|                     - sh |  | ||||||
|                     - -c |  | ||||||
|                     - /scripts/ping_liveness_local.sh 5 |  | ||||||
|               readinessProbe: |  | ||||||
|                 initialDelaySeconds: 20 |  | ||||||
|                 periodSeconds: 5 |  | ||||||
|                 # One second longer than command timeout should prevent generation of zombie processes. |  | ||||||
|                 timeoutSeconds: 2 |  | ||||||
|                 successThreshold: 1 |  | ||||||
|                 failureThreshold: 5 |  | ||||||
|                 exec: |  | ||||||
|                   command: |  | ||||||
|                     - sh |  | ||||||
|                     - -c |  | ||||||
|                     - /scripts/ping_readiness_local.sh 1 |  | ||||||
|               startupProbe: |  | ||||||
|                 periodSeconds: 5 |  | ||||||
|                 # One second longer than command timeout should prevent generation of zombie processes. |  | ||||||
|                 timeoutSeconds: 2 |  | ||||||
|                 failureThreshold: 24 |  | ||||||
|                 exec: |  | ||||||
|                   command: |  | ||||||
|                     - sh |  | ||||||
|                     - -c |  | ||||||
|                     - /scripts/ping_readiness_local.sh 1 |  | ||||||
|               resources: |  | ||||||
|                 {} |  | ||||||
|               securityContext: |  | ||||||
|                 {} |  | ||||||
|               volumeMounts: |  | ||||||
|               - name: foobar-scripts |  | ||||||
|                 mountPath: /scripts |  | ||||||
|               - name: foobar-data |  | ||||||
|                 mountPath: /data |  | ||||||
|               envFrom: |  | ||||||
|                 - secretRef: |  | ||||||
|                     name: foobar-secrets |  | ||||||
|             - name: exporter |  | ||||||
|               image: quay.io/oliver006/redis_exporter |  | ||||||
|               ports: |  | ||||||
|               - name: exporter |  | ||||||
|                 containerPort: 9121 |  | ||||||
|               envFrom: |  | ||||||
|                 - secretRef: |  | ||||||
|                     name: foobar-secrets |  | ||||||
|             securityContext: |  | ||||||
|               {} |  | ||||||
|             volumes: |  | ||||||
|             - name: foobar-scripts |  | ||||||
|               configMap: |  | ||||||
|                 name: foobar-scripts |  | ||||||
|                 defaultMode: 0755 |  | ||||||
|             - name: foobar-data |  | ||||||
|               emptyDir: {} |  | ||||||
							
								
								
									
										9
									
								
								nyancat/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								nyancat/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | # Nyancat server deployment | ||||||
|  |  | ||||||
|  | Something silly for a change. | ||||||
|  |  | ||||||
|  | To connect use: | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | telnet nyancat.k-space.ee | ||||||
|  | ``` | ||||||
							
								
								
									
										49
									
								
								nyancat/application.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								nyancat/application.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | |||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: Deployment | ||||||
|  | metadata: | ||||||
|  |   name: nyancat | ||||||
|  |   namespace: nyancat | ||||||
|  | spec: | ||||||
|  |   replicas: 2 | ||||||
|  |   selector: | ||||||
|  |     matchLabels: | ||||||
|  |       app.kubernetes.io/name: nyancat | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: | ||||||
|  |         app.kubernetes.io/name: nyancat | ||||||
|  |     spec: | ||||||
|  |       containers: | ||||||
|  |         - name: nyancat | ||||||
|  |           image: harbor.k-space.ee/k-space/nyancat-server:latest | ||||||
|  |           command: | ||||||
|  |             - onenetd | ||||||
|  |             - -v1 | ||||||
|  |             - "0" | ||||||
|  |             - "2323" | ||||||
|  |             - nyancat | ||||||
|  |             - -I | ||||||
|  |             - --telnet | ||||||
|  |           securityContext: | ||||||
|  |             readOnlyRootFilesystem: true | ||||||
|  |             runAsNonRoot: true | ||||||
|  |             runAsUser: 65534 | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Service | ||||||
|  | metadata: | ||||||
|  |   name: nyancat | ||||||
|  |   namespace: nyancat | ||||||
|  |   annotations: | ||||||
|  |     metallb.universe.tf/address-pool: eenet | ||||||
|  |     external-dns.alpha.kubernetes.io/hostname: nyancat.k-space.ee | ||||||
|  | spec: | ||||||
|  |   type: LoadBalancer | ||||||
|  |   externalTrafficPolicy: Local | ||||||
|  |   selector: | ||||||
|  |     app.kubernetes.io/name: nyancat | ||||||
|  |   ports: | ||||||
|  |     - protocol: TCP | ||||||
|  |       port: 23 | ||||||
|  |       targetPort: 2323 | ||||||
							
								
								
									
										11
									
								
								openebs/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								openebs/README.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | # Raw file based local PV-s | ||||||
|  |  | ||||||
|  | We currently only use `rawfile-localpv` portion of OpenEBS. | ||||||
|  |  | ||||||
|  | The manifests were rendered using Helm template from https://github.com/openebs/rawfile-localpv | ||||||
|  | and subsequently modified | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | kubectl create namespace openebs | ||||||
|  | kubectl apply -n openebs -f rawfile.yaml | ||||||
|  | ``` | ||||||
							
								
								
									
										404
									
								
								openebs/rawfile.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										404
									
								
								openebs/rawfile.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,404 @@ | |||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: ServiceAccount | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-csi-driver | ||||||
|  |   namespace: openebs | ||||||
|  | --- | ||||||
|  | kind: ClusterRole | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-csi-provisioner | ||||||
|  | rules: | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["secrets"] | ||||||
|  |     verbs: ["get", "list"] | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["persistentvolumes"] | ||||||
|  |     verbs: ["get", "list", "watch", "create", "delete"] | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["persistentvolumeclaims"] | ||||||
|  |     verbs: ["get", "list", "watch", "update"] | ||||||
|  |   - apiGroups: ["storage.k8s.io"] | ||||||
|  |     resources: ["storageclasses"] | ||||||
|  |     verbs: ["get", "list", "watch"] | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["events"] | ||||||
|  |     verbs: ["list", "watch", "create", "update", "patch"] | ||||||
|  |   - apiGroups: ["snapshot.storage.k8s.io"] | ||||||
|  |     resources: ["volumesnapshots"] | ||||||
|  |     verbs: ["get", "list"] | ||||||
|  |   - apiGroups: ["snapshot.storage.k8s.io"] | ||||||
|  |     resources: ["volumesnapshotcontents"] | ||||||
|  |     verbs: ["get", "list"] | ||||||
|  |   - apiGroups: ["storage.k8s.io"] | ||||||
|  |     resources: ["csinodes"] | ||||||
|  |     verbs: ["get", "list", "watch"] | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["nodes"] | ||||||
|  |     verbs: ["get", "list", "watch"] | ||||||
|  |   - apiGroups: ["storage.k8s.io"] | ||||||
|  |     resources: ["volumeattachments"] | ||||||
|  |     verbs: ["get", "list", "watch"] | ||||||
|  |   - apiGroups: ["storage.k8s.io"] | ||||||
|  |     resources: ["csistoragecapacities"] | ||||||
|  |     verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["pods"] | ||||||
|  |     verbs: ["get"] | ||||||
|  |   - apiGroups: ["apps"] | ||||||
|  |     resources: ["daemonsets"] | ||||||
|  |     verbs: ["get"] | ||||||
|  | --- | ||||||
|  | kind: ClusterRole | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-csi-broker | ||||||
|  | rules: | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["persistentvolumes"] | ||||||
|  |     verbs: ["get"] | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["pods"] | ||||||
|  |     verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] | ||||||
|  | --- | ||||||
|  | kind: ClusterRole | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-csi-resizer | ||||||
|  | rules: | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["secrets"] | ||||||
|  |     verbs: ["get", "list", "watch"] | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["persistentvolumes"] | ||||||
|  |     verbs: ["get", "list", "watch", "patch"] | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["persistentvolumeclaims"] | ||||||
|  |     verbs: ["get", "list", "watch"] | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["pods"] | ||||||
|  |     verbs: ["get", "list", "watch"] | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["persistentvolumeclaims/status"] | ||||||
|  |     verbs: ["patch"] | ||||||
|  |   - apiGroups: [""] | ||||||
|  |     resources: ["events"] | ||||||
|  |     verbs: ["list", "watch", "create", "update", "patch"] | ||||||
|  | --- | ||||||
|  | kind: ClusterRoleBinding | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-csi-provisioner | ||||||
|  | subjects: | ||||||
|  |   - kind: ServiceAccount | ||||||
|  |     name: rawfile-csi-driver | ||||||
|  |     namespace: openebs | ||||||
|  | roleRef: | ||||||
|  |   kind: ClusterRole | ||||||
|  |   name: rawfile-csi-provisioner | ||||||
|  |   apiGroup: rbac.authorization.k8s.io | ||||||
|  | --- | ||||||
|  | kind: ClusterRoleBinding | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-csi-broker | ||||||
|  | subjects: | ||||||
|  |   - kind: ServiceAccount | ||||||
|  |     name: rawfile-csi-driver | ||||||
|  |     namespace: openebs | ||||||
|  | roleRef: | ||||||
|  |   kind: ClusterRole | ||||||
|  |   name: rawfile-csi-broker | ||||||
|  |   apiGroup: rbac.authorization.k8s.io | ||||||
|  | --- | ||||||
|  | kind: ClusterRoleBinding | ||||||
|  | apiVersion: rbac.authorization.k8s.io/v1 | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-csi-resizer | ||||||
|  | subjects: | ||||||
|  |   - kind: ServiceAccount | ||||||
|  |     name: rawfile-csi-driver | ||||||
|  |     namespace: openebs | ||||||
|  | roleRef: | ||||||
|  |   kind: ClusterRole | ||||||
|  |   name: rawfile-csi-resizer | ||||||
|  |   apiGroup: rbac.authorization.k8s.io | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Service | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-csi-controller | ||||||
|  |   namespace: openebs | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: rawfile-csi | ||||||
|  |     component: controller | ||||||
|  | spec: | ||||||
|  |   type: ClusterIP | ||||||
|  |   selector: | ||||||
|  |     app.kubernetes.io/name: rawfile-csi | ||||||
|  |     component: controller | ||||||
|  |   clusterIP: None | ||||||
|  | --- | ||||||
|  | apiVersion: v1 | ||||||
|  | kind: Service | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-csi-node | ||||||
|  |   namespace: openebs | ||||||
|  |   labels: | ||||||
|  |     app.kubernetes.io/name: rawfile-csi | ||||||
|  |     component: node | ||||||
|  | spec: | ||||||
|  |   type: ClusterIP | ||||||
|  |   ports: | ||||||
|  |     - name: metrics | ||||||
|  |       port: 9100 | ||||||
|  |       targetPort: metrics | ||||||
|  |       protocol: TCP | ||||||
|  |   selector: | ||||||
|  |     app.kubernetes.io/name: rawfile-csi | ||||||
|  |     component: node | ||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: DaemonSet | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-csi-node | ||||||
|  |   namespace: openebs | ||||||
|  | spec: | ||||||
|  |   updateStrategy: | ||||||
|  |     rollingUpdate: | ||||||
|  |       maxUnavailable: "100%" | ||||||
|  |   selector: | ||||||
|  |     matchLabels: &selectorLabels | ||||||
|  |       app.kubernetes.io/name: rawfile-csi | ||||||
|  |       component: node | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: *selectorLabels | ||||||
|  |     spec: | ||||||
|  |       serviceAccount: rawfile-csi-driver | ||||||
|  |       priorityClassName: system-node-critical | ||||||
|  |       tolerations: | ||||||
|  |         - operator: "Exists" | ||||||
|  |       volumes: | ||||||
|  |         - name: registration-dir | ||||||
|  |           hostPath: | ||||||
|  |             path: /var/lib/kubelet/plugins_registry | ||||||
|  |             type: Directory | ||||||
|  |         - name: socket-dir | ||||||
|  |           hostPath: | ||||||
|  |             path: /var/lib/kubelet/plugins/rawfile-csi | ||||||
|  |             type: DirectoryOrCreate | ||||||
|  |         - name: mountpoint-dir | ||||||
|  |           hostPath: | ||||||
|  |             path: /var/lib/kubelet | ||||||
|  |             type: DirectoryOrCreate | ||||||
|  |         - name: data-dir | ||||||
|  |           hostPath: | ||||||
|  |             path: /var/csi/rawfile | ||||||
|  |             type: DirectoryOrCreate | ||||||
|  |       containers: | ||||||
|  |         - name: csi-driver | ||||||
|  |           image: "harbor.k-space.ee/k-space/rawfile-localpv:latest" | ||||||
|  |           imagePullPolicy: Always | ||||||
|  |           securityContext: | ||||||
|  |             privileged: true | ||||||
|  |           env: | ||||||
|  |             - name: PROVISIONER_NAME | ||||||
|  |               value: "rawfile.csi.openebs.io" | ||||||
|  |             - name: CSI_ENDPOINT | ||||||
|  |               value: unix:///csi/csi.sock | ||||||
|  |             - name: IMAGE_REPOSITORY | ||||||
|  |               value: "harbor.k-space.ee/k-space/rawfile-localpv" | ||||||
|  |             - name: IMAGE_TAG | ||||||
|  |               value: "latest" | ||||||
|  |             - name: NODE_ID | ||||||
|  |               valueFrom: | ||||||
|  |                 fieldRef: | ||||||
|  |                   apiVersion: v1 | ||||||
|  |                   fieldPath: spec.nodeName | ||||||
|  |           ports: | ||||||
|  |             - name: metrics | ||||||
|  |               containerPort: 9100 | ||||||
|  |             - name: csi-probe | ||||||
|  |               containerPort: 9808 | ||||||
|  |           volumeMounts: | ||||||
|  |             - name: socket-dir | ||||||
|  |               mountPath: /csi | ||||||
|  |             - name: mountpoint-dir | ||||||
|  |               mountPath: /var/lib/kubelet | ||||||
|  |               mountPropagation: "Bidirectional" | ||||||
|  |             - name: data-dir | ||||||
|  |               mountPath: /data | ||||||
|  |           resources: | ||||||
|  |             limits: | ||||||
|  |               cpu: 1 | ||||||
|  |               memory: 100Mi | ||||||
|  |             requests: | ||||||
|  |               cpu: 10m | ||||||
|  |               memory: 100Mi | ||||||
|  |         - name: node-driver-registrar | ||||||
|  |           image: k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.2.0 | ||||||
|  |           imagePullPolicy: IfNotPresent | ||||||
|  |           args: | ||||||
|  |             - --csi-address=$(ADDRESS) | ||||||
|  |             - --kubelet-registration-path=$(DRIVER_REG_SOCK_PATH) | ||||||
|  |             - --health-port=9809 | ||||||
|  |           env: | ||||||
|  |             - name: ADDRESS | ||||||
|  |               value: /csi/csi.sock | ||||||
|  |             - name: DRIVER_REG_SOCK_PATH | ||||||
|  |               value: /var/lib/kubelet/plugins/rawfile-csi/csi.sock | ||||||
|  |           ports: | ||||||
|  |             - containerPort: 9809 | ||||||
|  |               name: healthz | ||||||
|  |           livenessProbe: | ||||||
|  |             httpGet: | ||||||
|  |               path: /healthz | ||||||
|  |               port: healthz | ||||||
|  |             initialDelaySeconds: 5 | ||||||
|  |             timeoutSeconds: 5 | ||||||
|  |           volumeMounts: | ||||||
|  |             - name: socket-dir | ||||||
|  |               mountPath: /csi | ||||||
|  |             - name: registration-dir | ||||||
|  |               mountPath: /registration | ||||||
|  |           resources: | ||||||
|  |             limits: | ||||||
|  |               cpu: 500m | ||||||
|  |               memory: 100Mi | ||||||
|  |             requests: | ||||||
|  |               cpu: 10m | ||||||
|  |               memory: 100Mi | ||||||
|  |         - name: external-provisioner | ||||||
|  |           image: k8s.gcr.io/sig-storage/csi-provisioner:v2.2.2 | ||||||
|  |           imagePullPolicy: IfNotPresent | ||||||
|  |           args: | ||||||
|  |             - "--csi-address=$(ADDRESS)" | ||||||
|  |             - "--feature-gates=Topology=true" | ||||||
|  |             - "--strict-topology" | ||||||
|  |             - "--immediate-topology=false" | ||||||
|  |             - "--timeout=120s" | ||||||
|  |             - "--enable-capacity=true" | ||||||
|  |             - "--capacity-ownerref-level=1" # DaemonSet | ||||||
|  |             - "--node-deployment=true" | ||||||
|  |           env: | ||||||
|  |             - name: ADDRESS | ||||||
|  |               value: /csi/csi.sock | ||||||
|  |             - name: NODE_NAME | ||||||
|  |               valueFrom: | ||||||
|  |                 fieldRef: | ||||||
|  |                   fieldPath: spec.nodeName | ||||||
|  |             - name: NAMESPACE | ||||||
|  |               valueFrom: | ||||||
|  |                 fieldRef: | ||||||
|  |                   fieldPath: metadata.namespace | ||||||
|  |             - name: POD_NAME | ||||||
|  |               valueFrom: | ||||||
|  |                 fieldRef: | ||||||
|  |                   fieldPath: metadata.name | ||||||
|  |           volumeMounts: | ||||||
|  |             - name: socket-dir | ||||||
|  |               mountPath: /csi | ||||||
|  | --- | ||||||
|  | apiVersion: apps/v1 | ||||||
|  | kind: StatefulSet | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-csi-controller | ||||||
|  |   namespace: openebs | ||||||
|  | spec: | ||||||
|  |   replicas: 1 | ||||||
|  |   serviceName: rawfile-csi | ||||||
|  |   selector: | ||||||
|  |     matchLabels: &selectorLabels | ||||||
|  |       app.kubernetes.io/name: rawfile-csi | ||||||
|  |       component: controller | ||||||
|  |   template: | ||||||
|  |     metadata: | ||||||
|  |       labels: *selectorLabels | ||||||
|  |     spec: | ||||||
|  |       serviceAccount: rawfile-csi-driver | ||||||
|  |       priorityClassName: system-cluster-critical | ||||||
|  |       tolerations: | ||||||
|  |         - key: "node-role.kubernetes.io/master" | ||||||
|  |           operator: Equal | ||||||
|  |           value: "true" | ||||||
|  |           effect: NoSchedule | ||||||
|  |       volumes: | ||||||
|  |         - name: socket-dir | ||||||
|  |           emptyDir: {} | ||||||
|  |       containers: | ||||||
|  |         - name: csi-driver | ||||||
|  |           image: "harbor.k-space.ee/k-space/rawfile-localpv" | ||||||
|  |           imagePullPolicy: Always | ||||||
|  |           args: | ||||||
|  |             - csi-driver | ||||||
|  |             - --disable-metrics | ||||||
|  |           env: | ||||||
|  |             - name: PROVISIONER_NAME | ||||||
|  |               value: "rawfile.csi.openebs.io" | ||||||
|  |             - name: CSI_ENDPOINT | ||||||
|  |               value: unix:///csi/csi.sock | ||||||
|  |             - name: IMAGE_REPOSITORY | ||||||
|  |               value: "harbor.k-space.ee/k-space/rawfile-localpv" | ||||||
|  |             - name: IMAGE_TAG | ||||||
|  |               value: "latest" | ||||||
|  |           volumeMounts: | ||||||
|  |             - name: socket-dir | ||||||
|  |               mountPath: /csi | ||||||
|  |           ports: | ||||||
|  |             - name: csi-probe | ||||||
|  |               containerPort: 9808 | ||||||
|  |           resources: | ||||||
|  |             limits: | ||||||
|  |               cpu: 1 | ||||||
|  |               memory: 100Mi | ||||||
|  |             requests: | ||||||
|  |               cpu: 10m | ||||||
|  |               memory: 100Mi | ||||||
|  |         - name: external-resizer | ||||||
|  |           image: k8s.gcr.io/sig-storage/csi-resizer:v1.4.0 | ||||||
|  |           imagePullPolicy: IfNotPresent | ||||||
|  |           args: | ||||||
|  |             - "--csi-address=$(ADDRESS)" | ||||||
|  |             - "--handle-volume-inuse-error=false" | ||||||
|  |           env: | ||||||
|  |             - name: ADDRESS | ||||||
|  |               value: /csi/csi.sock | ||||||
|  |           volumeMounts: | ||||||
|  |             - name: socket-dir | ||||||
|  |               mountPath: /csi | ||||||
|  | --- | ||||||
|  | apiVersion: storage.k8s.io/v1 | ||||||
|  | kind: CSIDriver | ||||||
|  | metadata: | ||||||
|  |   name: rawfile.csi.openebs.io | ||||||
|  | spec: | ||||||
|  |   attachRequired: false | ||||||
|  |   podInfoOnMount: true | ||||||
|  |   fsGroupPolicy: File | ||||||
|  |   storageCapacity: true | ||||||
|  |   volumeLifecycleModes: | ||||||
|  |     - Persistent | ||||||
|  | --- | ||||||
|  | apiVersion: storage.k8s.io/v1 | ||||||
|  | kind: StorageClass | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-ext4 | ||||||
|  | provisioner: rawfile.csi.openebs.io | ||||||
|  | reclaimPolicy: Retain | ||||||
|  | volumeBindingMode: WaitForFirstConsumer | ||||||
|  | allowVolumeExpansion: true | ||||||
|  | parameters: | ||||||
|  |   fsType: "ext4" | ||||||
|  | --- | ||||||
|  | apiVersion: storage.k8s.io/v1 | ||||||
|  | kind: StorageClass | ||||||
|  | metadata: | ||||||
|  |   name: rawfile-xfs | ||||||
|  | provisioner: rawfile.csi.openebs.io | ||||||
|  | reclaimPolicy: Retain | ||||||
|  | volumeBindingMode: WaitForFirstConsumer | ||||||
|  | allowVolumeExpansion: true | ||||||
|  | parameters: | ||||||
|  |   fsType: "xfs" | ||||||
							
								
								
									
										1
									
								
								prometheus-operator/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								prometheus-operator/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | bundle.yml | ||||||
| @@ -1,7 +1,7 @@ | |||||||
| # Prometheus operator | # Prometheus operator | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| curl -L https://github.com/prometheus-operator/prometheus-operator/releases/download/v0.59.0/bundle.yaml | sed -e 's/namespace: default/namespace: prometheus-operator/g' > bundle.yml | curl -L https://github.com/prometheus-operator/prometheus-operator/releases/download/v0.61.1/bundle.yaml | sed -e 's/namespace: default/namespace: prometheus-operator/g' > bundle.yml | ||||||
| kubectl create namespace prometheus-operator | kubectl create namespace prometheus-operator | ||||||
| kubectl apply --server-side -n prometheus-operator -f bundle.yml | kubectl apply --server-side -n prometheus-operator -f bundle.yml | ||||||
| kubectl delete -n prometheus-operator configmap snmp-exporter | kubectl delete -n prometheus-operator configmap snmp-exporter | ||||||
|   | |||||||
| @@ -7,7 +7,14 @@ metadata: | |||||||
|     app.kubernetes.io/name: alertmanager |     app.kubernetes.io/name: alertmanager | ||||||
| spec: | spec: | ||||||
|   route: |   route: | ||||||
|     receiver: 'slack-notifications' |     routes: | ||||||
|  |       - continue: false | ||||||
|  |         receiver: slack-notifications | ||||||
|  |         matchers: | ||||||
|  |           - matchType: "=" | ||||||
|  |             name: severity | ||||||
|  |             value: critical | ||||||
|  |     receiver: 'null' | ||||||
|   receivers: |   receivers: | ||||||
|   - name: 'slack-notifications' |   - name: 'slack-notifications' | ||||||
|     slackConfigs: |     slackConfigs: | ||||||
| @@ -33,9 +40,12 @@ kind: Alertmanager | |||||||
| metadata: | metadata: | ||||||
|   name: alertmanager |   name: alertmanager | ||||||
| spec: | spec: | ||||||
|   alertmanagerConfigSelector: |   alertmanagerConfigMatcherStrategy: | ||||||
|     matchLabels: |     type: None | ||||||
|       app.kubernetes.io/name: alertmanager |   alertmanagerConfigNamespaceSelector: {} | ||||||
|  |   alertmanagerConfigSelector: {} | ||||||
|  |   alertmanagerConfiguration: | ||||||
|  |     name: alertmanager | ||||||
|   secrets: |   secrets: | ||||||
|     - slack-secrets |     - slack-secrets | ||||||
|   nodeSelector: |   nodeSelector: | ||||||
| @@ -94,7 +104,7 @@ spec: | |||||||
|   probeSelector: {} |   probeSelector: {} | ||||||
|   ruleNamespaceSelector: {} |   ruleNamespaceSelector: {} | ||||||
|   ruleSelector: {} |   ruleSelector: {} | ||||||
|   retentionSize: 80GB |   retentionSize: 8GB | ||||||
|   storage: |   storage: | ||||||
|     volumeClaimTemplate: |     volumeClaimTemplate: | ||||||
|       spec: |       spec: | ||||||
| @@ -102,7 +112,7 @@ spec: | |||||||
|         - ReadWriteOnce |         - ReadWriteOnce | ||||||
|         resources: |         resources: | ||||||
|           requests: |           requests: | ||||||
|             storage: 100Gi |             storage: 10Gi | ||||||
|         storageClassName: local-path |         storageClassName: local-path | ||||||
| --- | --- | ||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
|   | |||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -87,7 +87,13 @@ spec: | |||||||
|       affinity: |       affinity: | ||||||
|         podAntiAffinity: |         podAntiAffinity: | ||||||
|           requiredDuringSchedulingIgnoredDuringExecution: |           requiredDuringSchedulingIgnoredDuringExecution: | ||||||
|           - topologyKey: "kubernetes.io/hostname" |           - labelSelector: | ||||||
|  |               matchExpressions: | ||||||
|  |               - key: app | ||||||
|  |                 operator: In | ||||||
|  |                 values: | ||||||
|  |                 - mikrotik-exporter | ||||||
|  |             topologyKey: "kubernetes.io/hostname" | ||||||
| --- | --- | ||||||
| kind: Service | kind: Service | ||||||
| apiVersion: v1 | apiVersion: v1 | ||||||
|   | |||||||
| @@ -4,11 +4,13 @@ kind: Probe | |||||||
| metadata: | metadata: | ||||||
|   name: nodes-proxmox |   name: nodes-proxmox | ||||||
| spec: | spec: | ||||||
|  |   scrapeTimeout: 30s | ||||||
|   targets: |   targets: | ||||||
|     staticConfig: |     staticConfig: | ||||||
|       static: |       static: | ||||||
|         - nas.mgmt.k-space.ee:9100 |         - nas.mgmt.k-space.ee:9100 | ||||||
|         - pve1.proxmox.infra.k-space.ee:9100 |         - pve1.proxmox.infra.k-space.ee:9100 | ||||||
|  |         - pve2.proxmox.infra.k-space.ee:9100 | ||||||
|         - pve8.proxmox.infra.k-space.ee:9100 |         - pve8.proxmox.infra.k-space.ee:9100 | ||||||
|         - pve9.proxmox.infra.k-space.ee:9100 |         - pve9.proxmox.infra.k-space.ee:9100 | ||||||
|       relabelingConfigs: |       relabelingConfigs: | ||||||
| @@ -86,37 +88,37 @@ spec: | |||||||
|             summary: Host memory under memory pressure (instance {{ $labels.instance }}) |             summary: Host memory under memory pressure (instance {{ $labels.instance }}) | ||||||
|             description: The node is under heavy memory pressure. High rate of major page faults |             description: The node is under heavy memory pressure. High rate of major page faults | ||||||
|         - alert: HostUnusualNetworkThroughputIn |         - alert: HostUnusualNetworkThroughputIn | ||||||
|           expr: sum by (instance) (rate(node_network_receive_bytes_total[2m])) > 160e+06 |           expr: sum by (instance) (rate(node_network_receive_bytes_total[2m])) > 800e+06 | ||||||
|           for: 1h |           for: 1h | ||||||
|           labels: |           labels: | ||||||
|             severity: warning |             severity: warning | ||||||
|           annotations: |           annotations: | ||||||
|             summary: Host unusual network throughput in (instance {{ $labels.instance }}) |             summary: Host unusual network throughput in (instance {{ $labels.instance }}) | ||||||
|             description: Host network interfaces are probably receiving too much data (> 160 MB/s) |             description: Host network interfaces are probably receiving too much data (> 800 MB/s) | ||||||
|         - alert: HostUnusualNetworkThroughputOut |         - alert: HostUnusualNetworkThroughputOut | ||||||
|           expr: sum by (instance) (rate(node_network_transmit_bytes_total[2m])) > 160e+06 |           expr: sum by (instance) (rate(node_network_transmit_bytes_total[2m])) > 800e+06 | ||||||
|           for: 1h |           for: 1h | ||||||
|           labels: |           labels: | ||||||
|             severity: warning |             severity: warning | ||||||
|           annotations: |           annotations: | ||||||
|             summary: Host unusual network throughput out (instance {{ $labels.instance }}) |             summary: Host unusual network throughput out (instance {{ $labels.instance }}) | ||||||
|             description: Host network interfaces are probably sending too much data (> 160 MB/s) |             description: Host network interfaces are probably sending too much data (> 800 MB/s) | ||||||
|         - alert: HostUnusualDiskReadRate |         - alert: HostUnusualDiskReadRate | ||||||
|           expr: sum by (instance) (rate(node_disk_read_bytes_total[2m])) > 50000000 |           expr: sum by (instance) (rate(node_disk_read_bytes_total[2m])) > 500e+06 | ||||||
|           for: 1h |           for: 1h | ||||||
|           labels: |           labels: | ||||||
|             severity: warning |             severity: warning | ||||||
|           annotations: |           annotations: | ||||||
|             summary: Host unusual disk read rate (instance {{ $labels.instance }}) |             summary: Host unusual disk read rate (instance {{ $labels.instance }}) | ||||||
|             description: Disk is probably reading too much data (> 50 MB/s) |             description: Disk is probably reading too much data (> 500 MB/s) | ||||||
|         - alert: HostUnusualDiskWriteRate |         - alert: HostUnusualDiskWriteRate | ||||||
|           expr: sum by (instance) (rate(node_disk_written_bytes_total[2m])) > 50000000 |           expr: sum by (instance) (rate(node_disk_written_bytes_total[2m])) > 500e+06 | ||||||
|           for: 1h |           for: 1h | ||||||
|           labels: |           labels: | ||||||
|             severity: warning |             severity: warning | ||||||
|           annotations: |           annotations: | ||||||
|             summary: Host unusual disk write rate (instance {{ $labels.instance }}) |             summary: Host unusual disk write rate (instance {{ $labels.instance }}) | ||||||
|             description: Disk is probably writing too much data (> 50 MB/s) |             description: Disk is probably writing too much data (> 500 MB/s) | ||||||
|         # Please add ignored mountpoints in node_exporter parameters like |         # Please add ignored mountpoints in node_exporter parameters like | ||||||
|         # "--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|run)($|/)". |         # "--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|run)($|/)". | ||||||
|         # Same rule using "node_filesystem_free_bytes" will fire when disk fills for non-root users. |         # Same rule using "node_filesystem_free_bytes" will fire when disk fills for non-root users. | ||||||
| @@ -361,11 +363,13 @@ kind: PodMonitor | |||||||
| metadata: | metadata: | ||||||
|   name: node-exporter |   name: node-exporter | ||||||
| spec: | spec: | ||||||
|  |  | ||||||
|   selector: |   selector: | ||||||
|     matchLabels: |     matchLabels: | ||||||
|       app: node-exporter |       app: node-exporter | ||||||
|   podMetricsEndpoints: |   podMetricsEndpoints: | ||||||
|     - port: web |     - port: web | ||||||
|  |       scrapeTimeout: 30s | ||||||
|       relabelings: |       relabelings: | ||||||
|         - sourceLabels: [__meta_kubernetes_pod_node_name] |         - sourceLabels: [__meta_kubernetes_pod_node_name] | ||||||
|           targetLabel: node |           targetLabel: node | ||||||
| @@ -402,9 +406,10 @@ spec: | |||||||
|             - --path.rootfs=/host/root |             - --path.rootfs=/host/root | ||||||
|             - --no-collector.wifi |             - --no-collector.wifi | ||||||
|             - --collector.filesystem.mount-points-exclude=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/) |             - --collector.filesystem.mount-points-exclude=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/) | ||||||
|             - --collector.netclass.ignored-devices=^(veth.*|[a-f0-9]{15})$ |             - --collector.netclass.ignored-devices=^(veth|cali|vxlan|cni|vnet|tap|lo|wg) | ||||||
|             - --collector.netdev.device-exclude=^(veth.*|[a-f0-9]{15})$ |             - --collector.netdev.device-exclude=^(veth|cali|vxlan|cni|vnet|tap|lo|wg) | ||||||
|           image: prom/node-exporter:v1.3.1 |             - --collector.diskstats.ignored-devices=^(sr[0-9][0-9]*)$ | ||||||
|  |           image: prom/node-exporter:v1.5.0 | ||||||
|           resources: |           resources: | ||||||
|             limits: |             limits: | ||||||
|               cpu: 50m |               cpu: 50m | ||||||
|   | |||||||
							
								
								
									
										55
									
								
								storage-class.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								storage-class.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,55 @@ | |||||||
|  | --- | ||||||
|  | apiVersion: storage.k8s.io/v1 | ||||||
|  | kind: StorageClass | ||||||
|  | metadata: | ||||||
|  |   name: mongo | ||||||
|  | provisioner: rawfile.csi.openebs.io | ||||||
|  | reclaimPolicy: Retain | ||||||
|  | volumeBindingMode: WaitForFirstConsumer | ||||||
|  | allowVolumeExpansion: true | ||||||
|  | parameters: | ||||||
|  |   fsType: "xfs" | ||||||
|  | --- | ||||||
|  | apiVersion: storage.k8s.io/v1 | ||||||
|  | kind: StorageClass | ||||||
|  | metadata: | ||||||
|  |   name: minio | ||||||
|  | provisioner: rawfile.csi.openebs.io | ||||||
|  | reclaimPolicy: Retain | ||||||
|  | volumeBindingMode: WaitForFirstConsumer | ||||||
|  | allowVolumeExpansion: true | ||||||
|  | parameters: | ||||||
|  |   fsType: "xfs" | ||||||
|  | --- | ||||||
|  | apiVersion: storage.k8s.io/v1 | ||||||
|  | kind: StorageClass | ||||||
|  | metadata: | ||||||
|  |   name: prometheus | ||||||
|  | provisioner: rawfile.csi.openebs.io | ||||||
|  | reclaimPolicy: Retain | ||||||
|  | volumeBindingMode: WaitForFirstConsumer | ||||||
|  | allowVolumeExpansion: true | ||||||
|  | parameters: | ||||||
|  |   fsType: "xfs" | ||||||
|  | --- | ||||||
|  | apiVersion: storage.k8s.io/v1 | ||||||
|  | kind: StorageClass | ||||||
|  | metadata: | ||||||
|  |   name: postgres | ||||||
|  | provisioner: rawfile.csi.openebs.io | ||||||
|  | reclaimPolicy: Retain | ||||||
|  | volumeBindingMode: WaitForFirstConsumer | ||||||
|  | allowVolumeExpansion: true | ||||||
|  | parameters: | ||||||
|  |   fsType: "xfs" | ||||||
|  | --- | ||||||
|  | apiVersion: storage.k8s.io/v1 | ||||||
|  | kind: StorageClass | ||||||
|  | metadata: | ||||||
|  |   name: mysql | ||||||
|  | provisioner: rawfile.csi.openebs.io | ||||||
|  | reclaimPolicy: Retain | ||||||
|  | volumeBindingMode: WaitForFirstConsumer | ||||||
|  | allowVolumeExpansion: true | ||||||
|  | parameters: | ||||||
|  |   fsType: "xfs" | ||||||
| @@ -805,11 +805,6 @@ spec: | |||||||
|                   node appears to use the IP of the ingress node; this requires a |                   node appears to use the IP of the ingress node; this requires a | ||||||
|                   permissive L2 network.  [Default: Tunnel]' |                   permissive L2 network.  [Default: Tunnel]' | ||||||
|                 type: string |                 type: string | ||||||
|               bpfHostConntrackBypass: |  | ||||||
|                 description: 'BPFHostConntrackBypass Controls whether to bypass Linux |  | ||||||
|                   conntrack in BPF mode for workloads and services. [Default: true |  | ||||||
|                   - bypass Linux conntrack]' |  | ||||||
|                 type: boolean |  | ||||||
|               bpfKubeProxyEndpointSlicesEnabled: |               bpfKubeProxyEndpointSlicesEnabled: | ||||||
|                 description: BPFKubeProxyEndpointSlicesEnabled in BPF mode, controls |                 description: BPFKubeProxyEndpointSlicesEnabled in BPF mode, controls | ||||||
|                   whether Felix's embedded kube-proxy accepts EndpointSlices or not. |                   whether Felix's embedded kube-proxy accepts EndpointSlices or not. | ||||||
| @@ -1342,8 +1337,8 @@ spec: | |||||||
|                 type: boolean |                 type: boolean | ||||||
|               vxlanEnabled: |               vxlanEnabled: | ||||||
|                 description: 'VXLANEnabled overrides whether Felix should create the |                 description: 'VXLANEnabled overrides whether Felix should create the | ||||||
|                   VXLAN tunnel device for IPv4 VXLAN networking. Optional as Felix |                   VXLAN tunnel device for VXLAN networking. Optional as Felix determines | ||||||
|                   determines this based on the existing IP pools. [Default: nil (unset)]' |                   this based on the existing IP pools. [Default: nil (unset)]' | ||||||
|                 type: boolean |                 type: boolean | ||||||
|               vxlanMTU: |               vxlanMTU: | ||||||
|                 description: 'VXLANMTU is the MTU to set on the IPv4 VXLAN tunnel |                 description: 'VXLANMTU is the MTU to set on the IPv4 VXLAN tunnel | ||||||
| @@ -2776,7 +2771,7 @@ spec: | |||||||
|                   for internal use only.' |                   for internal use only.' | ||||||
|                 type: boolean |                 type: boolean | ||||||
|               natOutgoing: |               natOutgoing: | ||||||
|                 description: When natOutgoing is true, packets sent from Calico networked |                 description: When nat-outgoing is true, packets sent from Calico networked | ||||||
|                   containers in this pool to destinations outside of this pool will |                   containers in this pool to destinations outside of this pool will | ||||||
|                   be masqueraded. |                   be masqueraded. | ||||||
|                 type: boolean |                 type: boolean | ||||||
| @@ -9651,14 +9646,6 @@ spec: | |||||||
|                       type: string |                       type: string | ||||||
|                   type: object |                   type: object | ||||||
|                 type: array |                 type: array | ||||||
|               fipsMode: |  | ||||||
|                 description: 'FIPSMode uses images and features only that are using |  | ||||||
|                   FIPS 140-2 validated cryptographic modules and standards. Default: |  | ||||||
|                   Disabled' |  | ||||||
|                 enum: |  | ||||||
|                 - Enabled |  | ||||||
|                 - Disabled |  | ||||||
|                 type: string |  | ||||||
|               flexVolumePath: |               flexVolumePath: | ||||||
|                 description: FlexVolumePath optionally specifies a custom path for |                 description: FlexVolumePath optionally specifies a custom path for | ||||||
|                   FlexVolume. If not specified, FlexVolume will be enabled by default. |                   FlexVolume. If not specified, FlexVolume will be enabled by default. | ||||||
| @@ -9702,7 +9689,7 @@ spec: | |||||||
|               kubeletVolumePluginPath: |               kubeletVolumePluginPath: | ||||||
|                 description: 'KubeletVolumePluginPath optionally specifies enablement |                 description: 'KubeletVolumePluginPath optionally specifies enablement | ||||||
|                   of Calico CSI plugin. If not specified, CSI will be enabled by default. |                   of Calico CSI plugin. If not specified, CSI will be enabled by default. | ||||||
|                   If set to ''None'', CSI will be disabled. Default: /var/lib/kubelet' |                   If set to "None", CSI will be disabled. Default: /var/lib/kubelet' | ||||||
|                 type: string |                 type: string | ||||||
|               kubernetesProvider: |               kubernetesProvider: | ||||||
|                 description: KubernetesProvider specifies a particular provider of |                 description: KubernetesProvider specifies a particular provider of | ||||||
| @@ -15811,14 +15798,6 @@ spec: | |||||||
|                           type: string |                           type: string | ||||||
|                       type: object |                       type: object | ||||||
|                     type: array |                     type: array | ||||||
|                   fipsMode: |  | ||||||
|                     description: 'FIPSMode uses images and features only that are |  | ||||||
|                       using FIPS 140-2 validated cryptographic modules and standards. |  | ||||||
|                       Default: Disabled' |  | ||||||
|                     enum: |  | ||||||
|                     - Enabled |  | ||||||
|                     - Disabled |  | ||||||
|                     type: string |  | ||||||
|                   flexVolumePath: |                   flexVolumePath: | ||||||
|                     description: FlexVolumePath optionally specifies a custom path |                     description: FlexVolumePath optionally specifies a custom path | ||||||
|                       for FlexVolume. If not specified, FlexVolume will be enabled |                       for FlexVolume. If not specified, FlexVolume will be enabled | ||||||
| @@ -15861,9 +15840,8 @@ spec: | |||||||
|                     type: array |                     type: array | ||||||
|                   kubeletVolumePluginPath: |                   kubeletVolumePluginPath: | ||||||
|                     description: 'KubeletVolumePluginPath optionally specifies enablement |                     description: 'KubeletVolumePluginPath optionally specifies enablement | ||||||
|                       of Calico CSI plugin. If not specified, CSI will be enabled |                       of Calico CSI plugin. If not specified, CSI will be enabled by default. | ||||||
|                       by default. If set to ''None'', CSI will be disabled. Default: |                       If set to "None", CSI will be disabled. Default: /var/lib/kubelet' | ||||||
|                       /var/lib/kubelet' |  | ||||||
|                     type: string |                     type: string | ||||||
|                   kubernetesProvider: |                   kubernetesProvider: | ||||||
|                     description: KubernetesProvider specifies a particular provider |                     description: KubernetesProvider specifies a particular provider | ||||||
|   | |||||||
| @@ -8,29 +8,10 @@ websecure: | |||||||
| providers: | providers: | ||||||
|   kubernetesCRD: |   kubernetesCRD: | ||||||
|     enabled: true |     enabled: true | ||||||
|     namespaces: |  | ||||||
|       - traefik |  | ||||||
|       - authelia |  | ||||||
|  |  | ||||||
|   kubernetesIngress: |   kubernetesIngress: | ||||||
|     allowEmptyServices: true |     allowEmptyServices: true | ||||||
|     allowExternalNameServices: true |     allowExternalNameServices: true | ||||||
|     namespaces: |  | ||||||
|       - argocd |  | ||||||
|       - authelia |  | ||||||
|       - camtiler |  | ||||||
|       - drone |  | ||||||
|       - elastic-system |  | ||||||
|       - etherpad |  | ||||||
|       - freescout |  | ||||||
|       - grafana |  | ||||||
|       - harbor |  | ||||||
|       - kubernetes-dashboard |  | ||||||
|       - logging |  | ||||||
|       - longhorn-system |  | ||||||
|       - phpmyadmin |  | ||||||
|       - prometheus-operator |  | ||||||
|       - wildduck |  | ||||||
|  |  | ||||||
| deployment: | deployment: | ||||||
|   replicas: 2 |   replicas: 2 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user