Kubernetes Cheat Sheet r1v1
Kubernetes Cheat Sheet r1v1
Table of Contents
1. Introduction
Linux containers are a technology that allows you to package and isolate applications with
their entire runtime environment—all of the files necessary to run. This makes it easy to move
the contained application between environments (dev, test, production, etc.) while retaining
full functionality.
Containers package applications with the files on which they depend. This reduces the
friction between development and operations, simplifies application deployment, and
accelerates delivery cycles—allowing you to deliver value to customers faster.
• Container orchestrator
• Runs Linux containers
• Describe and launch containers
• Monitors and maintains container state
• Performs container oriented networking
Master(s) NODE(s)
Manage, build, deploy, & operate Run containers and registries
1
2. Installation
Add kubectl to your path. Note, you can simply copy it into a directory that is already in
your $PATH (e.g. /usr/local/bin). For example:
# Linux
$ sudo cp kubernetes/platforms/linux/amd64/kubectl /usr/local/bin/kubectl
# OS X
$ sudo cp kubernetes/platforms/darwin/amd64/kubectl /usr/local/bin/kubectl
2.B Administration
To administer and interact with any given Kubernetes cluster (local or remote), you must set
up your kubeconfig file. By default, kubectl configuration lives at ~/.kube/config
You can also create a cluster in your local machine via Minikube (See section 3: Running
Locally via Minikube)
current-context: federal-context
apiVersion: v1
clusters:
- cluster:
api-version: v1
server: http://cow.org:8080
name: cow-cluster
- cluster:
certificate-authority: path/to/my/cafile
server: https://horse.org:4443
name: horse-cluster
contexts:
- context:
cluster: horse-cluster
namespace: chisel-ns
user: green-user
name: federal-context
kind: Config
preferences:
colors: true
users:
- name: green-user
user:
client-certificate: path/to/my/client/cert
client-key: path/to/my/client/key
2
2.C You’ll need more than Kubernetes:
Kubernetes operates at the application level rather than at the hardware level, it provides
some generally applicable features common to PaaS offerings, such as deployment,
scaling, load balancing, logging, monitoring, etc.
• Networking
• Image registry
• Metrics and logging
• Complex deployments such as A/B and Blue/Green
• Application lifecycle management
• Application services such as database and messaging
• Self-service portal
• Container security
Much of this additional functionality is provided by the Red Hat OpenShift Container
Platform (which includes Kubernetes.)
Minikube is a tool that makes it easy to run Kubernetes locally --- it runs a single-node
Kubernetes cluster inside a virtual machine on your laptop. This is useful for users looking
to try out Kubernetes, or develop with it on a day-to-day basis.
3.A Prerequisites
Make sure if the setting is enabled where this command should output something.
3
Feel free to leave off the sudo mv minikube /usr/local/bin if you would like to add minikube to
your path manually.
# Linux/
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.12.2/minikube-
linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
# OS X
curl -Lo minikube https://storage.googleapis.com/minikube/releases/v0.12.2/minikube-
darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
You will need to download and install the kubectl client binary to run commands against the
cluster. For example:
# Linux/amd64
curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/
linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
# OS X/amd64
curl -Lo kubectl http://storage.googleapis.com/kubernetes-release/release/v1.3.0/bin/
darwin/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
Note that the IP below is dynamic and can change. It can be retrieved with minikube ip.
$ minikube start
Starting local Kubernetes cluster...
Running pre-create checks...
Creating machine...
Starting local Kubernetes cluster...
# We have now launched an echoserver pod but we have to wait until the pod is up before
curling/accessing it
# via the exposed service.
# To check whether the pod is up and running we can use the following:
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-3383150820-vctvh 1/1 ContainerCreating 0 3s
# We can see that the pod is still being created from the ContainerCreating status
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-minikube-3383150820-vctvh 1/1 Running 0 13s
# We can see that the pod is now Running and we will now be able to curl it:
$ curl $(minikube service hello-minikube --url)
CLIENT VALUES:
client_address=192.168.99.1
command=GET
real path=/
...
4
# To access the Kubernetes Dashboard, run this command in a shell after starting minikube
to get the address:
$ minikube dashboard
$ minikube stop
Stopping local Kubernetes cluster...
Stopping “minikube”...
4. kubectl CLI
• Command: Specifies the operation that you want to perform on one or more resources,
for example create, get, delete.
• Type: Specifies the resource type. Resource types are case-sensitive and you can
specify the singular, plural, or abbreviated forms.
• Name: Specifies the name of the resource. Names are case-sensitive. If the name is
omitted, details for all resources are displayed.
Creating Objects
# example my-rc.yaml file for creating a object based Replication Controller
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
# create resource(s)
$ kubectl create -f my-rc.yaml
replicationcontroller “nginx” created
5
Viewing, Finding Resources
# Get commands with basic output
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
{“kind”:”SerializedReference”,”apiVersion”:”v1”,”reference”:{“kind”:”ReplicationControl
ler”,”namespace”:”default”,”name”:”nginx”,”uid”:”01e01208-bb6a-11e6-a905-7eca61497d69”,
”apiVersion”:”v1”,”resourceVersion”:”58757”}}
creationTimestamp: 2016-12-06T04:11:05Z
generateName: nginx-
labels:
app: nginx
name: nginx-cmpmt
namespace: default
ownerReferences:
- apiVersion: v1
controller: true
kind: ReplicationController
name: nginx
uid: 01e01208-bb6a-11e6-a905-7eca61497d69
resourceVersion: “58815”
selfLink: /api/v1/namespaces/default/pods/nginx-cmpmt
uid: 01e10582-bb6a-11e6-a905-7eca61497d69
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx
ports:
- containerPort: 80
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: default-token-xxufg
readOnly: true
dnsPolicy: ClusterFirst
nodeName: minikube
restartPolicy: Always
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
volumes:
- name: default-token-xxufg
6
secret:
secretName: default-token-xxufg
status:
conditions:
- lastProbeTime: null
lastTransitionTime: 2016-12-06T04:11:05Z
status: “True”
type: Initialized
- lastProbeTime: null
lastTransitionTime: 2016-12-06T04:11:23Z
status: “True”
type: Ready
- lastProbeTime: null
lastTransitionTime: 2016-12-06T04:11:05Z
status: “True”
type: PodScheduled
containerStatuses:
- containerID:
docker://46cdf4314702cc368cf76b46d690134bc78e0de313eb324409fefe088753ed78
image: nginx
imageID: docker://
sha256:abf312888d132e461c61484457ee9fd0125d666672e22f972f3b8c9a0ed3f0a1
lastState: {}
name: nginx
ready: true
restartCount: 0
state:
running:
startedAt: 2016-12-06T04:11:23Z
hostIP: 192.168.99.100
phase: Running
podIP: 172.17.0.13
startTime: 2016-12-06T04:11:05Z
7
Volumes:
default-token-xxufg:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-xxufg
QoS Tier: BestEffort
# Add an annotation
$ kubectl annotate pods busybox-sleep icon-url=http://goo.gl/XXBTWq
pod “busybox-sleep” annotated
# Force replace, delete and then re-create the resource. Will cause a service outage
$ kubectl replace --force -f ./pod.json
# Create a service for a replicated nginx, which serves on port 80 and connects to the
containers on port 8000
$ kubectl expose rc nginx --port=80 --target-port=8000
Patching Resources
# Partially update a node
$ kubectl patch node k8s-node-1 -p ‘{“spec”:{“unschedulable”:true}}’
“k8s-node-1” patched
Editing Resources
# Edit the service named docker-registry
$ kubectl edit svc/docker-registry
service “docker-registry” edited
8
Scaling Resources
# Scale a replicaset named nginx-701339712 to 5
$ kubectl scale --replicas=5 rs/nginx-701339712
replicaset “nginx-701339712” scaled
Deleting Resources
# Delete a pod using the type and specific name
$ kubectl delete pod/nginx-701339712-tkuma
pod “nginx-701339712-tkuma” deleted
# Delete pods and services with same names “baz” and “foo”
$ kubectl delete pod,service baz foo
pod “baz” deleted
service “foo” deleted
9
# Dump current cluster state to stdout
$ kubectl cluster-info dump
10