How to Choose Which Calendars to Sync in Google Calendar

Tyler Tyler (282)
Total time: 3 minutes 
Updated: July 22nd, 2020

I’m the kind of person who uses both Google and Apple products. All of my calendar data is saved to a few different Google calendars, but I generally use Apple’s Calendar on my Mac and iPhone. Syncing is fairly simple, but it took my quite some time to figure out how to select which calendars to sync. What I mean by that is each Google Calendar has multiple sub-calendars that seem to get included in the sync process even when they are deselected from the Google Calendar interface. This resulted in duplicate calendar events like Birthdays and Holidays. Fortunately, I found a solution hidden deep in the Google Calendar docs.

Posted in these interests:

google
PRIMARY
10 guides
apple
51 guides
We’re hiring!
Are you a passionate writer or editor? We want to hear from you!

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

How to Choose Which Calendars to Sync in Google Calendar

Tyler Tyler (282)
Total time: 3 minutes 
Updated: July 22nd, 2020

I’m the kind of person who uses both Google and Apple products. All of my calendar data is saved to a few different Google calendars, but I generally use Apple’s Calendar on my Mac and iPhone. Syncing is fairly simple, but it took my quite some time to figure out how to select which calendars to sync. What I mean by that is each Google Calendar has multiple sub-calendars that seem to get included in the sync process even when they are deselected from the Google Calendar interface. This resulted in duplicate calendar events like Birthdays and Holidays. Fortunately, I found a solution hidden deep in the Google Calendar docs.

Posted in these interests:

google
PRIMARY
10 guides
apple
51 guides
We’re hiring!
Are you a passionate writer or editor? We want to hear from you!

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

How to Choose Which Calendars to Sync in Google Calendar

Tyler Tyler (285)
Total time: 3 minutes 
Updated: July 22nd, 2020

I’m the kind of person who uses both Google and Apple products. All of my calendar data is saved to a few different Google calendars, but I generally use Apple’s Calendar on my Mac and iPhone. Syncing is fairly simple, but it took my quite some time to figure out how to select which calendars to sync. What I mean by that is each Google Calendar has multiple sub-calendars that seem to get included in the sync process even when they are deselected from the Google Calendar interface. This resulted in duplicate calendar events like Birthdays and Holidays. Fortunately, I found a solution hidden deep in the Google Calendar docs.

Posted in these interests:

google
PRIMARY
11 guides
apple
51 guides
We’re hiring!
Are you a passionate writer? We want to hear from you!

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

How to install Apache Superset on a GKE Kubernetes Cluster

Install Apache Superset in a Kubernetes clusterInstall Apache Superset in a Kubernetes cluster
Obviously we’d call this “Supernetes”
Tyler Tyler (285)
Total time: 15 minutes 
Updated: July 22nd, 2020

In this guide, I’m going to show you how to install Apache Superset in your Kubernetes cluster (on GKE). I’m using Cloud SQL (Postgres) for the database backend, Memorystore (redis), and BigQuery as the data source. However, even if you’re using some different components this guide should still provide enough guidance to get you started with Superset on Kubernetes.

There’s a Github repository that accompanies this guide. If you’re already a Kubernetes master, you can probably just head over to the repository and get the configs. But the purpose of this guide is to provide instructions as well as an explanation of the configs.

With that said, if you’re ready to install Superset on your Kubernetes cluster, I recommend reading through this guide before taking action. Then, clone the Github repo and start working through the instructions when you’re ready.

What is Superset?

Superset is an open-source business intelligence tool. In short, it’s a web application that lets you connect to various data sources to query and visualize data.

What is GKE?

GKE stands for Google Kubernetes Engine. It is Google Cloud Platform’s (GCP) hosted Kubernetes service.

Posted in these interests:

kubernetes
PRIMARY
7 guides

I’m going to start by mentioning Helm because it’s the simplest option, and if you’re happy to use Helm and this chart works for you, then you should use it!

Install helm

Head here to learn how to install helm. Once installed, you need to initialize helm in your cluster.

helm init

Install superset using helm

Head here for details on the superset helm chart. I’ll provide an example of the basic installation, but there are many more configuration options to set if desired.

helm install stable/superset

Hopefully this works swimmingly for you. However, I’ve found that this chart is not quite what I need. Because of the way the Google Cloud SDK authenticates, I need to mount my service account key file secret as a volume on the Superset pod, and it didn’t seem clear how to accomplish this. I’m also slightly biased against using helm, so I didn’t keep digging.

With that said, the remainder of this guide will show you how to install superset manually — that is, by building the configs by hand.

Before we begin, I want to discuss the setup. Configuring each of these tools is outside the scope of this guide, but I will explain each component and provide some useful tips.

Cloud SQL

I’m using a Cloud SQL Postgres instance. Setting this up is pretty simple, but make sure you enable Private IP on your instance.

Whether you’re using Cloud SQL or something else, you’ll need to create a superset database, and a user with all privileges granted to this database.

Memorystore

Configuring a Memorystore redis instance on GCP is pretty easy. You can also run a redis deployment in your GKE cluster with very little work. Either solution is fine.

GKE Cluster

We’re going to use a Kubernetes cluster running on GKE. This process is a little more involved, and again, I’m not going to go into detail here.

I will say that you need make sure your cluster is a VPC Native cluster so your cluster can connect to your DB using the private IP.

Local environment

You need to install the Google Cloud SDK on your local computer if you haven’t already. Then authenticate with your GKE cluster:

gcloud container clusters get-credentials  --zone  --project 

The following is our superset config. In short, it configures our database backend connection, redis connection, and celery.

If you’re using Cloud SQL (Postgres), like we configured previously, then you should need to modify this file at all. If you’re using another database backend, you’ll have to modify the config to build the correct sql alchemy database URI.

import os def get_env_variable(var_name, default=None): """Get the environment variable or raise exception. Args: var_name (str): the name of the environment variable to look up default (str): the default value if no env is found """ try: return os.environ[var_name] except KeyError: if default is not None: return default raise RuntimeError( 'The environment variable {} was missing, abort...' .format(var_name) ) def get_secret(secret_name, default=None): """Get secrets mounted by kubernetes. Args: secret_name (str): the name of the secret, corresponds to the filename default (str): the default value if no secret is found """ secret = None try: with open('/secrets/{0}'.format(secret_name), 'r') as secret_file: secret = secret_file.read().strip() except (IOError, FileNotFoundError): pass if secret is None: if default is None: raise RuntimeError( 'Missing a required secret: {0}.'.format(secret_name) ) secret = default return secret # Postgres POSTGRES_USER = get_secret('database/username') POSTGRES_PASSWORD = get_secret('database/password') POSTGRES_HOST = get_env_variable('DB_HOST') POSTGRES_PORT = get_env_variable('DB_PORT', 5432) POSTGRES_DB = get_env_variable('DB_NAME') SQLALCHEMY_DATABASE_URI = 'postgresql://{0}:{1}@{2}:{3}/{4}'.format( POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, ) # Redis REDIS_HOST = get_env_variable('REDIS_HOST') REDIS_PORT = get_env_variable('REDIS_PORT', 6379) # Celery class CeleryConfig: BROKER_URL = 'redis://{0}:{1}/0'.format(REDIS_HOST, REDIS_PORT) CELERY_IMPORTS = ('superset.sql_lab',) CELERY_RESULT_BACKEND = 'redis://{0}:{1}/1'.format(REDIS_HOST, REDIS_PORT) CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} CELERY_TASK_PROTOCOL = 1 CELERY_CONFIG = CeleryConfig 

We’re going to create a configmap named superset-config. This is how we’ll add our superset-config.py file to the superset pods.

I’m going to create the configmap object directly using kubectl.

kubectl create configmap superset-config --from-file superset

You can confirm with:

kubectl get configmap

We’ll need to add our database secrets and our google cloud service account key secret.

If you look in the secrets directory, you’ll see a directory structure like this:

secrets ├── database │ └── password │ └── username └── gcloud └── google-cloud-key.json

We’re going to create two secrets: database and gcloud. You’ll need to edit the files in each of these directories so they include the applicable secrets.

Then create the secrets using kubectl.

kubectl create secret generic database --from-file=secrets/database kubectl create secret generic gcloud --from-file=secrets/gcloud

Note: This directory is here simply to make it easy for you to create the appropriate secrets. You would never check these into any repository.

You can confirm the secrets exist with:

kubectl get secret

Check out the file called superset-deployment.yaml. This deployment defines and manages our superset pod:

apiVersion: apps/v1beta1 kind: Deployment metadata: name: superset-deployment namespace: default spec: selector: matchLabels: app: superset template: metadata: labels: app: superset spec: containers: - env: - name: DB_HOST value: 10.10.10.10 - name: REDIS_HOST value: redis - name: DB_NAME value: superset - name: GOOGLE_APPLICATION_CREDENTIALS value: /secrets/gcloud/google-cloud-key.json - name: PYTHONPATH value: "${PYTHONPATH}:/home/superset/superset/" image: amancevice/superset:latest name: superset ports: - containerPort: 8088 volumeMounts: - mountPath: /secrets/database name: database readOnly: true - mountPath: /secrets/gcloud name: gcloud readOnly: true - mountPath: /home/superset/superset name: superset-config volumes: - name: database secret: secretName: database - name: gcloud secret: secretName: gcloud - name: superset-config configMap: name: superset-config

