Files
client-go/examples/create-update-delete-deployment
John Kelly 4e80b27156 client-go: Update CRUD example
This updates the create-update-delete-deployment example with the following:
Add rollback step to demonstrate rolling back deployments with client-go.
Modify the for-loops used in both Update steps to Get() the latest version
of the Deployment from the server before attempting Update().
This is necessary because the object returned by Create() does
not have the new resourceVersion, causing the initial Update() to always fail
due to conflicting resource versions. Putting the Get() at the top of the
loop seems to fix this bug.
Make -kubeconfig flag optional if config is in default location, using the
same method found in the out-of-cluster example.

Patch is motivated by effort to improve client-go examples.

Signed-off-by: John Kelly <jekohk@gmail.com>

Kubernetes-commit: ce73088a718c30d8a3577f5d0521584b9c201e69
2017-10-04 18:01:49 -04:00
..
2017-10-12 13:52:10 -07:00
2017-10-04 18:01:49 -04:00
2017-10-04 18:01:49 -04:00

Create, Update & Delete Deployment

This example program demonstrates the fundamental operations for managing on Deployment resources, such as Create, List, Update and Delete.

You can adopt the source code from this example to write programs that manage other types of resources through the Kubernetes API.

Running this example

Make sure you have a Kubernetes cluster and kubectl is configured:

kubectl get nodes

Compile this example on your workstation:

cd create-update-delete-deployment
go build -o ./app

Now, run this application on your workstation with your local kubeconfig file:

./app
# or specify a kubeconfig file with flag
./app -kubeconfig=$HOME/.kube/config

Running this command will execute the following operations on your cluster:

  1. Create Deployment: This will create a 2 replica Deployment with annotation fizz=buzz. Verify with kubectl get pods.
  2. Update Deployment: This will update the Deployment resource created in previous step to set the replica count to 1 and update annotations. You are encouraged to inspect the retry loop that handles conflicts. Verify the new replica count and foo=bar annotation with kubectl describe deployment demo.
  3. Rollback Deployment: This will rollback the Deployment to the last revision, in this case the revision created in Step 1. Use kubectl describe to verify the original annotation fizz=buzz. Also note the replica count is still 1; this is because a Deployment revision is created if and only if the Deployment's pod template (.spec.template) is changed.
  4. List Deployments: This will retrieve Deployments in the default namespace and print their names and replica counts.
  5. Delete Deployment: This will delete the Deployment object and its dependent ReplicaSet resource. Verify with kubectl get deployments.

Each step is separated by an interactive prompt. You must hit the Return key to proceeed to the next step. You can use these prompts as a break to take time to run kubectl and inspect the result of the operations executed.

You should see an output like the following:

Creating deployment...
Created deployment "demo-deployment".
-> Press Return key to continue.

Updating deployment...
Updated deployment...
-> Press Return key to continue.

Rolling back deployment...
Rolled back deployment...
-> Press Return key to continue.

Listing deployments in namespace "default":
 * demo-deployment (1 replicas)
-> Press Return key to continue.

Deleting deployment...
Deleted deployment.

Cleanup

Successfully running this program will clean the created artifacts. If you terminate the program without completing, you can clean up the created deployment with:

kubectl delete deploy demo-deployment

Troubleshooting

If you are getting the following error, make sure Kubernetes version of your cluster is v1.6 or above in kubectl version:

panic: the server could not find the requested resource