Skip to content

Commit

Permalink
Add a couple of Kubernetes questions and exercises
Browse files Browse the repository at this point in the history
In addition, changed the order of some Linux questions.
  • Loading branch information
abregman committed Sep 4, 2021
1 parent e4f73b1 commit 891c9c6
Show file tree
Hide file tree
Showing 7 changed files with 474 additions and 165 deletions.
423 changes: 259 additions & 164 deletions README.md

Large diffs are not rendered by default.

5 changes: 4 additions & 1 deletion exercises/kubernetes/replicaset_01.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,7 @@ Learn how to create and view ReplicaSets

1. Create a ReplicaSet with 2 replicas. The app can be anything.
2. Verify a ReplicaSet was created and there are 2 replicas
3. Remove the ReplicaSet you've created
3. Delete one of the Pods the ReplicaSet has created
4. If you'll list all the Pods now, what will you see?
5. Remove the ReplicaSet you've created
6. Verify you've deleted the ReplicaSet
12 changes: 12 additions & 0 deletions exercises/kubernetes/replicaset_02.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
## ReplicaSet 102

#### Objective

Learn how to operate ReplicaSets

#### Instructions

1. Create a ReplicaSet with 2 replicas. The app can be anything.
2. Verify a ReplicaSet was created and there are 2 replicas
3. Remove the ReplicaSet but NOT the pods it created
4. Verify you've deleted the ReplicaSet but the Pods are still running
14 changes: 14 additions & 0 deletions exercises/kubernetes/replicaset_03.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
## ReplicaSet 103

#### Objective

Learn how labels used by ReplicaSets

#### Instructions

1. Create a ReplicaSet with 2 replicas. Make sure the label used for the selector and in the Pods is "type=web"
2. Verify a ReplicaSet was created and there are 2 replicas
3. List the Pods running
4. Remove the label (type=web) from one of the Pods created by the ReplicaSet
5. List the Pods running. Are there more Pods running after removing the label? Why?
6. Verify the ReplicaSet indeed created a new Pod
62 changes: 62 additions & 0 deletions exercises/kubernetes/solutions/replicaset_01_solution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
## ReplicaSet 01 - Solution

1. Create a ReplicaSet with 2 replicas. The app can be anything.

```
cat >> rs.yaml <<EOL
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: web
labels:
app: somewebapp
type: web
spec:
replicas: 2
selector:
matchLabels:
type: web
template:
metadata:
labels:
type: web
spec:
containers:
- name: httpd
image: registry.redhat.io/rhscl/httpd-24-rhel7
EOL
kubectl apply -f rs.yaml
```

2. Verify a ReplicaSet was created and there are 2 replicas

```
kubectl get rs
# OR a more specific way: kubectl get -f rs.yaml
```

3. Delete one of the Pods the ReplicaSet has created

```
kubectl delete po <POD_NAME>
```

4. If you'll list all the Pods now, what will you see?

```
The same number of Pods. Since we defined 2 replicas, the ReplicaSet will make sure to create another Pod that will replace the one you've deleted.
```

5. Remove the ReplicaSet you've created

```
kubectl delete -f rs.yaml
```

6. Verify you've deleted the ReplicaSet

```
kubectl get rs
# OR a more specific way: kubectl get -f rs.yaml
```
62 changes: 62 additions & 0 deletions exercises/kubernetes/solutions/replicaset_02_solution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
## ReplicaSet 02 - Solution

1. Create a ReplicaSet with 2 replicas. The app can be anything.

```
cat >> rs.yaml <<EOL
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: web
labels:
app: somewebapp
type: web
spec:
replicas: 2
selector:
matchLabels:
type: web
template:
metadata:
labels:
type: web
spec:
containers:
- name: httpd
image: registry.redhat.io/rhscl/httpd-24-rhel7
EOL
kubectl apply -f rs.yaml
```

2. Verify a ReplicaSet was created and there are 2 replicas

```
kubectl get rs
# OR a more specific way: kubectl get -f rs.yaml
```

3. Remove the ReplicaSet but NOT the pods it created

```
kubectl delete -f rs.yaml --cascade=false
```

4. Verify you've deleted the ReplicaSet but the Pods are still running

```
kubectl get rs # no replicas
kubectl get po # Pods still running
```

5. Create again the same ReplicaSet, without changing anything

```
kubectl apply -f rs.yaml
```

6. Verify that the ReplicaSet used the existing Pods and didn't create new Pods

```
kubectl describe rs web # You should see there are no new events and if you list the pods with 'kubectl get po -f rs.yaml` you'll see they have the same names
```
61 changes: 61 additions & 0 deletions exercises/kubernetes/solutions/replicaset_03_solution.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
## ReplicaSet 03 - Solution

1. Create a ReplicaSet with 2 replicas. Make sure the label used for the selector and in the Pods is "type=web"

```
cat >> rs.yaml <<EOL
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: web
labels:
app: somewebapp
type: web
spec:
replicas: 2
selector:
matchLabels:
type: web
template:
metadata:
labels:
type: web
spec:
containers:
- name: httpd
image: registry.redhat.io/rhscl/httpd-24-rhel7
EOL
kubectl apply -f rs.yaml
```

2. Verify a ReplicaSet was created and there are 2 replicas

```
kubectl get rs
# OR a more specific way: kubectl get -f rs.yaml
```

3. List the Pods running and save the output somewhere

```
kubectl get po > running_pods.txt
```

4. Remove the label (type=web) from one of the Pods created by the ReplicaSet

```
kubectl label pod <POD_NAME> type-
```

5. List the Pods running. Are there more Pods running after removing the label? Why?

```
Yes, there is an additional Pod running because once the label, used as a matching selector, was removed, the Pod became independant meaning, it's not controlled by the ReplicaSet anymore and the ReplicaSet was missing replicas based on its definition so, it created a new Pod.
```

6. Verify the ReplicaSet indeed created a new Pod

```
kubectl describe rs web
```

0 comments on commit 891c9c6

Please sign in to comment.