The only things you’ll need to configure are the DB_HOST and REDIS_HOST environment variables, so update these values with the IP or hostname of your instances.

This service will send incoming traffic on port 8088 to the superset pods.

apiVersion: v1 kind: Service metadata: name: superset labels: app: superset spec: type: NodePort ports: - name: http port: 8088 targetPort: 8088 selector: app: superset

Once you’ve added the configmap and secrets, and you’ve customized any configs as desired, you’re ready to apply the configs.

kubectl apply --recursive -f kubernetes/

It will take a little bit of time for the image to pull and for the containers to start up, but you can check your progress with:

kubectl get pod | grep superset

Now let’s create an admin user.

SUPERSET_POD=$(kubectl get pod | grep superset | awk '{print $1}') kubectl exec -it $SUPERSET_POD -- fabmanager create-admin --app superset

You’ll be given a series of prompts to complete. Make sure to save your password!

Apache Superset login pageApache Superset login page

Since our service isn’t exposed to the world, we’ll need to forward port 8088 to our superset service.

kubectl port-forward service/superset 8088

Now we can open a browser and go to: http://localhost:8088

You should be able to log in to superset using the admin username and password you set previously.

Apache Superset Add DatabaseApache Superset Add Database

Now you’re ready to add a data source. If you’re using BigQuery and you mounted your service account key as I’ve show in this guide, you’re very close.

In Superset, click on Sources > Databases.

Then click the + icon that says Add a new record.

Now fill out the details for your database. The SQLAlchemy URI structure for bigquery is simple:

bigquery:// 

Now you’ll need to configure your tables and start building charts and dashboards. Refer to the Superset docs for this part.

If you’ve gotten to this point, and you’re pretty sure that Superset is going to be a permanent part of your stack, you may want to set up DNS and access this using a nicer hostname and without having to set up port forwarding every time. If there’s enough interest, I can update this guide with instructions!

How to install Apache Superset on a GKE Kubernetes Cluster

Install Apache Superset in a Kubernetes clusterInstall Apache Superset in a Kubernetes cluster
Obviously we’d call this “Supernetes”
Tyler Tyler (285)
Total time: 15 minutes 
Updated: July 22nd, 2020

In this guide, I’m going to show you how to install Apache Superset in your Kubernetes cluster (on GKE). I’m using Cloud SQL (Postgres) for the database backend, Memorystore (redis), and BigQuery as the data source. However, even if you’re using some different components this guide should still provide enough guidance to get you started with Superset on Kubernetes.

There’s a Github repository that accompanies this guide. If you’re already a Kubernetes master, you can probably just head over to the repository and get the configs. But the purpose of this guide is to provide instructions as well as an explanation of the configs.

With that said, if you’re ready to install Superset on your Kubernetes cluster, I recommend reading through this guide before taking action. Then, clone the Github repo and start working through the instructions when you’re ready.

What is Superset?

Superset is an open-source business intelligence tool. In short, it’s a web application that lets you connect to various data sources to query and visualize data.

What is GKE?

GKE stands for Google Kubernetes Engine. It is Google Cloud Platform’s (GCP) hosted Kubernetes service.

Posted in these interests:

kubernetes
PRIMARY
7 guides

I’m going to start by mentioning Helm because it’s the simplest option, and if you’re happy to use Helm and this chart works for you, then you should use it!

Install helm

Head here to learn how to install helm. Once installed, you need to initialize helm in your cluster.

helm init

Install superset using helm

Head here for details on the superset helm chart. I’ll provide an example of the basic installation, but there are many more configuration options to set if desired.

helm install stable/superset

Hopefully this works swimmingly for you. However, I’ve found that this chart is not quite what I need. Because of the way the Google Cloud SDK authenticates, I need to mount my service account key file secret as a volume on the Superset pod, and it didn’t seem clear how to accomplish this. I’m also slightly biased against using helm, so I didn’t keep digging.

With that said, the remainder of this guide will show you how to install superset manually — that is, by building the configs by hand.

Before we begin, I want to discuss the setup. Configuring each of these tools is outside the scope of this guide, but I will explain each component and provide some useful tips.

Cloud SQL

I’m using a Cloud SQL Postgres instance. Setting this up is pretty simple, but make sure you enable Private IP on your instance.

Whether you’re using Cloud SQL or something else, you’ll need to create a superset database, and a user with all privileges granted to this database.

Memorystore

Configuring a Memorystore redis instance on GCP is pretty easy. You can also run a redis deployment in your GKE cluster with very little work. Either solution is fine.

GKE Cluster

We’re going to use a Kubernetes cluster running on GKE. This process is a little more involved, and again, I’m not going to go into detail here.

I will say that you need make sure your cluster is a VPC Native cluster so your cluster can connect to your DB using the private IP.

Local environment

You need to install the Google Cloud SDK on your local computer if you haven’t already. Then authenticate with your GKE cluster:

gcloud container clusters get-credentials  --zone  --project 

The following is our superset config. In short, it configures our database backend connection, redis connection, and celery.

If you’re using Cloud SQL (Postgres), like we configured previously, then you should need to modify this file at all. If you’re using another database backend, you’ll have to modify the config to build the correct sql alchemy database URI.

import os def get_env_variable(var_name, default=None): """Get the environment variable or raise exception. Args: var_name (str): the name of the environment variable to look up default (str): the default value if no env is found """ try: return os.environ[var_name] except KeyError: if default is not None: return default raise RuntimeError( 'The environment variable {} was missing, abort...' .format(var_name) ) def get_secret(secret_name, default=None): """Get secrets mounted by kubernetes. Args: secret_name (str): the name of the secret, corresponds to the filename default (str): the default value if no secret is found """ secret = None try: with open('/secrets/{0}'.format(secret_name), 'r') as secret_file: secret = secret_file.read().strip() except (IOError, FileNotFoundError): pass if secret is None: if default is None: raise RuntimeError( 'Missing a required secret: {0}.'.format(secret_name) ) secret = default return secret # Postgres POSTGRES_USER = get_secret('database/username') POSTGRES_PASSWORD = get_secret('database/password') POSTGRES_HOST = get_env_variable('DB_HOST') POSTGRES_PORT = get_env_variable('DB_PORT', 5432) POSTGRES_DB = get_env_variable('DB_NAME') SQLALCHEMY_DATABASE_URI = 'postgresql://{0}:{1}@{2}:{3}/{4}'.format( POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, ) # Redis REDIS_HOST = get_env_variable('REDIS_HOST') REDIS_PORT = get_env_variable('REDIS_PORT', 6379) # Celery class CeleryConfig: BROKER_URL = 'redis://{0}:{1}/0'.format(REDIS_HOST, REDIS_PORT) CELERY_IMPORTS = ('superset.sql_lab',) CELERY_RESULT_BACKEND = 'redis://{0}:{1}/1'.format(REDIS_HOST, REDIS_PORT) CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} CELERY_TASK_PROTOCOL = 1 CELERY_CONFIG = CeleryConfig 

We’re going to create a configmap named superset-config. This is how we’ll add our superset-config.py file to the superset pods.

I’m going to create the configmap object directly using kubectl.

kubectl create configmap superset-config --from-file superset

You can confirm with:

kubectl get configmap

We’ll need to add our database secrets and our google cloud service account key secret.

If you look in the secrets directory, you’ll see a directory structure like this:

secrets ├── database │ └── password │ └── username └── gcloud └── google-cloud-key.json

We’re going to create two secrets: database and gcloud. You’ll need to edit the files in each of these directories so they include the applicable secrets.

Then create the secrets using kubectl.

kubectl create secret generic database --from-file=secrets/database kubectl create secret generic gcloud --from-file=secrets/gcloud

Note: This directory is here simply to make it easy for you to create the appropriate secrets. You would never check these into any repository.

You can confirm the secrets exist with:

kubectl get secret

Check out the file called superset-deployment.yaml. This deployment defines and manages our superset pod:

apiVersion: apps/v1beta1 kind: Deployment metadata: name: superset-deployment namespace: default spec: selector: matchLabels: app: superset template: metadata: labels: app: superset spec: containers: - env: - name: DB_HOST value: 10.10.10.10 - name: REDIS_HOST value: redis - name: DB_NAME value: superset - name: GOOGLE_APPLICATION_CREDENTIALS value: /secrets/gcloud/google-cloud-key.json - name: PYTHONPATH value: "${PYTHONPATH}:/home/superset/superset/" image: amancevice/superset:latest name: superset ports: - containerPort: 8088 volumeMounts: - mountPath: /secrets/database name: database readOnly: true - mountPath: /secrets/gcloud name: gcloud readOnly: true - mountPath: /home/superset/superset name: superset-config volumes: - name: database secret: secretName: database - name: gcloud secret: secretName: gcloud - name: superset-config configMap: name: superset-config

The only things you’ll need to configure are the DB_HOST and REDIS_HOST environment variables, so update these values with the IP or hostname of your instances.

This service will send incoming traffic on port 8088 to the superset pods.

apiVersion: v1 kind: Service metadata: name: superset labels: app: superset spec: type: NodePort ports: - name: http port: 8088 targetPort: 8088 selector: app: superset

Once you’ve added the configmap and secrets, and you’ve customized any configs as desired, you’re ready to apply the configs.

kubectl apply --recursive -f kubernetes/

It will take a little bit of time for the image to pull and for the containers to start up, but you can check your progress with:

kubectl get pod | grep superset

Now let’s create an admin user.

