{ "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "labels": { "app": "asterisk" }, "name": "asterisk", "namespace": "telephony" }, "spec": { "progressDeadlineSeconds": 600, "replicas": 1, "revisionHistoryLimit": 10, "selector": { "matchLabels": { "app": "asterisk" } }, "strategy": { "type": "Recreate" }, "template": { "metadata": { "annotations": { "kubectl.kubernetes.io/restartedAt": "2026-06-16T13:09:51-05:00" }, "labels": { "app": "asterisk" } }, "spec": { "containers": [ { "image": "localhost/andrius/asterisk:latest", "imagePullPolicy": "Never", "livenessProbe": { "failureThreshold": 3, "initialDelaySeconds": 15, "periodSeconds": 10, "successThreshold": 1, "tcpSocket": { "port": 8088 }, "timeoutSeconds": 1 }, "name": "asterisk", "ports": [ { "containerPort": 5060, "name": "sip-udp", "protocol": "UDP" }, { "containerPort": 5060, "name": "sip-tcp", "protocol": "TCP" }, { "containerPort": 8088, "name": "ari", "protocol": "TCP" } ], "readinessProbe": { "failureThreshold": 3, "httpGet": { "httpHeaders": [ { "name": "Authorization", "value": "Basic Zmxvd2VyY29yZTpibHVlamF5LWFzdGVyaXNrLWFyaQ==" } ], "path": "/ari/asterisk/info", "port": 8088, "scheme": "HTTP" }, "initialDelaySeconds": 10, "periodSeconds": 5, "successThreshold": 1, "timeoutSeconds": 1 }, "resources": { "limits": { "cpu": "1", "memory": "512Mi" }, "requests": { "cpu": "100m", "memory": "128Mi" } }, "terminationMessagePath": "/dev/termination-log", "terminationMessagePolicy": "File", "volumeMounts": [ { "mountPath": "/etc/asterisk/modules.conf", "name": "config-modules", "subPath": "modules.conf" }, { "mountPath": "/etc/asterisk/http.conf", "name": "config-http", "subPath": "http.conf" }, { "mountPath": "/etc/asterisk/ari.conf", "name": "config-ari", "subPath": "ari.conf" }, { "mountPath": "/etc/asterisk/manager.conf", "name": "config-manager", "subPath": "manager.conf" }, { "mountPath": "/etc/asterisk/pjsip.conf", "name": "config-pjsip", "subPath": "pjsip.conf" }, { "mountPath": "/etc/asterisk/extensions.conf", "name": "config-extensions", "subPath": "extensions.conf" }, { "mountPath": "/etc/asterisk/rtp.conf", "name": "config-rtp", "subPath": "rtp.conf" }, { "mountPath": "/var/spool/asterisk", "name": "asterisk-data" }, { "mountPath": "/var/log/asterisk", "name": "asterisk-logs" }, { "mountPath": "/var/lib/asterisk/sounds/en", "name": "sounds" }, { "mountPath": "/var/lib/asterisk/sounds/tts", "name": "shared-tts" } ] } ], "dnsConfig": { "nameservers": [ "10.43.0.10" ], "options": [ { "name": "ndots", "value": "2" } ], "searches": [ "telephony.svc.cluster.local", "svc.cluster.local", "cluster.local" ] }, "dnsPolicy": "None", "hostAliases": [ { "hostnames": [ "downloads.asterisk.org" ], "ip": "165.22.184.19" } ], "initContainers": [ { "command": [ "sh", "-c", "set -eu\nif [ -f /sounds/en/vm-goodbye.ulaw ] || [ -f /sounds/en/vm-goodbye.gsm ]; then\n echo \"Sounds already present \u00e2\u20ac\u201d skipping download.\"\n exit 0\nfi\necho \"Installing curl + tar...\"\napk add --no-cache curl tar gzip >/dev/null\ncd /tmp\necho \"Downloading Asterisk core sounds (en, ulaw) 1.6.1...\"\n# -k: cluster egress goes through a step-ca MITM for outbound TLS\n# that this pod does not trust. The tarball is a public artifact \u00e2\u20ac\u201d\n# integrity is checked downstream by Asterisk at playback time.\ncurl -fksSLO https://downloads.asterisk.org/pub/telephony/sounds/releases/asterisk-core-sounds-en-ulaw-1.6.1.tar.gz\necho \"Extracting to /sounds/en ...\"\nmkdir -p /sounds/en\ntar -xzf asterisk-core-sounds-en-ulaw-1.6.1.tar.gz -C /sounds/en\necho \"Done \u00e2\u20ac\u201d $(ls /sounds/en | wc -l) files installed.\"\n" ], "image": "alpine:3.20", "imagePullPolicy": "IfNotPresent", "name": "install-sounds", "resources": {}, "terminationMessagePath": "/dev/termination-log", "terminationMessagePolicy": "File", "volumeMounts": [ { "mountPath": "/sounds/en", "name": "sounds" } ] } ], "restartPolicy": "Always", "schedulerName": "default-scheduler", "securityContext": { "fsGroup": 0 }, "terminationGracePeriodSeconds": 30, "volumes": [ { "configMap": { "defaultMode": 420, "items": [ { "key": "modules.conf", "path": "modules.conf" } ], "name": "asterisk-config" }, "name": "config-modules" }, { "configMap": { "defaultMode": 420, "items": [ { "key": "http.conf", "path": "http.conf" } ], "name": "asterisk-config" }, "name": "config-http" }, { "configMap": { "defaultMode": 420, "items": [ { "key": "ari.conf", "path": "ari.conf" } ], "name": "asterisk-config" }, "name": "config-ari" }, { "configMap": { "defaultMode": 420, "items": [ { "key": "manager.conf", "path": "manager.conf" } ], "name": "asterisk-config" }, "name": "config-manager" }, { "configMap": { "defaultMode": 420, "items": [ { "key": "pjsip.conf", "path": "pjsip.conf" } ], "name": "asterisk-config" }, "name": "config-pjsip" }, { "configMap": { "defaultMode": 420, "items": [ { "key": "extensions.conf", "path": "extensions.conf" } ], "name": "asterisk-config" }, "name": "config-extensions" }, { "configMap": { "defaultMode": 420, "items": [ { "key": "rtp.conf", "path": "rtp.conf" } ], "name": "asterisk-config" }, "name": "config-rtp" }, { "name": "asterisk-data", "persistentVolumeClaim": { "claimName": "asterisk-data" } }, { "emptyDir": {}, "name": "asterisk-logs" }, { "emptyDir": {}, "name": "sounds" }, { "hostPath": { "path": "/tmp/tts-audio", "type": "DirectoryOrCreate" }, "name": "shared-tts" }, { "hostPath": { "path": "/tmp/tts-audio", "type": "DirectoryOrCreate" }, "name": "tts-shared" } ] } } } }