apiVersion: apps/v1 kind: StatefulSet metadata: name: {{ .Release.Name }}-server-sfs labels: app: {{ .Release.Name }} spec: replicas: 1 selector: matchLabels: app: {{ .Release.Name }}-server-sfs template: metadata: name: {{ .Release.Name }}-server-sfs labels: app: {{ .Release.Name }}-server-sfs spec: automountServiceAccountToken: false containers: - name: {{ .Release.Name }}-ts-server-container image: "teamspeaksystems/teamspeak6-server:{{ .Chart.AppVersion }}" imagePullPolicy: IfNotPresent ports: - name: voice-port containerPort: 30987 protocol: UDP - name: file-transfer containerPort: 30033 protocol: TCP - name: web-query containerPort: 10080 protocol: TCP env: - name: TSSERVER_LICENSE_ACCEPTED value: "accept" - name: TSSERVER_DEFAULT_PORT value: "30987" # The voice service is UDP and cannot be probed; probe the TCP # file-transfer port instead. livenessProbe: tcpSocket: port: file-transfer periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 readinessProbe: tcpSocket: port: file-transfer periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 # The startup probe gates liveness/readiness. Startup budget = 5s * 30 = 150s. startupProbe: tcpSocket: port: file-transfer periodSeconds: 5 timeoutSeconds: 5 failureThreshold: 30 resources: requests: cpu: "0.2" memory: "100Mi" ephemeral-storage: "100Mi" limits: cpu: "0.5" memory: "200Mi" ephemeral-storage: "200Mi" volumeMounts: - name: "teamspeak-volume" mountPath: /var/tsserver/ restartPolicy: Always securityContext: fsGroup: 9987 volumes: - name: "teamspeak-volume" persistentVolumeClaim: claimName: {{ .Release.Name }}-teamspeak-volume-claim serviceName: {{ .Release.Name }}-service