SUPERSET_POD=$(kubectl get pod | grep superset | awk '{print $1}') kubectl exec -it $SUPERSET_POD -- fabmanager create-admin --app superset

You’ll be given a series of prompts to complete. Make sure to save your password!

Apache Superset login pageApache Superset login page

Since our service isn’t exposed to the world, we’ll need to forward port 8088 to our superset service.

kubectl port-forward service/superset 8088

Now we can open a browser and go to: http://localhost:8088

You should be able to log in to superset using the admin username and password you set previously.

Apache Superset Add DatabaseApache Superset Add Database

Now you’re ready to add a data source. If you’re using BigQuery and you mounted your service account key as I’ve show in this guide, you’re very close.

In Superset, click on Sources > Databases.

Then click the + icon that says Add a new record.

Now fill out the details for your database. The SQLAlchemy URI structure for bigquery is simple:

bigquery:// 

Now you’ll need to configure your tables and start building charts and dashboards. Refer to the Superset docs for this part.

If you’ve gotten to this point, and you’re pretty sure that Superset is going to be a permanent part of your stack, you may want to set up DNS and access this using a nicer hostname and without having to set up port forwarding every time. If there’s enough interest, I can update this guide with instructions!

Steps to install Superset in a Kubernets cluster

How to install Apache Superset on a GKE Kubernetes Cluster

Install Apache Superset in a Kubernetes clusterInstall Apache Superset in a Kubernetes cluster
Obviously we’d call this “Supernetes”
Tyler Tyler (285)
Total time: 15 minutes 
Updated: July 22nd, 2020

In this guide, I’m going to show you how to install Apache Superset in your Kubernetes cluster (on GKE). I’m using Cloud SQL (Postgres) for the database backend, Memorystore (redis), and BigQuery as the data source. However, even if you’re using some different components this guide should still provide enough guidance to get you started with Superset on Kubernetes.

There’s a Github repository that accompanies this guide. If you’re already a Kubernetes master, you can probably just head over to the repository and get the configs. But the purpose of this guide is to provide instructions as well as an explanation of the configs.

With that said, if you’re ready to install Superset on your Kubernetes cluster, I recommend reading through this guide before taking action. Then, clone the Github repo and start working through the instructions when you’re ready.

What is Superset?

Superset is an open-source business intelligence tool. In short, it’s a web application that lets you connect to various data sources to query and visualize data.

What is GKE?

GKE stands for Google Kubernetes Engine. It is Google Cloud Platform’s (GCP) hosted Kubernetes service.

Posted in these interests:

kubernetes
PRIMARY
7 guides

I’m going to start by mentioning Helm because it’s the simplest option, and if you’re happy to use Helm and this chart works for you, then you should use it!

Install helm

Head here to learn how to install helm. Once installed, you need to initialize helm in your cluster.

helm init

Install superset using helm

Head here for details on the superset helm chart. I’ll provide an example of the basic installation, but there are many more configuration options to set if desired.

helm install stable/superset

Hopefully this works swimmingly for you. However, I’ve found that this chart is not quite what I need. Because of the way the Google Cloud SDK authenticates, I need to mount my service account key file secret as a volume on the Superset pod, and it didn’t seem clear how to accomplish this. I’m also slightly biased against using helm, so I didn’t keep digging.

With that said, the remainder of this guide will show you how to install superset manually — that is, by building the configs by hand.

Before we begin, I want to discuss the setup. Configuring each of these tools is outside the scope of this guide, but I will explain each component and provide some useful tips.

Cloud SQL

I’m using a Cloud SQL Postgres instance. Setting this up is pretty simple, but make sure you enable Private IP on your instance.

Whether you’re using Cloud SQL or something else, you’ll need to create a superset database, and a user with all privileges granted to this database.

Memorystore

Configuring a Memorystore redis instance on GCP is pretty easy. You can also run a redis deployment in your GKE cluster with very little work. Either solution is fine.

GKE Cluster

We’re going to use a Kubernetes cluster running on GKE. This process is a little more involved, and again, I’m not going to go into detail here.

I will say that you need make sure your cluster is a VPC Native cluster so your cluster can connect to your DB using the private IP.

Local environment

You need to install the Google Cloud SDK on your local computer if you haven’t already. Then authenticate with your GKE cluster:

gcloud container clusters get-credentials  --zone  --project 

The following is our superset config. In short, it configures our database backend connection, redis connection, and celery.

If you’re using Cloud SQL (Postgres), like we configured previously, then you should need to modify this file at all. If you’re using another database backend, you’ll have to modify the config to build the correct sql alchemy database URI.

import os def get_env_variable(var_name, default=None): """Get the environment variable or raise exception. Args: var_name (str): the name of the environment variable to look up default (str): the default value if no env is found """ try: return os.environ[var_name] except KeyError: if default is not None: return default raise RuntimeError( 'The environment variable {} was missing, abort...' .format(var_name) ) def get_secret(secret_name, default=None): """Get secrets mounted by kubernetes. Args: secret_name (str): the name of the secret, corresponds to the filename default (str): the default value if no secret is found """ secret = None try: with open('/secrets/{0}'.format(secret_name), 'r') as secret_file: secret = secret_file.read().strip() except (IOError, FileNotFoundError): pass if secret is None: if default is None: raise RuntimeError( 'Missing a required secret: {0}.'.format(secret_name) ) secret = default return secret # Postgres POSTGRES_USER = get_secret('database/username') POSTGRES_PASSWORD = get_secret('database/password') POSTGRES_HOST = get_env_variable('DB_HOST') POSTGRES_PORT = get_env_variable('DB_PORT', 5432) POSTGRES_DB = get_env_variable('DB_NAME') SQLALCHEMY_DATABASE_URI = 'postgresql://{0}:{1}@{2}:{3}/{4}'.format( POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, ) # Redis REDIS_HOST = get_env_variable('REDIS_HOST') REDIS_PORT = get_env_variable('REDIS_PORT', 6379) # Celery class CeleryConfig: BROKER_URL = 'redis://{0}:{1}/0'.format(REDIS_HOST, REDIS_PORT) CELERY_IMPORTS = ('superset.sql_lab',) CELERY_RESULT_BACKEND = 'redis://{0}:{1}/1'.format(REDIS_HOST, REDIS_PORT) CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} CELERY_TASK_PROTOCOL = 1 CELERY_CONFIG = CeleryConfig 

We’re going to create a configmap named superset-config. This is how we’ll add our superset-config.py file to the superset pods.

I’m going to create the configmap object directly using kubectl.

kubectl create configmap superset-config --from-file superset

You can confirm with:

kubectl get configmap

We’ll need to add our database secrets and our google cloud service account key secret.

If you look in the secrets directory, you’ll see a directory structure like this:

secrets ├── database │ └── password │ └── username └── gcloud └── google-cloud-key.json

We’re going to create two secrets: database and gcloud. You’ll need to edit the files in each of these directories so they include the applicable secrets.

Then create the secrets using kubectl.

kubectl create secret generic database --from-file=secrets/database kubectl create secret generic gcloud --from-file=secrets/gcloud

Note: This directory is here simply to make it easy for you to create the appropriate secrets. You would never check these into any repository.

You can confirm the secrets exist with:

kubectl get secret

Check out the file called superset-deployment.yaml. This deployment defines and manages our superset pod:

apiVersion: apps/v1beta1 kind: Deployment metadata: name: superset-deployment namespace: default spec: selector: matchLabels: app: superset template: metadata: labels: app: superset spec: containers: - env: - name: DB_HOST value: 10.10.10.10 - name: REDIS_HOST value: redis - name: DB_NAME value: superset - name: GOOGLE_APPLICATION_CREDENTIALS value: /secrets/gcloud/google-cloud-key.json - name: PYTHONPATH value: "${PYTHONPATH}:/home/superset/superset/" image: amancevice/superset:latest name: superset ports: - containerPort: 8088 volumeMounts: - mountPath: /secrets/database name: database readOnly: true - mountPath: /secrets/gcloud name: gcloud readOnly: true - mountPath: /home/superset/superset name: superset-config volumes: - name: database secret: secretName: database - name: gcloud secret: secretName: gcloud - name: superset-config configMap: name: superset-config

The only things you’ll need to configure are the DB_HOST and REDIS_HOST environment variables, so update these values with the IP or hostname of your instances.

This service will send incoming traffic on port 8088 to the superset pods.

apiVersion: v1 kind: Service metadata: name: superset labels: app: superset spec: type: NodePort ports: - name: http port: 8088 targetPort: 8088 selector: app: superset

Once you’ve added the configmap and secrets, and you’ve customized any configs as desired, you’re ready to apply the configs.

kubectl apply --recursive -f kubernetes/

It will take a little bit of time for the image to pull and for the containers to start up, but you can check your progress with:

kubectl get pod | grep superset

Now let’s create an admin user.

SUPERSET_POD=$(kubectl get pod | grep superset | awk '{print $1}') kubectl exec -it $SUPERSET_POD -- fabmanager create-admin --app superset

You’ll be given a series of prompts to complete. Make sure to save your password!

Apache Superset login pageApache Superset login page

Since our service isn’t exposed to the world, we’ll need to forward port 8088 to our superset service.

kubectl port-forward service/superset 8088

Now we can open a browser and go to: http://localhost:8088

You should be able to log in to superset using the admin username and password you set previously.

Apache Superset Add DatabaseApache Superset Add Database

Now you’re ready to add a data source. If you’re using BigQuery and you mounted your service account key as I’ve show in this guide, you’re very close.

