Skip to content

Sidler1/ts6-server-chart

Repository files navigation

TeamSpeak 6 Server Helm Chart

Version License Artifact Hub

A Kubernetes Helm chart for deploying TeamSpeak 6 Server with optional MariaDB persistence, ingress support, autoscaling, and network policies.

Introduction

This Helm chart deploys a stateful TeamSpeak 6 Server instance on Kubernetes. It includes:

  • StatefulSet for reliable pod management and persistent storage.
  • Service exposing voice (UDP), file transfer (TCP), and query (TCP) ports.
  • ConfigMap/Secret for server configuration (tsserver.yaml).
  • Optional MariaDB StatefulSet for external database (SQLite by default).
  • Ingress for secure query access (HTTP/TCP passthrough).
  • NetworkPolicy for traffic control.
  • Init Container for setup (directory creation, config copy).
  • NOTES.txt with post-install instructions.

Designed for production-like setups, with configurable persistence via PVC.

Features

  • Persistent Storage: Mounts /var/tsserver for database, logs, and config.
  • Database Options: SQLite (default) or MariaDB (optional).
  • Security: Runs as non-root (UID 1000), fsGroup for volume ownership, secrets for credentials.
  • Observability: Configurable resources, probes, and logs.
  • Customization: Full tsserver.yaml templating via helpers.
  • Helm Best Practices: Labels, selectors, hooks for tests.

Prerequisites

  • Kubernetes 1.21+ cluster.
  • Helm 3.8+.
  • Persistent Volume support (e.g., local, NFS, or cloud storage like EBS/GPD).
  • Ingress controller (e.g., nginx) for ingress-enabled deployments.
  • NetworkPolicy support if enabling policies.

Installation

Add the repo (if hosted) and install:

# Add repository (replace with actual repo URL if published)
helm repo add sidler1 https://sidler1.github.io/teamspeak-helm-chart
helm repo update

# Install the chart
helm install my-teamspeak . -n teamspeak --create-namespace -f values.yaml

# Or with custom values
helm install my-teamspeak . -n teamspeak --create-namespace --set mariadb.enabled=true,mariadb.auth.rootPassword=securepass

Verify deployment:

kubectl get sts -n teamspeak
kubectl get svc -n teamspeak
kubectl get pvc -n teamspeak  # If persistence enabled

Post-install notes will display automatically (or view with helm get notes my-teamspeak -n teamspeak).

Configuration

Key values in values.yaml:

Parameter Description Default
replicaCount Number of replicas 1
image.repository TeamSpeak image repo teamspeaksystems/teamspeak6-server
image.tag Image tag (falls back to appVersion) ""
service.type Service type (ClusterIP/NodePort/LoadBalancer) LoadBalancer
voice.port Voice UDP port 9987
filetransfer.port File transfer TCP port 30033
webquery.port Query HTTP port 10080
persistence.enabled Enable PVC for data true
persistence.size PVC size 8Gi
mariadb.enabled Enable MariaDB backend false
mariadb.auth.database MariaDB DB name teamspeak
mariadb.auth.username MariaDB user ts
mariadb.auth.password MariaDB password (set securely!) tspass
autoscaling.enabled Enable HPA false
networkPolicy.enabled Enable NetworkPolicies false
ingress.enabled Enable Ingress for query false
licenseAccepted Accept EULA in config true
customer Custom label "sidler1"

For full config, see values.yaml.

Override via --set or custom YAML:

# Custom values example
mariadb:
  enabled: true
  auth:
    rootPassword: "supersecret"
    password: "supersecret"
persistence:
  size: 10Gi

Upgrade:

helm upgrade my-teamspeak . -n teamspeak -f custom-values.yaml

Usage

Accessing the Server

  • Voice Connection: Use TeamSpeak 6 client to connect to the service IP:9987 (UDP).
  • Query/Admin: Telnet to service IP:10080 (telnet <IP> 10080, then login serveradmin <pass>).
  • Port Forward for Testing:
    kubectl port-forward svc/my-teamspeak 9987:9987/udp -n teamspeak
    # Connect to localhost:9987
  • Logs: kubectl logs sts/my-teamspeak -n teamspeak -f

Database

  • SQLite: File-based at /var/tsserver/sql/teamspeak.
  • MariaDB: Separate StatefulSet; connect via mariadb -h my-teamspeak-mariadb -u ts -p.

Uninstall

helm uninstall my-teamspeak -n teamspeak
kubectl delete namespace teamspeak  # If created via chart

Warning: This deletes PVCs and data unless --keep-history is used.

Contributing

  1. Fork the repo.
  2. Create a feature branch (git checkout -b feature/AmazingFeature).
  3. Commit changes (git commit -m 'Add some AmazingFeature').
  4. Push (git push origin feature/AmazingFeature).
  5. Open a Pull Request.

Lint and test:

helm lint .
helm template . --debug

License

Apache 2.0 - see LICENSE.

Credits

  • Based on TeamSpeak 6 Server docs.
  • Helm chart structure inspired by Bitnami patterns (customized, no dependencies).

For issues or support: @Sidler12 on X or Mail.

About

Just a small TS6 Server Helm Chart.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages