Kubernetes

Squash has native support for Kubernetes (k8s). Currently this option is only available through the Squash YAML file.

In order to get started you need to add the deployment_type: kubernetes field in the Squash YAML file, for all applications that are Kubernetes based. Then use our Kubernetes specific YAML file fields to customize your applications to fit your needs.

Below you will find some sample Squash YAML files illustrating some common use cases:

Example 1: Kubernetes image

For this example we are showing how to define Kubernetes images in a deployment.

deployments:
  MyAppName:
    kubernetes_build_image: nginx
    deployment_type: kubernetes
    use_kubernetes_registry: true

Example 2: Multiple apps and Helm charts

Here we are defining multiple apps based on helm charts from a single Squash YAML file.

deployments:
  odoo:
    kubernetes_helm_chart: stable/odoo
    kubernetes_helm_parameters: odooPwd=pwd,psql.pslqPwd=secret
    deployment_type: kubernetes
    kubernetes_service: odoo
  drupal:
    kubernetes_helm_chart: stable/drupal
    deployment_type: kubernetes
    kubernetes_service: drupal
  apache:
    kubernetes_helm_chart: bitnami/apache
    deployment_type: kubernetes
    kubernetes_service: apache
    kubernetes_helm_repository: bitnami https://charts.io/xyz

Example 3: Manifest and port forwarding

Here we are using a multi config scenario with  manifests and port forwarding.

deployments:
  multiconfigApp:
    kubernetes_manifest: pod.yml, pod2.yml
    deployment_type: kubernetes
    kubernetes_default_image: rss-site
    kubernetes_port_mapping: redmine:3000
    subdomain_port_mapping: redmine:3000

Example 4: Multiple helm charts and subdomain port mapping

For this example we are defining multiple helm charts for the same application and associating specific container ports with a Squash subdomain.

deployments:
  MyApp:
    kubernetes_helm_chart: 
      - stable/drupal
      - bitnami/apache
      - kiwigrid/graphite
    deployment_type: kubernetes
    kubernetes_service: drupal
    kubernetes_default_pod: drupal
    kubernetes_helm_repository: 
      - bitnami https://charts.bitnami.com/bitnami
      - kiwigrid https://kiwigrid.github.io
    kubernetes_port_mapping:
      - svc/apache:3000:80
      - svc/graphite:8080
    subdomain_port_mapping: 
      - apache:3000
      - graphite:8080

Example 5: Using a private registry

Here we are using a private registry to build the k8s cluster. You can also use Squash Environment Variables to keep the REGISTRY_PASSWORD secured.

deployments:
  MyApp:
    kubernetes_helm_chart: stable/drupal
    deployment_type: kubernetes
    kubernetes_service: odoo
    docker_registry:
      server: example.io
      username: myapp_user
      password: $REGISTRY_PASSWORD

Example 6: Using the "install" field for greater control

The install field gives you greater flexibility during the setup of your Kubernetes cluster, allowing you to take full control of the startup order and packages to install. Example Squash YAML file:

deployments:
  MyApp:
    install:
      - kubectl label namespace default istio-injection=enabled
      - kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
      - kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
      - export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
      - export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
      - export SECURE_INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}')
      - export GATEWAY_URL=$INGRESS_HOST:$INGRESS_PORT
      - kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
      - kubectl create ns foo
      - kubectl apply -f <(istioctl kube-inject -f samples/httpbin/httpbin.yaml) -n foo
      - kubectl apply -f <(istioctl kube-inject -f samples/sleep/sleep.yaml) -n foo

For more information please check our Kubernetes specific YAML file fields.