This is an Advanced StatefulSet CRD implementation based on official StatefulSet in Kubernetes 1.16.0.
This is an experimental project.
In addition to official StatefulSet, it adds one feature:
- Scale in at an arbitrary position: kubernetes/kubernetes#83224
curl -Lo ./kind https://github.com/kubernetes-sigs/kind/releases/download/v0.6.1/kind-$(uname)-amd64
chmod +x ./kind
./kind create cluster --image kindest/node:v1.16.3 --config hack/kindconfig.v1.16.3.yaml --name advanced-statefulset
export KUBECONFIG=$(kind get kubeconfig-path --name advanced-statefulset)
kubectl apply -f deployment/crd.v1.yaml
Open a new terminal and run controller:
hack/local-up.sh
kubectl apply -f examples/statefulset.yaml
Note that --resource-version
is required for CRD objects.
RESOURCE_VERSION=$(kubectl get statefulsets.pingcap.com web -ojsonpath='{.metadata.resourceVersion}')
kubectl scale --resource-version=$RESOURCE_VERSION --replicas=4 statefulsets.pingcap.com web
RESOURCE_VERSION=$(kubectl get statefulsets.pingcap.com web -ojsonpath='{.metadata.resourceVersion}')
kubectl scale --resource-version=$RESOURCE_VERSION --replicas=3 statefulsets.pingcap.com web
We should set delete-slots
annotations and decrement spec.replicas
at the
same time.
kubectl apply -f examples/scale-in-statefulset.yaml