In Superset, click on Sources > Databases.

Then click the + icon that says Add a new record.

Now fill out the details for your database. The SQLAlchemy URI structure for bigquery is simple:

bigquery:// 

Now you’ll need to configure your tables and start building charts and dashboards. Refer to the Superset docs for this part.

If you’ve gotten to this point, and you’re pretty sure that Superset is going to be a permanent part of your stack, you may want to set up DNS and access this using a nicer hostname and without having to set up port forwarding every time. If there’s enough interest, I can update this guide with instructions!

How to install Apache Superset on a GKE Kubernetes Cluster

Install Apache Superset in a Kubernetes clusterInstall Apache Superset in a Kubernetes cluster
Obviously we’d call this “Supernetes”
Tyler Tyler (285)
Total time: 15 minutes 
Updated: July 22nd, 2020

In this guide, I’m going to show you how to install Apache Superset in your Kubernetes cluster (on GKE). I’m using Cloud SQL (Postgres) for the database backend, Memorystore (redis), and BigQuery as the data source. However, even if you’re using some different components this guide should still provide enough guidance to get you started with Superset on Kubernetes.

There’s a Github repository that accompanies this guide. If you’re already a Kubernetes master, you can probably just head over to the repository and get the configs. But the purpose of this guide is to provide instructions as well as an explanation of the configs.

With that said, if you’re ready to install Superset on your Kubernetes cluster, I recommend reading through this guide before taking action. Then, clone the Github repo and start working through the instructions when you’re ready.

What is Superset?

Superset is an open-source business intelligence tool. In short, it’s a web application that lets you connect to various data sources to query and visualize data.

What is GKE?

GKE stands for Google Kubernetes Engine. It is Google Cloud Platform’s (GCP) hosted Kubernetes service.

Posted in these interests:

kubernetes
PRIMARY
7 guides

How to install Apache Superset on a GKE Kubernetes Cluster

kubernetes
Obviously we’d call this “Supernetes”
Tyler Tyler (285)
Total time: 15 minutes 
Updated: July 22nd, 2020
Tyler
 

Posted in these interests:

kubernetes
PRIMARY
7 guides
kubernetes
PRIMARY
7 guides
PRIMARY
Steps to install Superset in a Kubernets cluster
Calling all writers!

We’re hiring. Write for Howchoo

 
In these interests
kubernetes
PRIMARY
7 guides
kubernetes
PRIMARY
7 guides
PRIMARY
Steps to install Superset in a Kubernets cluster

I’m going to start by mentioning Helm because it’s the simplest option, and if you’re happy to use Helm and this chart works for you, then you should use it!

Install helm

Head here to learn how to install helm. Once installed, you need to initialize helm in your cluster.

helm init

Install superset using helm

Head here for details on the superset helm chart. I’ll provide an example of the basic installation, but there are many more configuration options to set if desired.

helm install stable/superset

Hopefully this works swimmingly for you. However, I’ve found that this chart is not quite what I need. Because of the way the Google Cloud SDK authenticates, I need to mount my service account key file secret as a volume on the Superset pod, and it didn’t seem clear how to accomplish this. I’m also slightly biased against using helm, so I didn’t keep digging.

With that said, the remainder of this guide will show you how to install superset manually — that is, by building the configs by hand.

Before we begin, I want to discuss the setup. Configuring each of these tools is outside the scope of this guide, but I will explain each component and provide some useful tips.

Cloud SQL

I’m using a Cloud SQL Postgres instance. Setting this up is pretty simple, but make sure you enable Private IP on your instance.

Whether you’re using Cloud SQL or something else, you’ll need to create a superset database, and a user with all privileges granted to this database.

Memorystore

Configuring a Memorystore redis instance on GCP is pretty easy. You can also run a redis deployment in your GKE cluster with very little work. Either solution is fine.

GKE Cluster

We’re going to use a Kubernetes cluster running on GKE. This process is a little more involved, and again, I’m not going to go into detail here.

I will say that you need make sure your cluster is a VPC Native cluster so your cluster can connect to your DB using the private IP.

Local environment

You need to install the Google Cloud SDK on your local computer if you haven’t already. Then authenticate with your GKE cluster:

gcloud container clusters get-credentials  --zone  --project 

The following is our superset config. In short, it configures our database backend connection, redis connection, and celery.

If you’re using Cloud SQL (Postgres), like we configured previously, then you should need to modify this file at all. If you’re using another database backend, you’ll have to modify the config to build the correct sql alchemy database URI.

import os def get_env_variable(var_name, default=None): """Get the environment variable or raise exception. Args: var_name (str): the name of the environment variable to look up default (str): the default value if no env is found """ try: return os.environ[var_name] except KeyError: if default is not None: return default raise RuntimeError( 'The environment variable {} was missing, abort...' .format(var_name) ) def get_secret(secret_name, default=None): """Get secrets mounted by kubernetes. Args: secret_name (str): the name of the secret, corresponds to the filename default (str): the default value if no secret is found """ secret = None try: with open('/secrets/{0}'.format(secret_name), 'r') as secret_file: secret = secret_file.read().strip() except (IOError, FileNotFoundError): pass if secret is None: if default is None: raise RuntimeError( 'Missing a required secret: {0}.'.format(secret_name) ) secret = default return secret # Postgres POSTGRES_USER = get_secret('database/username') POSTGRES_PASSWORD = get_secret('database/password') POSTGRES_HOST = get_env_variable('DB_HOST') POSTGRES_PORT = get_env_variable('DB_PORT', 5432) POSTGRES_DB = get_env_variable('DB_NAME') SQLALCHEMY_DATABASE_URI = 'postgresql://{0}:{1}@{2}:{3}/{4}'.format( POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, ) # Redis REDIS_HOST = get_env_variable('REDIS_HOST') REDIS_PORT = get_env_variable('REDIS_PORT', 6379) # Celery class CeleryConfig: BROKER_URL = 'redis://{0}:{1}/0'.format(REDIS_HOST, REDIS_PORT) CELERY_IMPORTS = ('superset.sql_lab',) CELERY_RESULT_BACKEND = 'redis://{0}:{1}/1'.format(REDIS_HOST, REDIS_PORT) CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} CELERY_TASK_PROTOCOL = 1 CELERY_CONFIG = CeleryConfig 

We’re going to create a configmap named superset-config. This is how we’ll add our superset-config.py file to the superset pods.

I’m going to create the configmap object directly using kubectl.

kubectl create configmap superset-config --from-file superset

You can confirm with:

kubectl get configmap

We’ll need to add our database secrets and our google cloud service account key secret.

If you look in the secrets directory, you’ll see a directory structure like this:

secrets ├── database │ └── password │ └── username └── gcloud └── google-cloud-key.json

We’re going to create two secrets: database and gcloud. You’ll need to edit the files in each of these directories so they include the applicable secrets.

Then create the secrets using kubectl.

kubectl create secret generic database --from-file=secrets/database kubectl create secret generic gcloud --from-file=secrets/gcloud

Note: This directory is here simply to make it easy for you to create the appropriate secrets. You would never check these into any repository.

You can confirm the secrets exist with:

kubectl get secret

Check out the file called superset-deployment.yaml. This deployment defines and manages our superset pod:

apiVersion: apps/v1beta1 kind: Deployment metadata: name: superset-deployment namespace: default spec: selector: matchLabels: app: superset template: metadata: labels: app: superset spec: containers: - env: - name: DB_HOST value: 10.10.10.10 - name: REDIS_HOST value: redis - name: DB_NAME value: superset - name: GOOGLE_APPLICATION_CREDENTIALS value: /secrets/gcloud/google-cloud-key.json - name: PYTHONPATH value: "${PYTHONPATH}:/home/superset/superset/" image: amancevice/superset:latest name: superset ports: - containerPort: 8088 volumeMounts: - mountPath: /secrets/database name: database readOnly: true - mountPath: /secrets/gcloud name: gcloud readOnly: true - mountPath: /home/superset/superset name: superset-config volumes: - name: database secret: secretName: database - name: gcloud secret: secretName: gcloud - name: superset-config configMap: name: superset-config

The only things you’ll need to configure are the DB_HOST and REDIS_HOST environment variables, so update these values with the IP or hostname of your instances.

This service will send incoming traffic on port 8088 to the superset pods.

apiVersion: v1 kind: Service metadata: name: superset labels: app: superset spec: type: NodePort ports: - name: http port: 8088 targetPort: 8088 selector: app: superset

Once you’ve added the configmap and secrets, and you’ve customized any configs as desired, you’re ready to apply the configs.

kubectl apply --recursive -f kubernetes/

It will take a little bit of time for the image to pull and for the containers to start up, but you can check your progress with:

kubectl get pod | grep superset

Now let’s create an admin user.

SUPERSET_POD=$(kubectl get pod | grep superset | awk '{print $1}') kubectl exec -it $SUPERSET_POD -- fabmanager create-admin --app superset

You’ll be given a series of prompts to complete. Make sure to save your password!

Apache Superset login pageApache Superset login page

Since our service isn’t exposed to the world, we’ll need to forward port 8088 to our superset service.

kubectl port-forward service/superset 8088

Now we can open a browser and go to: http://localhost:8088

You should be able to log in to superset using the admin username and password you set previously.

Apache Superset Add DatabaseApache Superset Add Database

Now you’re ready to add a data source. If you’re using BigQuery and you mounted your service account key as I’ve show in this guide, you’re very close.

