Charmed Kubernetes on GCP
Charmed Kubernetes will run seamlessly on
Google Cloud Platform(GCP). With the addition of the gcp-integrator
,
your cluster will also be able to use GCP native features directly.
GCP Credentials
If you have set up a service account with IAM roles as your credential for Juju, there may be some additional authorisations you will need to make to access all features of GCP with Charmed Kubernetes.
If you have a GCP project set up specifically for Charmed Kubernetes, the
quickest route is to simply add the service account as an Owner
of that
project in the GCP console.
If you chose a more fine-grained approach to role administration, the service account should have at least:
- roles/compute.loadBalancerAdmin
- roles/compute.instanceAdmin.v1
- roles/compute.securityAdmin
- roles/iam.serviceAccountUser
A full description of the various pre-defined roles is available in the GCP Documentation.
GCP integrator
The gcp-integrator
charm simplifies working with Charmed Kubernetes on
GCP. Using the credentials provided to Juju, it acts as a proxy between
Charmed Kubernetes and the underlying cloud, granting permissions to
dynamically create, for example, storage volumes.
GCP K8S Storage
The gcp-k8s-storage
charm moves the GCP specific functions of the PD csi-driver
out-of-tree. Using this charm, the drivers are installed as workloads in the kubernetes
cluster instead of as natural code paths of the kubernetes binaries.
Installing
If you install Charmed Kubernetes using the Juju bundle, you can add the gcp-integrator at the same time by using the following overlay file (download it here):
As well as the storage overlay file (download it here):
To use these overlays with the Charmed Kubernetes bundle, it is specified during deploy like this:
... and remember to fetch the configuration file!
For more configuration options and details of the permissions which the integrator uses, please see the charm readme.
Using persistent storage
Many pods you may wish to deploy will require storage. Although you can use any type of storage supported by Kubernetes (see the storage documentation), you also have the option to use the native GCP storage types.
GCP storage currently comes in two types - SSD (pd-ssd) or ‘standard’(pd-standard). To use these, we need to create a storage classes in Kubernetes.
Beginning in Kubernetes 1.25
The gcp-k8s-storage
charm will need to be installed to make use of PD Volumes.
Google removed CSIMigration away from the in-tree binaries but made them available
as container workload in the cluster. This charm installs and relates to the
existing integrator charm.
A StorageClass will be created by this charm named csi-gce-pd-default
You can confirm this has been added by running:
which should return:
Prior to Kubernetes 1.25
First we need to create a storage class which can be used by Kubernetes. To start with, we will create one for the ‘General Purpose SSD’ type of EBS storage:
For the standard disks:
Or for SSD:
You can confirm this has been added by running:
which should return:
Creating a PVC
To actually create storage using this new class, you can make a Persistent Volume Claim:
This should finish with a confirmation. You can check the current PVCs with:
...which should return something similar to:
This PVC can then be used by pods operating in the cluster. As an example, the following
deploys a busybox
pod:
To set this type of storage as the default, you can use the command:
Using GCP Loadbalancers
With the gcp-integrator charm in place, actions which invoke a loadbalancer in Kubernetes will automatically generate a GCP Target Pool and the relevant forwarding rules. This can be demonstrated with a simple application. Here we will create a simple application and scale it to five pods:
You can verify that the application and replicas have been created with:
Which should return output similar to:
To create a target pool load balancer, the application should now be exposed as a service:
To check that the service is running correctly:
...which should return output similar to:
You can see that the LoadBalancer Ingress
is now associated with a new
ingress address in front of the five endpoints of the example deployment. You
can test this address:
Hello Kubernetes!
Upgrading the charms
The charm gcp-integrator
and gcp-k8s-storage
can be refreshed within the current charm channel without concern and
can be upgraded at any time with the following command,
It isn’t recommended to switch charm channels unless a full charm upgrade is planned.
Troubleshooting
If you have any specific problems with the gcp-integrator, you can report bugs on Launchpad.
Any activity in GCP can be monitored from the Operations console. If you are using a service account with IAM roles, it is relatively easy to see the actions that particular account is responsible for.
For logs of what the charm itself believes the world to look like, you can use Juju to replay the log history for that specific unit:
See the guide to contributing or discuss these docs in our public Mattermost channel.