Building and Running the Ansible Operator
Before running the Operator, Kubernetes needs to know about the new custom resource definition the Operator will be watching. Deploy the memcached Custom Resource Definition:
kubectl create -f config/crd/bases/cache.example.com_memcacheds.yaml
This command creates a new resource type, called memcached
. Your Operator responds to the creation and modification of resources of this type.
With the CRD created, you can run the Operator either as a Pod inside a Kubernetes cluster, or in a testing mode as a Go program on your local system. This exercise tests the Operator locally, outside of the Kubernetes cluster.
Copying Roles for local development
It is important that the Role path referenced in watches.yaml exists on your machine. To run the Operator locally, copy any Roles it uses to a configured Ansible Roles path for your local machine (e.g. /opt/ansible/roles
).
mkdir -p /opt/ansible/roles
cp -r roles/dymurray.memcached_operator_role /opt/ansible/roles/
Running the Operator
Create a new namespace called tutorial
and set kubectl
to use it by default. The Operator will watch Custom Resources only within this namespace.
kubectl create namespace tutorial
kubectl config set-context --current --namespace=tutorial
Start the Operator with make's run
target:
WATCH_NAMESPACE=tutorial make run
Because the running Operator will block I/O in its terminal, open a new terminal window, tab or session and change to the tutorial directory.
Now that the Operator is running, create a CR to have the Operator deploy an instance of memcached. The Operator SDK generated a sample CR in the project scaffolding. Inspect config/samples/cache_v1alpha1_memcached.yaml
, then update it to specify 3 replicas by replacing foo: bar
with size: 3
:
apiVersion: cache.example.com/v1alpha1
kind: Memcached
metadata:
name: memcached-sample
spec:
size: 3
Now, create the CR. The Operator should notice it as a watched resource and begin deploying the 3 replicas of memcached.
kubectl --namespace tutorial create -f config/samples/cache_v1alpha1_memcached.yaml
Ensure that the memcached-operator creates the deployment for the CR by running kubectl get deployment
Check the pods to confirm 3 replicas were created by running kubectl get pods
.
Change the Memcached CR to deploy 4 replicas
Change the spec.size
field in config/samples/cache_v1alpha1_memcached.yaml
from 3 to 4.
apiVersion: cache.example.com/v1alpha1
kind: Memcached
metadata:
name: memcached-sample
spec:
size: 4
And apply the change to the desired number of replicas on the cluster:
kubectl --namespace tutorial apply -f config/samples/cache_v1alpha1_memcached.yaml
Confirm that the Operator changes the Deployment size with another invocation of kubectl get deployment
.
Inspect the YAML list of memcached
resources in the tutorial
namespace, noting that the spec.size
field is now set to 4.
kubectl get memcached -o yaml
Removing Memcached from the cluster
First, delete the memcached
CR, which will trigger removal of the 4 Memcached Pods and the Deployment to which they belong:
kubectl --namespace tutorial delete -f config/samples/cache_v1alpha1_memcached.yaml
Verify the memcached CR and deployment have been properly removed.
kubectl get memcached
kubectl get deployment
kubectl get pods