Version:

v0.10.0

Documentation

Using kubectl


Kubectl and Helm

Kubectl and helm are the two primary ways DevOps users will interact/administer the Astronomer Platform.

Setup

Both these tools are needed to deploy Astronomer onto a Kubernetes cluster. We also recommend using kubectx to simplify commands (the rest of this guide will use kubectx).

Base Namespace and Release

The initial helm install command to deploy Astronomer requires a [namespace] to deploy the base platform pods into.

helm install -f config.yaml . datarouter

This deploys a randomly named release of our helm charts into the datarouter namespace.

All pods can be listed in the namespace with kubectl.

root@orbiter: datarouter
Context "gke_astronomer-dev-190903_us-east4-a_astronomer-dev-lybjumoigv" modified.
Active namespace is "datarouter".

root@orbiter: kubectl get pods
NAME                                                   READY   STATUS    RESTARTS   AGE
cautious-seal-postgresql-0                             1/1     Running   0          2d
singed-chimp-alertmanager-0                            1/1     Running   0          1h
singed-chimp-cli-install-9f97f8b-m6l7t                 1/1     Running   0          1h
singed-chimp-commander-68b95959c5-xb9ht                1/1     Running   0          1h
singed-chimp-elasticsearch-client-84d85f87fb-lmbsf     1/1     Running   0          1h
singed-chimp-elasticsearch-client-84d85f87fb-wjpwc     1/1     Running   0          1h
singed-chimp-elasticsearch-data-0                      1/1     Running   0          1h
singed-chimp-elasticsearch-data-1                      1/1     Running   0          1h
singed-chimp-elasticsearch-exporter-5fc97b847f-52qsq   1/1     Running   0          1h
singed-chimp-elasticsearch-master-0                    1/1     Running   0          1h
singed-chimp-elasticsearch-master-1                    1/1     Running   0          1h
singed-chimp-elasticsearch-master-2                    1/1     Running   0          1h
singed-chimp-elasticsearch-nginx-9c4bc78-f5zzz         1/1     Running   0          1h
singed-chimp-fluentd-ztb6k                             1/1     Running   0          1h
singed-chimp-grafana-6df6859854-btdc6                  1/1     Running   0          1h
singed-chimp-houston-86556ffd74-dkbr8                  1/1     Running   0          1h
singed-chimp-kibana-5ccc7b98d4-gk7vb                   1/1     Running   0          1h
singed-chimp-kube-state-78bd89bf47-m7nrm               1/1     Running   0          1h
singed-chimp-kubed-5699fc79b4-9dz28                    1/1     Running   0          1h
singed-chimp-nginx-5cbdf7967f-2q4dr                    1/1     Running   0          1h
singed-chimp-nginx-default-backend-55788c586-2s9nl     1/1     Running   0          1h
singed-chimp-orbit-748dfd5748-77v66                    1/1     Running   0          1h
singed-chimp-prisma-6ddf8f6784-lfnfr                   1/1     Running   0          1h
singed-chimp-prometheus-0                              1/1     Running   0          1h
singed-chimp-registry-0                                1/1     Running   0          1h

Run helm ls to list all releases:

root@orbiter: helm ls
NAME                             	REVISION	UPDATED                 	STATUS  	CHART                   	NAMESPACE                             
cautious-seal                    	1       	Mon May  6 14:37:34 2019	DEPLOYED	postgresql-0.18.1       	datarouter                            
singed-chimp                     	3       	Thu May  9 12:08:36 2019	DEPLOYED	astronomer-0.8.2        	datarouter                         

There is a release for Astronomer (single-chimp) and postgres (cautious-seal) in the datarouter namespace.

Deploying New Airflow Instances

If you navigate to the Astronomer UI and create a new Airflow deployment, it will create a new helm release in a new namespace.

root@orbiter helm ls
NAME                             	REVISION	UPDATED                 	STATUS  	CHART                   	NAMESPACE
accurate-bolide-9914             	2       	Thu May  9 12:06:06 2019	DEPLOYED	airflow-0.8.2           	datarouter-accurate-bolide-9914                              
cautious-seal                    	1       	Mon May  6 14:37:34 2019	DEPLOYED	postgresql-0.18.1       	datarouter                            
singed-chimp                     	3       	Thu May  9 12:08:36 2019	DEPLOYED	astronomer-0.8.2        	datarouter                         

The accurate-bolide-9914 helm release now lives in the a namespace generated by Astronomer named $basenamespace-release_name (datarouter-accurate-bolide-9914) and lives on the URL $release-name-airflow-BASEDOMAIN.