In Superset, click on Sources > Databases.

Then click the + icon that says Add a new record.

Now fill out the details for your database. The SQLAlchemy URI structure for bigquery is simple:

bigquery:// 

Now you’ll need to configure your tables and start building charts and dashboards. Refer to the Superset docs for this part.

If you’ve gotten to this point, and you’re pretty sure that Superset is going to be a permanent part of your stack, you may want to set up DNS and access this using a nicer hostname and without having to set up port forwarding every time. If there’s enough interest, I can update this guide with instructions!

I’m going to start by mentioning Helm because it’s the simplest option, and if you’re happy to use Helm and this chart works for you, then you should use it!

Install helm

Head here to learn how to install helm. Once installed, you need to initialize helm in your cluster.

helm init

Install superset using helm

Head here for details on the superset helm chart. I’ll provide an example of the basic installation, but there are many more configuration options to set if desired.

helm install stable/superset

Hopefully this works swimmingly for you. However, I’ve found that this chart is not quite what I need. Because of the way the Google Cloud SDK authenticates, I need to mount my service account key file secret as a volume on the Superset pod, and it didn’t seem clear how to accomplish this. I’m also slightly biased against using helm, so I didn’t keep digging.

With that said, the remainder of this guide will show you how to install superset manually — that is, by building the configs by hand.

I’m going to start by mentioning Helm because it’s the simplest option, and if you’re happy to use Helm and this chart works for you, then you should use it!

Install helm

Head here to learn how to install helm. Once installed, you need to initialize helm in your cluster.

helm init

Install superset using helm

Head here for details on the superset helm chart. I’ll provide an example of the basic installation, but there are many more configuration options to set if desired.

helm install stable/superset

Hopefully this works swimmingly for you. However, I’ve found that this chart is not quite what I need. Because of the way the Google Cloud SDK authenticates, I need to mount my service account key file secret as a volume on the Superset pod, and it didn’t seem clear how to accomplish this. I’m also slightly biased against using helm, so I didn’t keep digging.

With that said, the remainder of this guide will show you how to install superset manually — that is, by building the configs by hand.

Using Helm

Before we begin, I want to discuss the setup. Configuring each of these tools is outside the scope of this guide, but I will explain each component and provide some useful tips.

Cloud SQL

I’m using a Cloud SQL Postgres instance. Setting this up is pretty simple, but make sure you enable Private IP on your instance.

Whether you’re using Cloud SQL or something else, you’ll need to create a superset database, and a user with all privileges granted to this database.

Memorystore

Configuring a Memorystore redis instance on GCP is pretty easy. You can also run a redis deployment in your GKE cluster with very little work. Either solution is fine.

GKE Cluster

We’re going to use a Kubernetes cluster running on GKE. This process is a little more involved, and again, I’m not going to go into detail here.

I will say that you need make sure your cluster is a VPC Native cluster so your cluster can connect to your DB using the private IP.

Local environment

You need to install the Google Cloud SDK on your local computer if you haven’t already. Then authenticate with your GKE cluster:

gcloud container clusters get-credentials  --zone  --project 

Before we begin, I want to discuss the setup. Configuring each of these tools is outside the scope of this guide, but I will explain each component and provide some useful tips.

Cloud SQL

I’m using a Cloud SQL Postgres instance. Setting this up is pretty simple, but make sure you enable Private IP on your instance.

Whether you’re using Cloud SQL or something else, you’ll need to create a superset database, and a user with all privileges granted to this database.

Memorystore

Configuring a Memorystore redis instance on GCP is pretty easy. You can also run a redis deployment in your GKE cluster with very little work. Either solution is fine.

GKE Cluster

We’re going to use a Kubernetes cluster running on GKE. This process is a little more involved, and again, I’m not going to go into detail here.

I will say that you need make sure your cluster is a VPC Native cluster so your cluster can connect to your DB using the private IP.

Local environment

You need to install the Google Cloud SDK on your local computer if you haven’t already. Then authenticate with your GKE cluster:

gcloud container clusters get-credentials  --zone  --project 

Setup for a manual Superset installation

The following is our superset config. In short, it configures our database backend connection, redis connection, and celery.

If you’re using Cloud SQL (Postgres), like we configured previously, then you should need to modify this file at all. If you’re using another database backend, you’ll have to modify the config to build the correct sql alchemy database URI.

import os def get_env_variable(var_name, default=None): """Get the environment variable or raise exception. Args: var_name (str): the name of the environment variable to look up default (str): the default value if no env is found """ try: return os.environ[var_name] except KeyError: if default is not None: return default raise RuntimeError( 'The environment variable {} was missing, abort...' .format(var_name) ) def get_secret(secret_name, default=None): """Get secrets mounted by kubernetes. Args: secret_name (str): the name of the secret, corresponds to the filename default (str): the default value if no secret is found """ secret = None try: with open('/secrets/{0}'.format(secret_name), 'r') as secret_file: secret = secret_file.read().strip() except (IOError, FileNotFoundError): pass if secret is None: if default is None: raise RuntimeError( 'Missing a required secret: {0}.'.format(secret_name) ) secret = default return secret # Postgres POSTGRES_USER = get_secret('database/username') POSTGRES_PASSWORD = get_secret('database/password') POSTGRES_HOST = get_env_variable('DB_HOST') POSTGRES_PORT = get_env_variable('DB_PORT', 5432) POSTGRES_DB = get_env_variable('DB_NAME') SQLALCHEMY_DATABASE_URI = 'postgresql://{0}:{1}@{2}:{3}/{4}'.format( POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, ) # Redis REDIS_HOST = get_env_variable('REDIS_HOST') REDIS_PORT = get_env_variable('REDIS_PORT', 6379) # Celery class CeleryConfig: BROKER_URL = 'redis://{0}:{1}/0'.format(REDIS_HOST, REDIS_PORT) CELERY_IMPORTS = ('superset.sql_lab',) CELERY_RESULT_BACKEND = 'redis://{0}:{1}/1'.format(REDIS_HOST, REDIS_PORT) CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} CELERY_TASK_PROTOCOL = 1 CELERY_CONFIG = CeleryConfig 

The following is our superset config. In short, it configures our database backend connection, redis connection, and celery.

If you’re using Cloud SQL (Postgres), like we configured previously, then you should need to modify this file at all. If you’re using another database backend, you’ll have to modify the config to build the correct sql alchemy database URI.

import os def get_env_variable(var_name, default=None): """Get the environment variable or raise exception. Args: var_name (str): the name of the environment variable to look up default (str): the default value if no env is found """ try: return os.environ[var_name] except KeyError: if default is not None: return default raise RuntimeError( 'The environment variable {} was missing, abort...' .format(var_name) ) def get_secret(secret_name, default=None): """Get secrets mounted by kubernetes. Args: secret_name (str): the name of the secret, corresponds to the filename default (str): the default value if no secret is found """ secret = None try: with open('/secrets/{0}'.format(secret_name), 'r') as secret_file: secret = secret_file.read().strip() except (IOError, FileNotFoundError): pass if secret is None: if default is None: raise RuntimeError( 'Missing a required secret: {0}.'.format(secret_name) ) secret = default return secret # Postgres POSTGRES_USER = get_secret('database/username') POSTGRES_PASSWORD = get_secret('database/password') POSTGRES_HOST = get_env_variable('DB_HOST') POSTGRES_PORT = get_env_variable('DB_PORT', 5432) POSTGRES_DB = get_env_variable('DB_NAME') SQLALCHEMY_DATABASE_URI = 'postgresql://{0}:{1}@{2}:{3}/{4}'.format( POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, ) # Redis REDIS_HOST = get_env_variable('REDIS_HOST') REDIS_PORT = get_env_variable('REDIS_PORT', 6379) # Celery class CeleryConfig: BROKER_URL = 'redis://{0}:{1}/0'.format(REDIS_HOST, REDIS_PORT) CELERY_IMPORTS = ('superset.sql_lab',) CELERY_RESULT_BACKEND = 'redis://{0}:{1}/1'.format(REDIS_HOST, REDIS_PORT) CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} CELERY_TASK_PROTOCOL = 1 CELERY_CONFIG = CeleryConfig 

The superset config

We’re going to create a configmap named superset-config. This is how we’ll add our superset-config.py file to the superset pods.

I’m going to create the configmap object directly using kubectl.

kubectl create configmap superset-config --from-file superset

You can confirm with:

kubectl get configmap

We’re going to create a configmap named superset-config. This is how we’ll add our superset-config.py file to the superset pods.

I’m going to create the configmap object directly using kubectl.

kubectl create configmap superset-config --from-file superset

You can confirm with:

kubectl get configmap

Create a configmap for the superset config

We’ll need to add our database secrets and our google cloud service account key secret.

If you look in the secrets directory, you’ll see a directory structure like this:

secrets ├── database │ └── password │ └── username └── gcloud └── google-cloud-key.json

We’re going to create two secrets: database and gcloud. You’ll need to edit the files in each of these directories so they include the applicable secrets.

Then create the secrets using kubectl.

kubectl create secret generic database --from-file=secrets/database kubectl create secret generic gcloud --from-file=secrets/gcloud

Note: This directory is here simply to make it easy for you to create the appropriate secrets. You would never check these into any repository.

You can confirm the secrets exist with:

kubectl get secret

We’ll need to add our database secrets and our google cloud service account key secret.

