Skip to content

Instantly share code, notes, and snippets.

@hamidrhashmi
Last active May 25, 2025 21:09
Show Gist options
  • Save hamidrhashmi/f436461f3037a340fb4db02668c9a128 to your computer and use it in GitHub Desktop.
Save hamidrhashmi/f436461f3037a340fb4db02668c9a128 to your computer and use it in GitHub Desktop.
How to deploy kamailio in kubernetes cluster ?

Pre-Requisite

  1. MySQL Server is already deployed.
kubectl get pods -n kamailio

OUTPUT

NAME                     READY   STATUS    RESTARTS   AGE
mysql-5448dbc87f-5gm97   1/1     Running   0          9m2s
  1. Docker Image for kamailio already pushed to Docker hun

Create Namespace

vim kamailio-namespace.yaml

copy and paste the following content in the file

# kamailio-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: kamailio

Create Configmap

vim kamailio-configmap.yaml

copy and paste the following content in the file

# kamailio-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: kamailio-config
  namespace: kamailio
data:
  kamailio.cfg: |
    # Your Kamailio configuration file content here
    # Make sure to configure MySQL connection to point to the service:
    #  mysql://kamailio:[email protected]:3306/kamailio

Create Deployment

vim kamailio-deployment.yaml

copy and paste the following content in the file

# kamailio-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: kamailio
  namespace: kamailio
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kamailio
  template:
    metadata:
      labels:
        app: kamailio
    spec:
      containers:
      - name: kamailio
        #image: kamailio/kamailio-ci:latest
        image: hrhashmi/kamailio-for-kube:0.0.5
        ports:
        - containerPort: 5060
          name: sip-udp
          protocol: UDP
        - containerPort: 5060
          name: sip-tcp
          protocol: TCP
        - containerPort: 5061
          name: sip-tls
          protocol: TCP
        #env:
        #- name: DB_URL
        #  value: "mysql://root:[email protected]:3306/kamailio"
        #volumeMounts:
        #- name: kamailio-config
        #  mountPath: /etc/kamailio
      volumes:
        - name: kamailio-config
          configMap:
            name: kamailio-config

create service

vim kamailio-service.yaml

copy and paste the following content in the file

apiVersion: v1
kind: Service
metadata:
  name: kamailio
  namespace: kamailio
spec:
  type: NodePort
  selector:
    app: kamailio
  ports:
    - name: sip-udp
      port: 5060
      protocol: UDP
      targetPort: 5060
      nodePort: 30506
    - name: sip-tcp
      port: 5060
      protocol: TCP
      targetPort: 5060
      nodePort: 30506
    - name: sip-tls
      port: 5061
      protocol: TCP
      targetPort: 5061
      nodePort: 30501

create pod

kubectl apply -f kamailio-namespace.yaml -f kamailio-configmap.yaml -f kamailio-deployment.yaml -f kamailio-service.yaml

confirm pod inistalization

kubectl get pods -n kamailio -o wide

OUTPUT

kamailio-84d7f54568-62j82   1/1     Running   0          2m40s   172.16.32.65   nodekube1   <none>           <none>
mysql-5448dbc87f-5gm97      1/1     Running   0          24m     172.16.35.65   nodekube2   <none>           <none>

Confirm if kamailio server can ping mysql server

kubectl -n kamailio exec -it <kamailio_pod_name> -- ping mysql.kamailio.svc.cluster.local

create database

kubectl -n kamailio exec -it <kamailio_pod_name> -- /bin/bash
# Eidt kamctlrc file
kamdbctl create
exit
###

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment