Skip to content

Commit

Permalink
New API version, more tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
jonasbjoralt committed Sep 9, 2024
1 parent 3801b54 commit d73d6a1
Show file tree
Hide file tree
Showing 5 changed files with 103 additions and 5 deletions.
1 change: 0 additions & 1 deletion .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ name: Docker
on:
workflow_dispatch:
push:
branches: [ "main" ]
# Publish semver tags as releases.
tags: [ 'v*.*.*' ]
pull_request:
Expand Down
65 changes: 63 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@
Sørg for å ha følgende installert:
- Docker, containerd, eller podman: `brew install docker`
- kubectl `brew install kubectl`
- minikube `brew install minikube`
- [Eller finn instrukser for Windows og Linux her](https://minikube.sigs.k8s.io/docs/start/?arch=/linux/x86-64/stable/binary+download)
- minikube `brew install minikube`
- [Eller finn instrukser for Windows og Linux her](https://minikube.sigs.k8s.io/docs/start/?arch=/linux/x86-64/stable/binary+download)

Start clusteret:
```
Expand Down Expand Up @@ -144,7 +146,66 @@ Voila!
# Pause

# Del 3: Mer robusthet, Oppdateringer
## 2.1 Gjøre ting
## 3.1 - Recap og test
Hittil har vi laget en deployment med én pod, og bruk service og ingress til å gjøre denne synlig på `api.local`

Vi har funnet swagger på `http://api.local/swagger`

Nå må vi følge litt med på hva som skjer.
**I en ny terminal**, kjør følgende:
```
watch -n 0.5 kubectl get pod -o wide
```

Denne vil kjøre `kubectl get pod -o wide` hvert halve sekund, så du får en live-ish oppdatering av hva som skjer.

Har du ikke gjort det enda, så er det på tide å teste `/experimental` - endepunktet. Åpne swagger og kjør den. Go ahead. Se hva som skjer når du tester i prod.

## 3.2 - Liveness og readinessProbes
Ups.. Nå funker ikke APIet, men kubernetes tror det funker fordi appen ikke har krasjet.
For å be kubernetes om å følge med litt, la oss sette opp **liveness og readinessProbes**

Legg til følgende seksjoner i yaml-filen til deploymentet ditt, som en del av container-oppsettet:
```
livenessProbe:
httpGet:
path: #F eks /health eller noe sånt
port: 8080
periodSeconds: #Sekunder mellom hver test
initialDelaySeconds: #Hvor lenge den venter før første test. Utviklerne sa noe om 'Make It Work, Make It Beautiful, Make It Fast'... Ville gitt den _minst_ 10 sekunder for å si det sånn
readinessProbe:
# Samme innhold som over
```

Bruk endringene via:
```
kubectl apply -f <yaml-fil>
```

Merk at den nå plutselig tar ned poden og setter på en ny en.

Prøv å spam /info etter du har brukt /experimental, og se hvordan ting utartert seg.

### Bonus: startupProbe
Kanskje utviklerne faktisk rekker å 'Make It Fast' før produkteieren vil ha nye nytt ut innen i morgen.
I stedet for en laaaang, konstant initialDelay, prøv å kopier 'livenessProbe'-en og kall den `startupProbe`.

Kanskje ting går fortere neste gang vi oppdaterer?

## 3.2 - Skaler
Vi trenger visst enda mer robusthet.

Skaler appen din enten via kommandolinja, eller yaml:
Kommando:
```
kubectl scale --replicas 3 deployments/simple-api-deployment
```

eller i yaml ved å endre på 'replicas' feltet og bruke `kubectl apply` som før.




- Sette på readiness- og livenessProbes
- Oppdater til neste versjon. Denne krever tilkobling til DB og failer derfor
- Her kan man eventuelt velge å bruke en strategi som canary eller blue/green
Expand Down
3 changes: 2 additions & 1 deletion ressurser/simple-api/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
if (isHealthy)
return new
{
newField = "Some new field",
favoriteLunch,
machineName
};
Expand Down Expand Up @@ -50,6 +51,6 @@

// This app requires some time to get started.
// Maybe you should use a readiness-probe?
Thread.Sleep(10000);
Thread.Sleep(3000);

app.Run();
2 changes: 1 addition & 1 deletion ressurser/yaml-eksempler/deploy-basic.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ metadata:
app: simple-api
name: simple-api-deployment
spec:
replicas: 2
replicas: 1
selector:
matchLabels:
app: simple-api
Expand Down
37 changes: 37 additions & 0 deletions ressurser/yaml-eksempler/deploy-complete.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: simple-api
name: simple-api-deployment
spec:
replicas: 3
selector:
matchLabels:
app: simple-api
template:
metadata:
creationTimestamp: null
labels:
app: simple-api
spec:
containers:
- image: "ghcr.io/varianter/k8s-101:v1.0.1"
name: api
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /health
port: 8080
periodSeconds: 3
initialDelaySeconds: 12
readinessProbe:
httpGet:
path: /health
port: 8080
periodSeconds: 1
initialDelaySeconds: 5
resources: {}
status: {}

0 comments on commit d73d6a1

Please sign in to comment.