Memcached Operator

by  Kubestack

The Memcached operator provisions and configures Memcached in-memory cache clusters on Kubernetes. Memcached is an in-memory key-value store for small chunks of arbitrary data (strings, objects) from results of database calls, API calls, or page rendering.

TL;DR:

  • Installing, updating or removing follows Kubestack's GitOps flow.
  • Instructions assume the default repository layout.
  • Bases can be consumed as-is or customized.
  • Step-by-step instructions are framework specific but bases can be used independently.

Install

  1. Vendor the base

    # Run these commands from the root of your Kubestack infra repository
    wget https://storage.googleapis.com/catalog.kubestack.com/memcached-v0.2.1-kbst.2.zip
    unzip -d manifests/bases/ memcached-v0.2.1-kbst.2.zip
    rm memcached-v0.2.1-kbst.2.zip
  2. Include resource in apps overlay

    cd manifests/overlays/apps
    kustomize edit add resource ../../bases/memcached/clusterwide
  3. Commit and push

    cd -
    git checkout -b add-memcached
    git add manifests/bases/memcached manifests/overlays/apps/kustomization.yaml
    git commit -m "Add memcached v0.2.1-kbst.2 base"
    git push origin add-memcached
  4. Review PR and merge

    Finally, review and merge the PR into master. Once it's been successfully applied against the Ops-Cluster set a prod-deploy tag to also apply the change against the Apps-Cluster.

Update

To update the operator delete the previously vendored base and then vendor the new version.

  1. Delete the previous vendored version

    # Run these commands from the root of your Kubestack infra repository
    rm -r manifests/bases/memcached
  2. Vendor the new version

    # Run these commands from the root of your Kubestack infra repository
    wget https://storage.googleapis.com/catalog.kubestack.com/memcached-v0.2.1-kbst.2.zip
    unzip -d manifests/bases/ memcached-v0.2.1-kbst.2.zip
    rm memcached-v0.2.1-kbst.2.zip
  3. Commit and push

    git checkout -b update-memcached
    git add manifests/bases/memcached
    git commit -m "Update memcached base to v0.2.1-kbst.2"
    git push origin update-memcached

Remove

Operators often create resources based on custom objects. When removing an operator, follow a two-step process to ensure operator provisioned resources are purged properly.

  1. Remove all the operator's custom objects.
  2. Once the operator had time to de-provision all resources it created, follow the instructions below to remove the operator itself.
  1. Remove resource from apps overlay

    cd manifests/overlays/apps
    kustomize edit remove resource ../../bases/memcached/clusterwide
  2. Delete the vendored base from your repository

    cd -
    # Run these commands from the root of your Kubestack infra repository
    rm -r manifests/bases/memcached
  3. Commit and push

    git checkout -b remove-memcached
    git add manifests/bases/memcached
    git commit -m "Remove memcached base"
    git push origin remove-memcached

Usage

Once the operator has been deployed to the Kubernetes cluster, you can use it to provision and operate one or more Memcache clusters by creating a custom object.

Memcached Custom Object

Below is an example of a Memcached resource to instruct the operator to provision a Memcache cluster consisting of one mcrouter and two memcached replicas.

To get started, put the example below into a file called Memcached.yaml and add it to your application's manifests. Then apply the manifests including the Memcached.yaml as usual.

apiVersion: kubestack.com/v1
kind: Memcached
metadata:
name: memc
namespace: default
spec:
mcrouter:
replicas: 1
mcrouter_limit_cpu: "100m"
mcrouter_limit_memory: "64Mi"
memcached:
replicas: 2
memcached_limit_cpu: "50m"
memcached_limit_memory: "128Mi"