If you look in the secrets directory, you’ll see a directory structure like this:

secrets ├── database │ └── password │ └── username └── gcloud └── google-cloud-key.json

We’re going to create two secrets: database and gcloud. You’ll need to edit the files in each of these directories so they include the applicable secrets.

Then create the secrets using kubectl.

kubectl create secret generic database --from-file=secrets/database kubectl create secret generic gcloud --from-file=secrets/gcloud

Note: This directory is here simply to make it easy for you to create the appropriate secrets. You would never check these into any repository.

You can confirm the secrets exist with:

kubectl get secret

Add secrets to the cluster

Check out the file called superset-deployment.yaml. This deployment defines and manages our superset pod:

apiVersion: apps/v1beta1 kind: Deployment metadata: name: superset-deployment namespace: default spec: selector: matchLabels: app: superset template: metadata: labels: app: superset spec: containers: - env: - name: DB_HOST value: 10.10.10.10 - name: REDIS_HOST value: redis - name: DB_NAME value: superset - name: GOOGLE_APPLICATION_CREDENTIALS value: /secrets/gcloud/google-cloud-key.json - name: PYTHONPATH value: "${PYTHONPATH}:/home/superset/superset/" image: amancevice/superset:latest name: superset ports: - containerPort: 8088 volumeMounts: - mountPath: /secrets/database name: database readOnly: true - mountPath: /secrets/gcloud name: gcloud readOnly: true - mountPath: /home/superset/superset name: superset-config volumes: - name: database secret: secretName: database - name: gcloud secret: secretName: gcloud - name: superset-config configMap: name: superset-config

The only things you’ll need to configure are the DB_HOST and REDIS_HOST environment variables, so update these values with the IP or hostname of your instances.

Check out the file called superset-deployment.yaml. This deployment defines and manages our superset pod:

apiVersion: apps/v1beta1 kind: Deployment metadata: name: superset-deployment namespace: default spec: selector: matchLabels: app: superset template: metadata: labels: app: superset spec: containers: - env: - name: DB_HOST value: 10.10.10.10 - name: REDIS_HOST value: redis - name: DB_NAME value: superset - name: GOOGLE_APPLICATION_CREDENTIALS value: /secrets/gcloud/google-cloud-key.json - name: PYTHONPATH value: "${PYTHONPATH}:/home/superset/superset/" image: amancevice/superset:latest name: superset ports: - containerPort: 8088 volumeMounts: - mountPath: /secrets/database name: database readOnly: true - mountPath: /secrets/gcloud name: gcloud readOnly: true - mountPath: /home/superset/superset name: superset-config volumes: - name: database secret: secretName: database - name: gcloud secret: secretName: gcloud - name: superset-config configMap: name: superset-config

The only things you’ll need to configure are the DB_HOST and REDIS_HOST environment variables, so update these values with the IP or hostname of your instances.

The superset deployment

This service will send incoming traffic on port 8088 to the superset pods.

apiVersion: v1 kind: Service metadata: name: superset labels: app: superset spec: type: NodePort ports: - name: http port: 8088 targetPort: 8088 selector: app: superset

This service will send incoming traffic on port 8088 to the superset pods.

apiVersion: v1 kind: Service metadata: name: superset labels: app: superset spec: type: NodePort ports: - name: http port: 8088 targetPort: 8088 selector: app: superset

The superset service

Once you’ve added the configmap and secrets, and you’ve customized any configs as desired, you’re ready to apply the configs.

kubectl apply --recursive -f kubernetes/

It will take a little bit of time for the image to pull and for the containers to start up, but you can check your progress with:

kubectl get pod | grep superset

Once you’ve added the configmap and secrets, and you’ve customized any configs as desired, you’re ready to apply the configs.

kubectl apply --recursive -f kubernetes/

It will take a little bit of time for the image to pull and for the containers to start up, but you can check your progress with:

kubectl get pod | grep superset

Apply the configs

Now let’s create an admin user.

SUPERSET_POD=$(kubectl get pod | grep superset | awk '{print $1}') kubectl exec -it $SUPERSET_POD -- fabmanager create-admin --app superset

You’ll be given a series of prompts to complete. Make sure to save your password!

Now let’s create an admin user.

SUPERSET_POD=$(kubectl get pod | grep superset | awk '{print $1}') kubectl exec -it $SUPERSET_POD -- fabmanager create-admin --app superset

You’ll be given a series of prompts to complete. Make sure to save your password!

Create the admin user

Apache Superset login pageApache Superset login page

Since our service isn’t exposed to the world, we’ll need to forward port 8088 to our superset service.

kubectl port-forward service/superset 8088

Now we can open a browser and go to: http://localhost:8088

You should be able to log in to superset using the admin username and password you set previously.

Apache Superset login pageApache Superset login page

Since our service isn’t exposed to the world, we’ll need to forward port 8088 to our superset service.

kubectl port-forward service/superset 8088

Now we can open a browser and go to: http://localhost:8088

You should be able to log in to superset using the admin username and password you set previously.

Forward port 8088 and log in

Apache Superset Add DatabaseApache Superset Add Database

Now you’re ready to add a data source. If you’re using BigQuery and you mounted your service account key as I’ve show in this guide, you’re very close.

In Superset, click on Sources > Databases.

Then click the + icon that says Add a new record.

Now fill out the details for your database. The SQLAlchemy URI structure for bigquery is simple:

bigquery:// 
Apache Superset Add DatabaseApache Superset Add Database

Now you’re ready to add a data source. If you’re using BigQuery and you mounted your service account key as I’ve show in this guide, you’re very close.

In Superset, click on Sources > Databases.

Then click the + icon that says Add a new record.

Now fill out the details for your database. The SQLAlchemy URI structure for bigquery is simple:

bigquery:// 

Setting up a BigQuery data source

Now you’ll need to configure your tables and start building charts and dashboards. Refer to the Superset docs for this part.

If you’ve gotten to this point, and you’re pretty sure that Superset is going to be a permanent part of your stack, you may want to set up DNS and access this using a nicer hostname and without having to set up port forwarding every time. If there’s enough interest, I can update this guide with instructions!

Now you’ll need to configure your tables and start building charts and dashboards. Refer to the Superset docs for this part.

If you’ve gotten to this point, and you’re pretty sure that Superset is going to be a permanent part of your stack, you may want to set up DNS and access this using a nicer hostname and without having to set up port forwarding every time. If there’s enough interest, I can update this guide with instructions!

Next steps

Calling all writers!

We’re hiring. Write for Howchoo

Tyler's profile pictureTyler
Joined in 2015
Software Engineer and creator of howchoo.
Tyler's profile picture
Share this guide!
RedditEmailTextPinterest
Related to this guide:
Use "kubectl cp" to Copy Files to and from Kubernetes PodsUse "kubectl cp" to Copy Files to and from Kubernetes Pods
If you’re using Kubernetes, you may find the need to move files to and from containers running on pods.
Tyler's profile picture TylerView
In these interests: kubernetes
Secure Your Sensitive Data with Kubernetes SecretsSecure Your Sensitive Data with Kubernetes Secrets
Learn how to create and use Kubernetes secrets
Tyler's profile picture TylerView
In these interests: codedevopskubernetes
How to Read Kubernetes SecretsHow to Read Kubernetes Secrets
So you’ve started using Kubernetes secrets. At some point, you’ll probably want to see the secret in plain text, either to validate it or use it in another context.
Tyler's profile picture TylerView
In these interests: kubernetes
Use "kubectl cp" to Copy Files to and from Kubernetes PodsUse "kubectl cp" to Copy Files to and from Kubernetes Pods
If you’re using Kubernetes, you may find the need to move files to and from containers running on pods.
Tyler's profile picture TylerView
In these interests: kubernetes
Tyler's profile pictureViewkubernetes
Secure Your Sensitive Data with Kubernetes SecretsSecure Your Sensitive Data with Kubernetes Secrets
Learn how to create and use Kubernetes secrets
Tyler's profile picture TylerView
In these interests: codedevopskubernetes
Tyler's profile pictureViewcodedevopskubernetes
How to Read Kubernetes SecretsHow to Read Kubernetes Secrets
So you’ve started using Kubernetes secrets. At some point, you’ll probably want to see the secret in plain text, either to validate it or use it in another context.
Tyler's profile picture TylerView
In these interests: kubernetes
Tyler's profile pictureViewkubernetes
People also read:
Install Prometheus and Grafana in your Kubernetes cluster
What is Prometheus? Prometheus is an open source systems monitoring toolkit originally developed by SoundCloud.
As a Kubernetes user, I find that I often need to trigger a kubernetes cron job manually, outside of its schedule. Fortunately, since the release of Kubernetes 1.
There are many reasons you might want to copy Kubernetes secrets from one cluster to another. In recent months, I had to migrate to a new GKE cluster in order to get some new functionality.
Install Prometheus and Grafana in your Kubernetes cluster
What is Prometheus? Prometheus is an open source systems monitoring toolkit originally developed by SoundCloud.
As a Kubernetes user, I find that I often need to trigger a kubernetes cron job manually, outside of its schedule. Fortunately, since the release of Kubernetes 1.
There are many reasons you might want to copy Kubernetes secrets from one cluster to another. In recent months, I had to migrate to a new GKE cluster in order to get some new functionality.
Install Prometheus and Grafana in your Kubernetes cluster
Install Prometheus and Grafana in your Kubernetes clusterInstall Prometheus and Grafana in your Kubernetes cluster
How to Create a Kubernetes Job From a Cron Job
How to Copy Secrets From One Kubernetes Cluster to Another
Posted in these interests:
kuberneteskubernetes
kubernetes
PRIMARY
It’s pronounced “koob-er-net-ees”.
kuberneteskubernetes
kubernetes
PRIMARY
It’s pronounced “koob-er-net-ees”.
PRIMARY
Explore
Discuss this guide:
We’re hiring!
Are you a passionate writer? We want to hear from you!
We’re hiring!
Are you a passionate writer? We want to hear from you!
View openings

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Donate

