summaryrefslogtreecommitdiff
path: root/kubernetes_cheat_sheet.md
blob: e6b00eb0bfeedc4e3c4f6302c60f1874aa9fa193 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# Kubernetes Cheat Sheet

## kubectl CLI

### Context

|                                      |                             |
|--------------------------------------|-----------------------------|
|`kubectl config current-context`      |Get the current context      |
|`kubectl config get-contexts`         |List all context             |
|`kubectl config use-context [contextName]`|Set the current context  |
|`kubectl config delete-context [contextName]`|Delete a context from the config file|

### Namespace

|                                      |                             |
|--------------------------------------|-----------------------------|
|`kubectl get namespace`               |List all namespaces          |
|`kubectl get ns`                      |Shortcut                     |
|`kubectl config set-context --current --namespace=[namespaceName]`|Set the current context to use a namespace|
|`kubectl create ns`                   |Create a namespace           |
|`kubectl delete ns`                   |Delete a namespace           |
|`kubectl get pods --all-namespaces`   |List all pods in all namespaces|

### Misc.

|                                      |                             |
|--------------------------------------|-----------------------------|
|`kubectl create -f [YAML file]`       |Create an object using YAML  |

---

### `kubectx`

- Separate program that acts as an alias for `kubectl config use-context`
    - *Fast way to switch between clusters and namespaces in kubectl*

---

### Declarative vs Imperative

#### Declarative Example - YAML File

```yaml
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
    type: front-end
spec:
  containers:
    name: nginx-container
    image: nginx
```

#### Imperative Example - Series of commands

```sh
kubectl run mynginx --image=nginx --port=80

kubectl create deploy mynginx --image=nginx --port=80 --replicas=3

kubectl create service nodeport myservice --targetPort=8080

kubectl delete pod nginx
```

### Pod definition - required properties

- Root level required properties
    - `apiVersion`
        - Api version of the object
    - `kind`
        - type of object
    - `metadata.name`
        - unique name for the object
    - `metadata.namespace`
        - scoped environment name (will default to current)
    - `spec`
        - object specifications or desired state

---

### Namespace Example

Namespace definition:

```yaml
apiVersion: v1
kind: Namespace
metadata:
  name: prod
```

Pod definition:

```yaml
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  namespace: prod
spec:
  containers:
    - name: nginx-container
    - image: nginx
```

---

### Other kinds of YAML definitions

#### NetworkPolicy Example

```yaml
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  namespace: clientb
  name: deny-from-other-namespaces
spec:
  podSelector:
    matchLabels:
  ingress:
  - from:
    - podSelector: {}
```

#### ResourceQuota Example

```yaml
apiVersion: v1
kind: ResourceQuota
metadata:
  name: compute-quota
  namespace: prod
spec:
  hard:
    pods: "10"
    limits.cpu: "5"
    limits.memory: 10Gi
```