k8s/roles/uyuni/tasks/helm.yml
mrwho 2340e4e90f fix(helm): adjust timezone, PostgreSQL paths, and probe timeouts for Moscow deployment
Update container timezone to Europe/Moscow, correct PostgreSQL data directory path, adjust TLS key file permissions, and extend health check timeouts to accommodate slower startup environments.
2026-07-20 01:07:37 +03:00

1747 lines
51 KiB
YAML

---
# ConfigMaps
- name: ConfigMap | uyuni-config
kubernetes.core.k8s:
api_version: v1
kind: ConfigMap
name: uyuni-config
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/part-of: uyuni
name: uyuni-config
namespace: '{{ uyuni_namespace }}'
data:
fqdn: "{{ uyuni_helm_values['global.fqdn'] }}"
email: "{{ uyuni_helm_values['server.email'] }}"
db_host: db
db_port: '5432'
db_name: "{{ uyuni_helm_values['db.internal.name'] }}"
reportdb_host: reportdb
reportdb_port: '5432'
reportdb_name: reportdb
state: present
# PersistentVolumeClaims
- name: PersistentVolumeClaim | ca-certs
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: ca-certs
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: ca-certs
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | etc-apache2
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-apache2
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-apache2
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-cobbler
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-cobbler
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-cobbler
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-postfix
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-postfix
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-postfix
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-rhn
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-rhn
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-rhn
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-salt
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-salt
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-salt
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-sssd
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-sssd
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-sssd
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-sysconfig
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-sysconfig
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-sysconfig
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Mi
state: present
- name: PersistentVolumeClaim | etc-systemd-multi
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-systemd-multi
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-systemd-multi
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-systemd-sockets
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-systemd-sockets
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-systemd-sockets
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | etc-tomcat
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: etc-tomcat
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: etc-tomcat
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | run-salt-master
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: run-salt-master
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: run-salt-master
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | srv-formulametadata
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-formulametadata
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-formulametadata
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | srv-pillar
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-pillar
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-pillar
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | srv-salt
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-salt
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-salt
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | srv-spacewalk
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-spacewalk
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-spacewalk
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | srv-susemanager
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-susemanager
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-susemanager
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Mi
state: present
- name: PersistentVolumeClaim | srv-tftpboot
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-tftpboot
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-tftpboot
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 300Mi
state: present
- name: PersistentVolumeClaim | srv-www
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: srv-www
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: srv-www
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
state: present
- name: PersistentVolumeClaim | var-cache
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-cache
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-cache
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
state: present
- name: PersistentVolumeClaim | var-cobbler
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-cobbler
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-cobbler
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | var-log
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-log
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-log
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
state: present
- name: PersistentVolumeClaim | var-pgsql18
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-pgsql18
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-pgsql18
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
state: present
- name: PersistentVolumeClaim | var-salt
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-salt
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-salt
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Mi
state: present
- name: PersistentVolumeClaim | var-search
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-search
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-search
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
state: present
- name: PersistentVolumeClaim | var-spacewalk
kubernetes.core.k8s:
api_version: v1
kind: PersistentVolumeClaim
name: var-spacewalk
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
name: var-spacewalk
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
state: present
# Services
- name: Service | cobbler
kubernetes.core.k8s:
api_version: v1
kind: Service
name: cobbler
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: cobbler
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: cobbler
port: 25151
selector:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | db
kubernetes.core.k8s:
api_version: v1
kind: Service
name: db
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
name: db
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: pgsql
port: 5432
selector:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | reportdb
kubernetes.core.k8s:
api_version: v1
kind: Service
name: reportdb
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
name: reportdb
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: pgsql
port: 5432
selector:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | salt
kubernetes.core.k8s:
api_version: v1
kind: Service
name: salt
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: salt
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: publish
port: 4505
- name: request
port: 4506
selector:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | taskomatic-internal
kubernetes.core.k8s:
api_version: v1
kind: Service
name: taskomatic-internal
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: taskomatic-internal
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: jmx
port: 5557
- name: mtrx
port: 9800
selector:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | tomcat-internal
kubernetes.core.k8s:
api_version: v1
kind: Service
name: tomcat-internal
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: tomcat-internal
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: node-exporter
port: 9100
- name: jmx
port: 5556
- name: pgsql-exporter
port: 9187
selector:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
- name: Service | web
kubernetes.core.k8s:
api_version: v1
kind: Service
name: web
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: web
namespace: '{{ uyuni_namespace }}'
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
type: ClusterIP
state: present
# Deployments
- name: Deployment | db
kubernetes.core.k8s:
api_version: apps/v1
kind: Deployment
name: db
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: apps/v1
metadata:
creationTimestamp: null
labels:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
name: db
namespace: '{{ uyuni_namespace }}'
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
strategy:
type: Recreate
template:
metadata:
labels:
app.kubernetes.io/component: db
app.kubernetes.io/part-of: uyuni
spec:
containers:
- env:
- name: TZ
value: Europe/Moscow
- name: POSTGRES_USER
valueFrom:
secretKeyRef:
key: username
name: db-admin-credentials
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
key: password
name: db-admin-credentials
- name: MANAGER_USER
valueFrom:
secretKeyRef:
key: username
name: db-credentials
- name: MANAGER_PASS
valueFrom:
secretKeyRef:
key: password
name: db-credentials
- name: REPORT_DB_USER
valueFrom:
secretKeyRef:
key: username
name: reportdb-credentials
- name: REPORT_DB_PASS
valueFrom:
secretKeyRef:
key: password
name: reportdb-credentials
image: registry.opensuse.org/uyuni/server-postgresql:latest
imagePullPolicy: IfNotPresent
name: db
volumeMounts:
- mountPath: /var/lib/pgsql
name: var-pgsql
- mountPath: /etc/pki
name: tls-secret
securityContext:
fsGroup: 999
volumes:
- name: var-pgsql
persistentVolumeClaim:
claimName: var-pgsql18
- name: tls-secret
secret:
items:
- key: tls.crt
path: tls/certs/spacewalk.crt
- key: tls.key
mode: 0640
# mode: 256
path: tls/private/pg-spacewalk.key
- key: ca.crt
path: trust/anchors/LOCAL-RHN-ORG-TRUSTED-SSL-CERT
secretName: db-cert
state: present
- name: Deployment | uyuni
kubernetes.core.k8s:
api_version: apps/v1
kind: Deployment
name: uyuni
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: apps/v1
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
name: uyuni
namespace: '{{ uyuni_namespace }}'
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
strategy:
type: Recreate
template:
metadata:
labels:
app.kubernetes.io/component: server
app.kubernetes.io/part-of: uyuni
spec:
containers:
- env:
- name: container
value: oci
- name: TZ
value: Europe/Moscow
- name: ADMIN_USER
valueFrom:
secretKeyRef:
key: username
name: admin-credentials
optional: false
- name: ADMIN_PASS
valueFrom:
secretKeyRef:
key: password
name: admin-credentials
optional: false
- name: MANAGER_USER
valueFrom:
secretKeyRef:
key: username
name: db-credentials
optional: false
- name: MANAGER_PASS
valueFrom:
secretKeyRef:
key: password
name: db-credentials
optional: false
- name: REPORT_DB_USER
valueFrom:
secretKeyRef:
key: username
name: reportdb-credentials
optional: false
- name: REPORT_DB_PASS
valueFrom:
secretKeyRef:
key: password
name: reportdb-credentials
optional: false
- name: MANAGER_DB_NAME
value: "{{ uyuni_helm_values['db.internal.name'] }}"
- name: MANAGER_DB_HOST
value: db
- name: MANAGER_DB_CA_CERT
value: /etc/pki/trust/anchors/DB-RHN-ORG-TRUSTED-SSL-CERT
- name: MANAGER_DB_PORT
value: '5432'
- name: EXTERNALDB_PROVIDER
- name: ISS_PARENT
- name: REPORT_DB_NAME
value: reportdb
- name: REPORT_DB_HOST
value: reportdb
- name: REPORT_DB_CA_CERT
value: /etc/pki/trust/anchors/DB-RHN-ORG-TRUSTED-SSL-CERT
- name: REPORT_DB_PORT
value: '5432'
- name: MANAGER_ADMIN_EMAIL
valueFrom:
configMapKeyRef:
key: email
name: uyuni-config
optional: false
- name: MANAGER_MAIL_FROM
valueFrom:
configMapKeyRef:
key: email
name: uyuni-config
optional: false
- name: UYUNI_HOSTNAME
valueFrom:
configMapKeyRef:
key: fqdn
name: uyuni-config
optional: false
image: registry.opensuse.org/uyuni/server:latest
imagePullPolicy: IfNotPresent
lifecycle:
preStop:
exec:
command:
- /bin/sh
- -c
- spacewalk-service stop
name: uyuni
securityContext:
capabilities:
add:
- SYS_ADMIN
seLinuxOptions:
level: s0
ports:
- containerPort: 80
- containerPort: 4505
- containerPort: 4506
- containerPort: 25151
- containerPort: 9100
- containerPort: 5556
- containerPort: 5557
- containerPort: 9187
- containerPort: 9800
startupProbe:
exec:
command:
- /usr/bin/startup-check.sh
periodSeconds: 10
timeoutSeconds: 600
initialDelaySeconds: 360
failureThreshold: 3600
livenessProbe:
exec:
command:
- /usr/bin/liveness-check.sh
timeoutSeconds: 60
failureThreshold: 5
periodSeconds: 60
readinessProbe:
httpGet:
path: /rhn/manager/api/api/getVersion
port: 80
scheme: HTTP
periodSeconds: 10
successThreshold: 1
initialDelaySeconds: 120
volumeMounts:
- mountPath: /var/lib/cobbler
name: var-cobbler
- mountPath: /var/lib/rhn/search
name: var-search
- mountPath: /var/lib/salt
name: var-salt
- mountPath: /var/cache
name: var-cache
- mountPath: /var/spacewalk
name: var-spacewalk
- mountPath: /var/log
name: var-log
- mountPath: /srv/salt
name: srv-salt
- mountPath: /srv/www/
name: srv-www
- mountPath: /srv/tftpboot
name: srv-tftpboot
- mountPath: /srv/formula_metadata
name: srv-formulametadata
- mountPath: /srv/pillar
name: srv-pillar
- mountPath: /srv/susemanager
name: srv-susemanager
- mountPath: /srv/spacewalk
name: srv-spacewalk
- mountPath: /etc/pki/trust/anchors/
name: ca-certs
- mountPath: /run/salt/master
name: run-salt-master
- mountPath: /etc/apache2
name: etc-apache2
- mountPath: /etc/systemd/system/multi-user.target.wants
name: etc-systemd-multi
- mountPath: /etc/systemd/system/sockets.target.wants
name: etc-systemd-sockets
- mountPath: /etc/salt
name: etc-salt
- mountPath: /etc/tomcat
name: etc-tomcat
- mountPath: /etc/cobbler
name: etc-cobbler
- mountPath: /etc/sysconfig
name: etc-sysconfig
- mountPath: /etc/postfix
name: etc-postfix
- mountPath: /etc/sssd
name: etc-sssd
- mountPath: /etc/rhn
name: etc-rhn
- mountPath: /etc/pki/trust/anchors/LOCAL-RHN-ORG-TRUSTED-SSL-CERT
name: ca-cert
readOnly: true
subPath: ca.crt
- mountPath: /usr/share/susemanager/salt/certs/RHN-ORG-TRUSTED-SSL-CERT
name: ca-cert
readOnly: true
subPath: ca.crt
- mountPath: /srv/www/htdocs/pub/RHN-ORG-TRUSTED-SSL-CERT
name: ca-cert
readOnly: true
subPath: ca.crt
- mountPath: /etc/pki/trust/anchors/DB-RHN-ORG-TRUSTED-SSL-CERT
name: db-ca-cert
readOnly: true
subPath: ca.crt
- mountPath: /etc/pki/
name: tls
- mountPath: /run
name: run
- mountPath: /sys/fs/cgroup
name: sys-fs-cgroup
initContainers:
- command:
- sh
- -x
- -c
- "# Fill the empty volumes\nfor vol in /var/lib/cobbler \\\n /var/lib/rhn/search \\\n /var/lib/salt \\\n /var/cache \\\n /var/log \\\n /srv/salt \\\n /srv/www\
\ \\\n /srv/tftpboot \\\n /srv/formula_metadata \\\n /srv/pillar \\\n /srv/susemanager \\\n /srv/spacewalk \\\n /etc/apache2 \\\n /etc/rhn \\\n \
\ /etc/systemd/system/multi-user.target.wants \\\n /etc/systemd/system/sockets.target.wants \\\n /etc/salt \\\n /etc/tomcat \\\n /etc/cobbler \\\n /etc/sysconfig\
\ \\\n /etc/postfix \\\n /etc/sssd\ndo\n chown --reference=$vol /mnt$vol;\n chmod --reference=$vol /mnt$vol;\n if [ -z \"$(ls -A /mnt$vol)\" ]; then\n cp -a $vol/. /mnt$vol;\n\
\ fi\ndone\n"
image: registry.opensuse.org/uyuni/server:latest
imagePullPolicy: IfNotPresent
name: init-volumes
securityContext:
seLinuxOptions:
level: s0
volumeMounts:
- mountPath: /mnt/var/lib/cobbler
name: var-cobbler
- mountPath: /mnt/var/lib/rhn/search
name: var-search
- mountPath: /mnt/var/lib/salt
name: var-salt
- mountPath: /mnt/var/cache
name: var-cache
- mountPath: /mnt/var/spacewalk
name: var-spacewalk
- mountPath: /mnt/var/log
name: var-log
- mountPath: /mnt/srv/salt
name: srv-salt
- mountPath: /mnt/srv/www/
name: srv-www
- mountPath: /mnt/srv/tftpboot
name: srv-tftpboot
- mountPath: /mnt/srv/formula_metadata
name: srv-formulametadata
- mountPath: /mnt/srv/pillar
name: srv-pillar
- mountPath: /mnt/srv/susemanager
name: srv-susemanager
- mountPath: /mnt/srv/spacewalk
name: srv-spacewalk
- mountPath: /mnt/etc/pki/trust/anchors/
name: ca-certs
- mountPath: /mnt/run/salt/master
name: run-salt-master
- mountPath: /mnt/etc/apache2
name: etc-apache2
- mountPath: /mnt/etc/systemd/system/multi-user.target.wants
name: etc-systemd-multi
- mountPath: /mnt/etc/systemd/system/sockets.target.wants
name: etc-systemd-sockets
- mountPath: /mnt/etc/salt
name: etc-salt
- mountPath: /mnt/etc/tomcat
name: etc-tomcat
- mountPath: /mnt/etc/cobbler
name: etc-cobbler
- mountPath: /mnt/etc/sysconfig
name: etc-sysconfig
- mountPath: /mnt/etc/postfix
name: etc-postfix
- mountPath: /mnt/etc/sssd
name: etc-sssd
- mountPath: /mnt/etc/rhn
name: etc-rhn
- command:
- sh
- -c
- "until pg_isready -U $MANAGER_USER -h $MANAGER_DB_HOST -p $MANAGER_DB_PORT -d $MANAGER_DB_NAME; do\n sleep 60\ndone\n\nuntil pg_isready -U $REPORT_DB_USER -h $REPORT_DB_HOST -p $REPORT_DB_PORT\
\ -d $REPORT_DB_NAME; do\n sleep 60\ndone\n"
env:
- name: MANAGER_DB_HOST
valueFrom:
configMapKeyRef:
key: db_host
name: uyuni-config
optional: false
- name: MANAGER_DB_PORT
valueFrom:
configMapKeyRef:
key: db_port
name: uyuni-config
optional: false
- name: MANAGER_DB_NAME
valueFrom:
configMapKeyRef:
key: db_name
name: uyuni-config
optional: false
- name: MANAGER_USER
valueFrom:
secretKeyRef:
key: username
name: db-credentials
optional: false
- name: REPORT_DB_HOST
valueFrom:
configMapKeyRef:
key: reportdb_host
name: uyuni-config
optional: false
- name: REPORT_DB_PORT
valueFrom:
configMapKeyRef:
key: reportdb_port
name: uyuni-config
optional: false
- name: REPORT_DB_NAME
valueFrom:
configMapKeyRef:
key: reportdb_name
name: uyuni-config
optional: false
- name: REPORT_DB_USER
valueFrom:
secretKeyRef:
key: username
name: reportdb-credentials
optional: false
image: registry.opensuse.org/uyuni/server:latest
imagePullPolicy: IfNotPresent
name: db-waiter
volumes:
- name: var-cobbler
persistentVolumeClaim:
claimName: var-cobbler
- name: var-search
persistentVolumeClaim:
claimName: var-search
- name: var-salt
persistentVolumeClaim:
claimName: var-salt
- name: var-cache
persistentVolumeClaim:
claimName: var-cache
- name: var-spacewalk
persistentVolumeClaim:
claimName: var-spacewalk
- name: var-log
persistentVolumeClaim:
claimName: var-log
- name: srv-salt
persistentVolumeClaim:
claimName: srv-salt
- name: srv-www
persistentVolumeClaim:
claimName: srv-www
- name: srv-tftpboot
persistentVolumeClaim:
claimName: srv-tftpboot
- name: srv-formulametadata
persistentVolumeClaim:
claimName: srv-formulametadata
- name: srv-pillar
persistentVolumeClaim:
claimName: srv-pillar
- name: srv-susemanager
persistentVolumeClaim:
claimName: srv-susemanager
- name: srv-spacewalk
persistentVolumeClaim:
claimName: srv-spacewalk
- name: ca-certs
persistentVolumeClaim:
claimName: ca-certs
- name: run-salt-master
persistentVolumeClaim:
claimName: run-salt-master
- name: etc-apache2
persistentVolumeClaim:
claimName: etc-apache2
- name: etc-systemd-multi
persistentVolumeClaim:
claimName: etc-systemd-multi
- name: etc-systemd-sockets
persistentVolumeClaim:
claimName: etc-systemd-sockets
- name: etc-salt
persistentVolumeClaim:
claimName: etc-salt
- name: etc-tomcat
persistentVolumeClaim:
claimName: etc-tomcat
- name: etc-cobbler
persistentVolumeClaim:
claimName: etc-cobbler
- name: etc-sysconfig
persistentVolumeClaim:
claimName: etc-sysconfig
- name: etc-postfix
persistentVolumeClaim:
claimName: etc-postfix
- name: etc-sssd
persistentVolumeClaim:
claimName: etc-sssd
- name: etc-rhn
persistentVolumeClaim:
claimName: etc-rhn
- configMap:
defaultMode: 420
name: uyuni-ca
name: ca-cert
- configMap:
defaultMode: 420
name: db-ca
name: db-ca-cert
- name: tls
secret:
defaultMode: 420
items:
- key: tls.crt
path: tls/certs/spacewalk.crt
- key: tls.key
mode: 256
path: tls/private/spacewalk.key
secretName: uyuni-cert
- emptyDir:
medium: Memory
sizeLimit: 256Mi
name: run
- name: sys-fs-cgroup
emptyDir: null
state: present
# Ingresses
- name: Ingress | uyuni-ingress-ssl
kubernetes.core.k8s:
api_version: networking.k8s.io/v1
kind: Ingress
name: uyuni-ingress-ssl
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: networking.k8s.io/v1
metadata:
creationTimestamp: null
name: uyuni-ingress-ssl
namespace: '{{ uyuni_namespace }}'
annotations:
traefik.ingress.kubernetes.io/router.tls: 'true'
traefik.ingress.kubernetes.io/router.tls.domains.n.main: "{{ uyuni_helm_values['global.fqdn'] }}"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.priority: '100'
traefik.ingress.kubernetes.io/router.middlewares: uyuni-server-uyuni-strip-prefixes@kubernetescrd
labels:
app.kubernetes.io/part-of: uyuni
app.kubernetes.io/component: server
spec:
ingressClassName: traefik
tls:
- hosts:
- "{{ uyuni_helm_values['global.fqdn'] }}"
secretName: uyuni-cert
rules:
- host: "{{ uyuni_helm_values['global.fqdn'] }}"
http:
paths:
- path: /postgresql-exporter
backend:
service:
name: tomcat-internal
port:
number: 9187
pathType: Prefix
- path: /node-exporter
backend:
service:
name: tomcat-internal
port:
number: 9100
pathType: Prefix
- path: /tasko-exporter
backend:
service:
name: taskomatic-internal
port:
number: 9800
pathType: Prefix
- path: /tasko-jmx
backend:
service:
name: taskomatic-internal
port:
number: 5557
pathType: Prefix
- path: /tomcat-jmx
backend:
service:
name: tomcat-internal
port:
number: 5556
pathType: Prefix
state: present
- name: Ingress | uyuni-ingress-ssl-redirect
kubernetes.core.k8s:
api_version: networking.k8s.io/v1
kind: Ingress
name: uyuni-ingress-ssl-redirect
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: networking.k8s.io/v1
metadata:
creationTimestamp: null
name: uyuni-ingress-ssl-redirect
namespace: '{{ uyuni_namespace }}'
annotations:
traefik.ingress.kubernetes.io/router.middlewares: uyuni-server-uyuni-https-redirect@kubernetescrd
traefik.ingress.kubernetes.io/router.entrypoints: web
traefik.ingress.kubernetes.io/router.priority: '1'
labels:
app.kubernetes.io/part-of: uyuni
app.kubernetes.io/component: server
spec:
ingressClassName: traefik
rules:
- host: "{{ uyuni_helm_values['global.fqdn'] }}"
http:
paths:
- backend:
service:
name: web
port:
number: 80
path: /
pathType: Prefix
state: present
- name: Ingress | uyuni-ingress-nossl
kubernetes.core.k8s:
api_version: networking.k8s.io/v1
kind: Ingress
name: uyuni-ingress-nossl
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: networking.k8s.io/v1
metadata:
creationTimestamp: null
name: uyuni-ingress-nossl
namespace: '{{ uyuni_namespace }}'
annotations:
traefik.ingress.kubernetes.io/router.tls: 'false'
traefik.ingress.kubernetes.io/router.entrypoints: web
traefik.ingress.kubernetes.io/router.priority: '100'
traefik.ingress.kubernetes.io/router.middlewares: uyuni-server-uyuni-strip-prefixes@kubernetescrd
labels:
app.kubernetes.io/part-of: uyuni
app.kubernetes.io/component: server
spec:
ingressClassName: traefik
rules:
- host: "{{ uyuni_helm_values['global.fqdn'] }}"
http:
paths:
- backend:
service:
name: web
port:
number: 80
path: /pub
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/kickstart/DownloadFile
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/common/DownloadFile
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/rpc/api
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rpc/api
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/errors
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/ty/TinyUrl
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/websocket
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /rhn/metrics
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /cobbler_api
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /cblr
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /httpboot
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /images
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /cobbler
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /os-images
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /tftp
pathType: Prefix
- backend:
service:
name: web
port:
number: 80
path: /docs
pathType: Prefix
- path: /postgresql-exporter
backend:
service:
name: tomcat-internal
port:
number: 9187
pathType: Prefix
- path: /node-exporter
backend:
service:
name: tomcat-internal
port:
number: 9100
pathType: Prefix
- path: /tasko-exporter
backend:
service:
name: taskomatic-internal
port:
number: 9800
pathType: Prefix
- path: /tasko-jmx
backend:
service:
name: taskomatic-internal
port:
number: 5557
pathType: Prefix
- path: /tomcat-jmx
backend:
service:
name: tomcat-internal
port:
number: 5556
pathType: Prefix
state: present
# Traefik IngressRouteTCP
- name: IngressRouteTCP | reportdb-pgsql-route
kubernetes.core.k8s:
api_version: traefik.io/v1alpha1
kind: IngressRouteTCP
name: reportdb-pgsql-route
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: traefik.io/v1alpha1
metadata:
name: reportdb-pgsql-route
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
annotations:
kubernetes.io/ingress.class: traefik
spec:
entryPoints:
- reportdb-pgsql
routes:
- match: HostSNI(`*`)
services:
- name: reportdb
port: 5432
state: present
- name: IngressRouteTCP | salt-publish-route
kubernetes.core.k8s:
api_version: traefik.io/v1alpha1
kind: IngressRouteTCP
name: salt-publish-route
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: traefik.io/v1alpha1
metadata:
name: salt-publish-route
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
annotations:
kubernetes.io/ingress.class: traefik
spec:
entryPoints:
- salt-publish
routes:
- match: HostSNI(`*`)
services:
- name: salt
port: 4505
state: present
- name: IngressRouteTCP | salt-request-route
kubernetes.core.k8s:
api_version: traefik.io/v1alpha1
kind: IngressRouteTCP
name: salt-request-route
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: traefik.io/v1alpha1
metadata:
name: salt-request-route
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
annotations:
kubernetes.io/ingress.class: traefik
spec:
entryPoints:
- salt-request
routes:
- match: HostSNI(`*`)
services:
- name: salt
port: 4506
state: present
# Traefik Middleware
- name: Middleware | uyuni-https-redirect
kubernetes.core.k8s:
api_version: traefik.io/v1alpha1
kind: Middleware
name: uyuni-https-redirect
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: traefik.io/v1alpha1
metadata:
name: uyuni-https-redirect
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
redirectScheme:
scheme: https
permanent: true
state: present
- name: Middleware | uyuni-strip-prefixes
kubernetes.core.k8s:
api_version: traefik.io/v1alpha1
kind: Middleware
name: uyuni-strip-prefixes
namespace: "{{ uyuni_namespace }}"
kubeconfig: "{{ uyuni_kubeconfig }}"
definition:
apiVersion: traefik.io/v1alpha1
metadata:
name: uyuni-strip-prefixes
namespace: '{{ uyuni_namespace }}'
labels:
app.kubernetes.io/part-of: uyuni
spec:
stripPrefix:
prefixes:
- /postgresql-exporter
- /node-exporter
- /tasko-exporter
- /tasko-jmx
- /tomcat-jmx
- /saline
state: present