How to install Apache Superset on a GKE Kubernetes Cluster

Install Apache Superset in a Kubernetes clusterInstall Apache Superset in a Kubernetes cluster
Obviously we’d call this “Supernetes”
Tyler Tyler (284)
Total time: 15 minutes 
Updated: July 22nd, 2020

In this guide, I’m going to show you how to install Apache Superset in your Kubernetes cluster (on GKE). I’m using Cloud SQL (Postgres) for the database backend, Memorystore (redis), and BigQuery as the data source. However, even if you’re using some different components this guide should still provide enough guidance to get you started with Superset on Kubernetes.

There’s a Github repository that accompanies this guide. If you’re already a Kubernetes master, you can probably just head over to the repository and get the configs. But the purpose of this guide is to provide instructions as well as an explanation of the configs.

With that said, if you’re ready to install Superset on your Kubernetes cluster, I recommend reading through this guide before taking action. Then, clone the Github repo and start working through the instructions when you’re ready.

What is Superset?

Superset is an open-source business intelligence tool. In short, it’s a web application that lets you connect to various data sources to query and visualize data.

What is GKE?

GKE stands for Google Kubernetes Engine. It is Google Cloud Platform’s (GCP) hosted Kubernetes service.

Posted in these interests:

kubernetes
PRIMARY
7 guides

I’m going to start by mentioning Helm because it’s the simplest option, and if you’re happy to use Helm and this chart works for you, then you should use it!

Install helm

Head here to learn how to install helm. Once installed, you need to initialize helm in your cluster.

helm init

Install superset using helm

Head here for details on the superset helm chart. I’ll provide an example of the basic installation, but there are many more configuration options to set if desired.

helm install stable/superset

Hopefully this works swimmingly for you. However, I’ve found that this chart is not quite what I need. Because of the way the Google Cloud SDK authenticates, I need to mount my service account key file secret as a volume on the Superset pod, and it didn’t seem clear how to accomplish this. I’m also slightly biased against using helm, so I didn’t keep digging.

With that said, the remainder of this guide will show you how to install superset manually — that is, by building the configs by hand.

Before we begin, I want to discuss the setup. Configuring each of these tools is outside the scope of this guide, but I will explain each component and provide some useful tips.

Cloud SQL

I’m using a Cloud SQL Postgres instance. Setting this up is pretty simple, but make sure you enable Private IP on your instance.

Whether you’re using Cloud SQL or something else, you’ll need to create a superset database, and a user with all privileges granted to this database.

Memorystore

Configuring a Memorystore redis instance on GCP is pretty easy. You can also run a redis deployment in your GKE cluster with very little work. Either solution is fine.

GKE Cluster

We’re going to use a Kubernetes cluster running on GKE. This process is a little more involved, and again, I’m not going to go into detail here.

I will say that you need make sure your cluster is a VPC Native cluster so your cluster can connect to your DB using the private IP.

Local environment

You need to install the Google Cloud SDK on your local computer if you haven’t already. Then authenticate with your GKE cluster:

gcloud container clusters get-credentials  --zone  --project 

The following is our superset config. In short, it configures our database backend connection, redis connection, and celery.

If you’re using Cloud SQL (Postgres), like we configured previously, then you should need to modify this file at all. If you’re using another database backend, you’ll have to modify the config to build the correct sql alchemy database URI.

import os def get_env_variable(var_name, default=None): """Get the environment variable or raise exception. Args: var_name (str): the name of the environment variable to look up default (str): the default value if no env is found """ try: return os.environ[var_name] except KeyError: if default is not None: return default raise RuntimeError( 'The environment variable {} was missing, abort...' .format(var_name) ) def get_secret(secret_name, default=None): """Get secrets mounted by kubernetes. Args: secret_name (str): the name of the secret, corresponds to the filename default (str): the default value if no secret is found """ secret = None try: with open('/secrets/{0}'.format(secret_name), 'r') as secret_file: secret = secret_file.read().strip() except (IOError, FileNotFoundError): pass if secret is None: if default is None: raise RuntimeError( 'Missing a required secret: {0}.'.format(secret_name) ) secret = default return secret # Postgres POSTGRES_USER = get_secret('database/username') POSTGRES_PASSWORD = get_secret('database/password') POSTGRES_HOST = get_env_variable('DB_HOST') POSTGRES_PORT = get_env_variable('DB_PORT', 5432) POSTGRES_DB = get_env_variable('DB_NAME') SQLALCHEMY_DATABASE_URI = 'postgresql://{0}:{1}@{2}:{3}/{4}'.format( POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, ) # Redis REDIS_HOST = get_env_variable('REDIS_HOST') REDIS_PORT = get_env_variable('REDIS_PORT', 6379) # Celery class CeleryConfig: BROKER_URL = 'redis://{0}:{1}/0'.format(REDIS_HOST, REDIS_PORT) CELERY_IMPORTS = ('superset.sql_lab',) CELERY_RESULT_BACKEND = 'redis://{0}:{1}/1'.format(REDIS_HOST, REDIS_PORT) CELERY_ANNOTATIONS = {'tasks.add': {'rate_limit': '10/s'}} CELERY_TASK_PROTOCOL = 1 CELERY_CONFIG = CeleryConfig 

We’re going to create a configmap named superset-config. This is how we’ll add our superset-config.py file to the superset pods.

I’m going to create the configmap object directly using kubectl.

kubectl create configmap superset-config --from-file superset

You can confirm with:

kubectl get configmap

We’ll need to add our database secrets and our google cloud service account key secret.

If you look in the secrets directory, you’ll see a directory structure like this:

secrets ├── database │ └── password │ └── username └── gcloud └── google-cloud-key.json

We’re going to create two secrets: database and gcloud. You’ll need to edit the files in each of these directories so they include the applicable secrets.

Then create the secrets using kubectl.

kubectl create secret generic database --from-file=secrets/database kubectl create secret generic gcloud --from-file=secrets/gcloud

Note: This directory is here simply to make it easy for you to create the appropriate secrets. You would never check these into any repository.

You can confirm the secrets exist with:

kubectl get secret

Check out the file called superset-deployment.yaml. This deployment defines and manages our superset pod:

apiVersion: apps/v1beta1 kind: Deployment metadata: name: superset-deployment namespace: default spec: selector: matchLabels: app: superset template: metadata: labels: app: superset spec: containers: - env: - name: DB_HOST value: 10.10.10.10 - name: REDIS_HOST value: redis - name: DB_NAME value: superset - name: GOOGLE_APPLICATION_CREDENTIALS value: /secrets/gcloud/google-cloud-key.json - name: PYTHONPATH value: "${PYTHONPATH}:/home/superset/superset/" image: amancevice/superset:latest name: superset ports: - containerPort: 8088 volumeMounts: - mountPath: /secrets/database name: database readOnly: true - mountPath: /secrets/gcloud name: gcloud readOnly: true - mountPath: /home/superset/superset name: superset-config volumes: - name: database secret: secretName: database - name: gcloud secret: secretName: gcloud - name: superset-config configMap: name: superset-config

The only things you’ll need to configure are the DB_HOST and REDIS_HOST environment variables, so update these values with the IP or hostname of your instances.

This service will send incoming traffic on port 8088 to the superset pods.

apiVersion: v1 kind: Service metadata: name: superset labels: app: superset spec: type: NodePort ports: - name: http port: 8088 targetPort: 8088 selector: app: superset

Once you’ve added the configmap and secrets, and you’ve customized any configs as desired, you’re ready to apply the configs.

kubectl apply --recursive -f kubernetes/

It will take a little bit of time for the image to pull and for the containers to start up, but you can check your progress with:

kubectl get pod | grep superset

Now let’s create an admin user.

SUPERSET_POD=$(kubectl get pod | grep superset | awk '{print $1}') kubectl exec -it $SUPERSET_POD -- fabmanager create-admin --app superset

You’ll be given a series of prompts to complete. Make sure to save your password!

Apache Superset login pageApache Superset login page

Since our service isn’t exposed to the world, we’ll need to forward port 8088 to our superset service.

kubectl port-forward service/superset 8088

Now we can open a browser and go to: http://localhost:8088

You should be able to log in to superset using the admin username and password you set previously.

Apache Superset Add DatabaseApache Superset Add Database

Now you’re ready to add a data source. If you’re using BigQuery and you mounted your service account key as I’ve show in this guide, you’re very close.

In Superset, click on Sources > Databases.

Then click the + icon that says Add a new record.

Now fill out the details for your database. The SQLAlchemy URI structure for bigquery is simple:

bigquery:// 

Now you’ll need to configure your tables and start building charts and dashboards. Refer to the Superset docs for this part.

If you’ve gotten to this point, and you’re pretty sure that Superset is going to be a permanent part of your stack, you may want to set up DNS and access this using a nicer hostname and without having to set up port forwarding every time. If there’s enough interest, I can update this guide with instructions!