Switching into the datarouter-accurate-bolide-9914 namespace revelas the Airflow pods.

root@orbiter: kubectl get namespaces
NAME                                     STATUS   AGE
datarouter                               Active   2d
datarouter-accurate-bolide-9914          Active   1h
default                                  Active   222d

root@orbiter: kubens datarouter-accurate-bolide-9914
root@orbiter: kubectl get pods

NAME                                                        READY   STATUS    RESTARTS   AGE
accurate-bolide-9914-pgbouncer-57b46d67bb-b4tpw             2/2     Running   0          1h
accurate-bolide-9914-scheduler-7d4f5596b5-r457d             2/2     Running   0          1h
accurate-bolide-9914-statsd-84d76854fb-wz45c                1/1     Running   0          1h
accurate-bolide-9914-webserver-86bcbc48b-5xcwr              1/1     Running   0          1h
accurate-bolide-9914-worker-0                               1/1     Running   0          1m
accurate-bolide-9914-redis-0                                1/1     Running   0          1m
accurate-bolide-9914-flower-84f7d67fbd-q5sd7                1/1     Running   0          1m

Since this deployment is running the Celery executor with 1 worker, there are pods for Redis and Flower.

Managing Pods

Airflow logs can be fetched directly from the underlying pods:

root@orbiter: kubectl logs accurate-bolide-9914-scheduler-7d4f5596b5-r457d

Waiting for host: accurate-bolide-9914-pgbouncer 6543
Initializing airflow database...
[2019-05-09 17:53:22,865] {settings.py:182} INFO - settings.configure_orm(): Using pool settings. pool_size=5, pool_recycle=1800, pid=18
[2019-05-09 17:53:24,345] {__init__.py:51} INFO - Using executor KubernetesExecutor
DB: postgresql://accurate_bolide_9914_airflow:***@accurate-bolide-9914-pgbouncer:6543/accurate-bolide-9914-metadata
[2019-05-09 17:53:24,969] {db.py:350} INFO - Creating tables
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
Done.
[2019-05-09 17:53:28,159] {settings.py:182} INFO - settings.configure_orm(): Using pool settings. pool_size=5, pool_recycle=1800, pid=8
[2019-05-09 17:53:29,663] {__init__.py:51} INFO - Using executor KubernetesExecutor
  ____________       _____________
 ____    |__( )_________  __/__  /________      __
____  /| |_  /__  ___/_  /_ __  /_  __ \_ | /| / /
___  ___ |  / _  /   _  __/ _  / / /_/ /_ |/ |/ /
 _/_/  |_/_/  /_/    /_/    /_/  \____/____/|__/
[2019-05-09 17:53:30,338] {jobs.py:1500} INFO - Starting the scheduler
[2019-05-09 17:53:30,339] {jobs.py:1508} INFO - Running execute loop for -1 seconds
[2019-05-09 17:53:30,340] {jobs.py:1509} INFO - Processing each file at most -1 times
[2019-05-09 17:53:30,340] {jobs.py:1512} INFO - Searching for files in /usr/local/airflow/dags
[2019-05-09 17:53:30,341] {jobs.py:1514} INFO - There are 2 files in /usr/local/airflow/dags
[2019-05-09 17:53:30,343] {kubernetes_executor.py:691} INFO - Start Kubernetes executor

A full description of a pods status, resource request, and other data can be found with the [[object Object]] command

root@orbiter: kubectl describe po/accurate-bolide-9914-scheduler-7d4f5596b5-g72pg
Name:               accurate-bolide-9914-scheduler-7d4f5596b5-g72pg
Namespace:          datarouter-accurate-bolide-9914
Priority:           0
PriorityClassName:  <none>
Node:               gke-astronomer-dev-l-astronomer-dev-n-1c6fc689-s8pg/10.150.0.77
Start Time:         Thu, 09 May 2019 13:53:20 -0400
Labels:             component=scheduler
                    platform=singed-chimp
                    pod-template-hash=3809115261
                    release=accurate-bolide-9914
                    tier=airflow
                    workspace=cjvgu6b2d00110b785tfxyqp0

Pods can also be deleted as a way to restart any Airflow component.

root@orbiter: kubectl delete po/accurate-bolide-9914-scheduler-7d4f5596b5-r457d

This will delete that copy of the pod and spin up a new one. All pods in an Airflow deployment are meant to be stateless, so deleting one and letting it recreate should not cause any

Other Resources

For additional kubectl commands, check out this Kubernetes Cheat Sheet.