We’re hiring!
Are you a passionate writer or editor? We want to hear from you!

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Total time: 10 minutes 
Updated: July 22nd, 2020
pi
PRIMARY
215 guides
Calling all writers!

We’re hiring. Write for Howchoo

pi
PRIMARY
215 guides
How to Use Raspberry Pi Imager How to Use Raspberry Pi ImagerNew official Raspberry Pi imaging software.
Calling all writers!

We’re hiring. Write for Howchoo

Ash's profile pictureAsh
Joined in 2018
Ash is an experienced tech writer with an endless passion for technology. She enjoys retro gaming, 3D printing, and making awesome projects on the Raspberry Pi.
For Raspberry Pi beginners who still love to follow along in a book.
Michael's profile picture MichaelView
In these interests: booksretropiepi
What’s better than an experiment? An experiment in space!
Michael's profile picture MichaelView
In these interests: kidspinews
In these interests: pi
Kali Linux is a great distribution for Raspberry Pi users who want to get to grips with security testing.
The Raspberry Pi micro-computer grows in power with each new model release, with more resources that make it a more capable, low-cost content server for your media and resources.
Laptops, smartphones, tablets, even lightbulbs—an endless number of devices now have the ability to connect to your local network and the wider internet.
The Raspberry Pi was designed to boot from an SD card, but in some cases, it’s convenient to boot from a USB drive.
New to the Raspberry Pi? Start here.
Blocking ads just got easier with Pi-hole, a network-wide ad blocker for the Raspberry Pi
Don’t skip out on a proper case for your Pi 4.
The only Raspberry Pi Bluetooth guide you’ll ever need.
Your favorite MS OS on the Pi.
If you need a resource-light operating system for your Raspberry Pi, then you should consider trying DietPi.
pi
PRIMARY
The Raspberry Pi is a small, inexpensive computer developed by the Raspberry Pi Foundation in the United Kingdom.
Total time: 30 minutes 
Updated: July 22nd, 2020
pi
PRIMARY
216 guides
windows
31 guides
pc
6 guides
Calling all writers!

We’re hiring. Write for Howchoo

pi
PRIMARY
216 guides
windows
31 guides
pc
6 guides
Calling all writers!

We’re hiring. Write for Howchoo

Ash's profile pictureAsh
Joined in 2018
Ash is an experienced tech writer with an endless passion for technology. She enjoys retro gaming, 3D printing, and making awesome projects on the Raspberry Pi.
Raspberry Pi livestreams each Thursday with new things for kids to code!
Michael's profile picture MichaelView
In these interests: kidsnewspi
For Raspberry Pi beginners who still love to follow along in a book.
Michael's profile picture MichaelView
In these interests: booksretropiepi
What’s better than an experiment? An experiment in space!
Michael's profile picture MichaelView
In these interests: kidspinews
Kali Linux is a great distribution for Raspberry Pi users who want to get to grips with security testing.
The Raspberry Pi micro-computer grows in power with each new model release, with more resources that make it a more capable, low-cost content server for your media and resources.
Laptops, smartphones, tablets, even lightbulbs—an endless number of devices now have the ability to connect to your local network and the wider internet.
The Raspberry Pi was designed to boot from an SD card, but in some cases, it’s convenient to boot from a USB drive.
Get the new official Raspberry Pi OS on your Pi.
New to the Raspberry Pi? Start here.
Blocking ads just got easier with Pi-hole, a network-wide ad blocker for the Raspberry Pi
Don’t skip out on a proper case for your Pi 4.
The only Raspberry Pi Bluetooth guide you’ll ever need.
pi
PRIMARY
The Raspberry Pi is a small, inexpensive computer developed by the Raspberry Pi Foundation in the United Kingdom.

The Fastest Way to Lock Your Screen on a Touch Bar MacBook

The Fastest Way to Lock Your Screen on a Touch Bar MacBookThe Fastest Way to Lock Your Screen on a Touch Bar MacBook
Tyler Tyler (285)
Total time: 1 minute 
Updated: July 22nd, 2020

If you need to keep your work secure, it’s important to keep your computer locked whenever it’s unattended.

To do this on a touch bar enabled Mac, we simply need to add the “Lock Screen” icon to the touch bar. This guide will walk you through the process.

Posted in these interests:

macos
PRIMARY
40 guides
mac
81 guides
security
23 guides
Open Keyboard settings in System PreferencesOpen Keyboard settings in System Preferences

Open System Preferences using Spotlight by hitting cmd + space bar and typing System Preferences. Then click Keyboard.

Click on Customize Touch BarClick on Customize Touch Bar

Near the bottom, click on either Customize Touch Bar…, which will open the touch bar settings.

Find the Screen Lock icon and drag it onto your touch barFind the Screen Lock icon and drag it onto your touch bar

Click on the Screen Lock icon and drag it off the bottom of your screen and you’ll see it appear on the touch bar. You can drag it side by side to place it where you’d like.

Now whenever you need to step away from your computer, you can quickly lock the screen by clicking on the Screen Lock icon on your touch bar!

We’re hiring!
Are you a passionate writer? We want to hear from you!

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Tyler's profile pictureTyler
Joined in 2015
Software Engineer and creator of howchoo.
Related to this guide:
Use "kubectl cp" to Copy Files to and from Kubernetes PodsUse "kubectl cp" to Copy Files to and from Kubernetes Pods
If you’re using Kubernetes, you may find the need to move files to and from containers running on pods.
Tyler's profile picture TylerView
In these interests: kubernetes
Secure Your Sensitive Data with Kubernetes SecretsSecure Your Sensitive Data with Kubernetes Secrets
Learn how to create and use Kubernetes secrets
Tyler's profile picture TylerView
In these interests: codedevopskubernetes
How to Read Kubernetes SecretsHow to Read Kubernetes Secrets
So you’ve started using Kubernetes secrets. At some point, you’ll probably want to see the secret in plain text, either to validate it or use it in another context.
Tyler's profile picture TylerView
In these interests: kubernetes
People also read:
Install Apache Superset in a Kubernetes cluster
Obviously we’d call this “Supernetes”
As a Kubernetes user, I find that I often need to trigger a kubernetes cron job manually, outside of its schedule. Fortunately, since the release of Kubernetes 1.
There are many reasons you might want to copy Kubernetes secrets from one cluster to another. In recent months, I had to migrate to a new GKE cluster in order to get some new functionality.
Docker container health check
This guide will cover Docker health checks. First, we’ll talk about what health checks are and why they’re valuable, then will talk about implementation.
Continuous integration is pretty trendy, but despite that fact, it’s also pretty useful. This guide will show you how to set up your first project in CircleCI.
Docker secrets
Docker secrets is a secrets management tool designed for use with Docker Swarm. And of course, Docker Swarm refers to the cluster management and orchestration features built into the Docker Engine.
Posted in these interests:
kuberneteskubernetes
kubernetes
PRIMARY
It’s pronounced “koob-er-net-ees”.
devopsdevops
“If you think it’s expensive to hire a professional, wait until you hire an amateur.”
Discuss this guide:
We’re hiring!
Are you a passionate writer or editor? We want to hear from you!
We’re hiring!
Are you a passionate writer or editor? We want to hear from you!

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Tyler's profile pictureTyler
Joined in 2015
Software Engineer and creator of howchoo.
Related to this guide:
Use "kubectl cp" to Copy Files to and from Kubernetes PodsUse "kubectl cp" to Copy Files to and from Kubernetes Pods
If you’re using Kubernetes, you may find the need to move files to and from containers running on pods.
Tyler's profile picture TylerView
In these interests: kubernetes
Secure Your Sensitive Data with Kubernetes SecretsSecure Your Sensitive Data with Kubernetes Secrets
Learn how to create and use Kubernetes secrets
Tyler's profile picture TylerView
In these interests: codedevopskubernetes
How to Read Kubernetes SecretsHow to Read Kubernetes Secrets
So you’ve started using Kubernetes secrets. At some point, you’ll probably want to see the secret in plain text, either to validate it or use it in another context.
Tyler's profile picture TylerView
In these interests: kubernetes
People also read:
Install Apache Superset in a Kubernetes cluster
Obviously we’d call this “Supernetes”
As a Kubernetes user, I find that I often need to trigger a kubernetes cron job manually, outside of its schedule. Fortunately, since the release of Kubernetes 1.
There are many reasons you might want to copy Kubernetes secrets from one cluster to another. In recent months, I had to migrate to a new GKE cluster in order to get some new functionality.
Docker container health check
This guide will cover Docker health checks. First, we’ll talk about what health checks are and why they’re valuable, then will talk about implementation.
Continuous integration is pretty trendy, but despite that fact, it’s also pretty useful. This guide will show you how to set up your first project in CircleCI.
Docker secrets
Docker secrets is a secrets management tool designed for use with Docker Swarm. And of course, Docker Swarm refers to the cluster management and orchestration features built into the Docker Engine.
Posted in these interests:
kuberneteskubernetes
kubernetes
PRIMARY
It’s pronounced “koob-er-net-ees”.
devopsdevops
“If you think it’s expensive to hire a professional, wait until you hire an amateur.”
Discuss this guide:
We’re hiring!
Are you a passionate writer or editor? We want to hear from you!
We’re hiring!
Are you a passionate writer or editor? We want to hear from you!

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.

Want to support Howchoo? When you buy a tool or material through one of our Amazon links, we earn a small commission as an Amazon Associate.