├── chapter-01
├── custom-nginx
│ ├── index.html
│ └── Dockerfile
└── hello-server
│ ├── go.mod
│ ├── Dockerfile
│ └── main.go
├── chapter-11
├── namespace.yaml
├── hello-server.yaml
└── hello-server-destruction.yaml
├── README.md
├── kind
├── multinode-config.yaml
├── export-mapping.yaml
└── multinode-nodeport.yaml
├── chapter-10
├── kustomize
│ └── hello-server
│ │ ├── base
│ │ ├── kustomization.yaml
│ │ └── deployment.yaml
│ │ └── overlays
│ │ ├── staging
│ │ └── kustomization.yaml
│ │ └── production
│ │ ├── kustomization.yaml
│ │ ├── pdb.yaml
│ │ └── deployment.yaml
└── hello-server.yaml
├── chapter-04
├── nginx.yaml
└── myapp.yaml
├── chapter-07
├── pdb.yaml
├── pod-nodeselector.yaml
├── probe-sample.txt
├── pod-tolerations.yaml
├── pod-liveness.yaml
├── pod-topology.yaml
├── pod-readiness.yaml
├── pod-resource-handson.yaml
├── pdb-hello-server.yaml
├── pod-node-affinity.yaml
├── pod-nodeaffinity.yaml
├── pod-antiaffinity.yaml
├── deployment-memory-leak.yaml
├── deployment-schedule-handson.yaml
├── deployment-destruction.yaml
├── deployment-resource-handson.yaml
├── hello-server-node-handson.yaml
└── hpa-hello-server.yaml
├── hello-server
├── Dockerfile
├── go.mod
├── main.go
└── go.sum
├── chapter-05
├── pod-destruction.yaml
├── myapp.yaml
├── myapp-label.yaml
└── deployment.yaml
├── chapter-06
├── service.yaml
├── service-nodeport.yaml
├── service-destruction.yaml
├── job.yaml
├── cronjob.yaml
├── replicaset.yaml
├── deployment.yaml
├── deployment-hello-server.yaml
├── deployment-hello-server-rollingupdate.yaml
├── secret
│ ├── nginx-volume.yaml
│ └── nginx-sample.yaml
├── deployment-recreate.yaml
├── deployment-rollingupdate.yaml
├── configmap
│ ├── hello-server-env.yaml
│ ├── hello-server-volume.yaml
│ └── hello-server-destruction.yaml
└── cronjob-hello-server.yaml
├── kube-prometheus-stack
└── values.yaml
├── .github
└── workflows
│ └── build.yaml
├── chapter-09
└── hello-server.yaml
└── chapter-08
├── hello-server.yaml
├── handson-answer.yaml
└── hello-server-update.yaml
/chapter-01/custom-nginx/index.html:
--------------------------------------------------------------------------------
1 |
Hello World!
2 |
--------------------------------------------------------------------------------
/chapter-01/hello-server/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/bbf-kubernetes
2 |
3 | go 1.21
4 |
--------------------------------------------------------------------------------
/chapter-01/custom-nginx/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx:1.25.3
2 | COPY index.html /usr/share/nginx/html
3 |
--------------------------------------------------------------------------------
/chapter-11/namespace.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Namespace
3 | metadata:
4 | name: develop
5 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # bbf-kubernetes
2 | Repository for the book "Build, Breaking, Fixing: A Playful Way to Learn Kubernetes”
3 |
--------------------------------------------------------------------------------
/kind/multinode-config.yaml:
--------------------------------------------------------------------------------
1 | kind: Cluster
2 | apiVersion: kind.x-k8s.io/v1alpha4
3 | nodes:
4 | - role: control-plane
5 | - role: worker
6 | - role: worker
7 |
--------------------------------------------------------------------------------
/chapter-10/kustomize/hello-server/base/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 | resources:
4 | - deployment.yaml
5 |
--------------------------------------------------------------------------------
/chapter-10/kustomize/hello-server/overlays/staging/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 | resources:
4 | - ../../base
5 |
--------------------------------------------------------------------------------
/chapter-04/nginx.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: nginx
5 | spec:
6 | containers:
7 | - name: nginx
8 | image: nginx:1.25.3
9 | ports:
10 | - containerPort: 80
11 |
--------------------------------------------------------------------------------
/chapter-07/pdb.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: policy/v1
2 | kind: PodDisruptionBudget
3 | metadata:
4 | name: hello-server-pdb
5 | spec:
6 | minAvailable: 2
7 | selector:
8 | matchLabels:
9 | app: hello-server
10 |
--------------------------------------------------------------------------------
/chapter-07/pod-nodeselector.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: nginx
5 | spec:
6 | containers:
7 | - name: nginx
8 | image: nginx:1.25.3
9 | nodeSelector:
10 | disktype: ssd
11 |
--------------------------------------------------------------------------------
/hello-server/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM golang:1.21 AS builder
2 | WORKDIR /app
3 | COPY . .
4 | ENV CGO_ENABLED=0
5 | RUN go build -o hello .
6 |
7 | FROM scratch
8 | COPY --from=builder /app/hello /hello
9 | CMD ["/hello"]
10 |
--------------------------------------------------------------------------------
/chapter-10/kustomize/hello-server/overlays/production/kustomization.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: kustomize.config.k8s.io/v1beta1
2 | kind: Kustomization
3 | resources:
4 | - ../../base
5 | - pdb.yaml
6 | patches:
7 | - path: deployment.yaml
8 |
--------------------------------------------------------------------------------
/chapter-01/hello-server/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM golang:1.21 AS builder
2 | WORKDIR /app
3 | COPY . .
4 | ENV CGO_ENABLED=0
5 | RUN go build -o hello .
6 |
7 | FROM scratch
8 | COPY --from=builder /app/hello /hello
9 | CMD ["/hello"]
10 |
--------------------------------------------------------------------------------
/chapter-05/pod-destruction.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: myapp
5 | spec:
6 | containers:
7 | - name: hello-server
8 | image: blux2/hello-server:1.1
9 | ports:
10 | - containerPort: 8080
11 |
--------------------------------------------------------------------------------
/chapter-06/service.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | name: hello-server-service
5 | spec:
6 | selector:
7 | app: hello-server
8 | ports:
9 | - protocol: TCP
10 | port: 8080
11 | targetPort: 8080
12 |
13 |
--------------------------------------------------------------------------------
/kind/export-mapping.yaml:
--------------------------------------------------------------------------------
1 | kind: Cluster
2 | apiVersion: kind.x-k8s.io/v1alpha4
3 | nodes:
4 | - role: control-plane
5 | extraPortMappings:
6 | - containerPort: 30599
7 | hostPort: 30599
8 | listenAddress: "127.0.0.1"
9 | protocol: TCP
10 |
--------------------------------------------------------------------------------
/chapter-04/myapp.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: myapp
5 | labels:
6 | app: myapp
7 | spec:
8 | containers:
9 | - name: hello-server
10 | image: blux2/hello-server:1.0
11 | ports:
12 | - containerPort: 8080
13 |
--------------------------------------------------------------------------------
/chapter-05/myapp.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: myapp
5 | labels:
6 | app: myapp
7 | spec:
8 | containers:
9 | - name: hello-server
10 | image: blux2/hello-server:1.0
11 | ports:
12 | - containerPort: 8080
13 |
--------------------------------------------------------------------------------
/chapter-10/kustomize/hello-server/overlays/production/pdb.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: policy/v1
2 | kind: PodDisruptionBudget
3 | metadata:
4 | name: hello-server-pdb
5 | spec:
6 | maxUnavailable: 10%
7 | selector:
8 | matchLabels:
9 | app: hello-server
10 |
--------------------------------------------------------------------------------
/kube-prometheus-stack/values.yaml:
--------------------------------------------------------------------------------
1 | prometheus:
2 | prometheusSpec:
3 | additionalScrapeConfigs:
4 | - job_name: hello-server
5 | scrape_interval: 10s
6 | static_configs:
7 | - targets:
8 | - hello-server.develop.svc.cluster.local:8080
9 |
--------------------------------------------------------------------------------
/chapter-06/service-nodeport.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | name: hello-server-external
5 | spec:
6 | type: NodePort
7 | selector:
8 | app: hello-server
9 | ports:
10 | - port: 8080
11 | targetPort: 8080
12 | nodePort: 30599
13 |
--------------------------------------------------------------------------------
/chapter-05/myapp-label.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: myapp3
5 | namespace: default
6 | labels:
7 | app: myapp
8 | spec:
9 | containers:
10 | - name: hello-server
11 | image: blux2/hello-server:1.0
12 | ports:
13 | - containerPort: 8080
14 |
--------------------------------------------------------------------------------
/chapter-06/service-destruction.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: v1
3 | kind: Service
4 | metadata:
5 | name: hello-server-external
6 | spec:
7 | type: NodePort
8 | selector:
9 | app: hello-serve
10 | ports:
11 | - port: 8080
12 | targetPort: 8080
13 | nodePort: 30599
14 |
--------------------------------------------------------------------------------
/kind/multinode-nodeport.yaml:
--------------------------------------------------------------------------------
1 | kind: Cluster
2 | apiVersion: kind.x-k8s.io/v1alpha4
3 | nodes:
4 | - role: control-plane
5 | - role: worker
6 | extraPortMappings:
7 | - containerPort: 30599
8 | hostPort: 30599
9 | listenAddress: "127.0.0.1"
10 | protocol: TCP
11 | - role: worker
12 |
--------------------------------------------------------------------------------
/chapter-06/job.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: batch/v1
2 | kind: Job
3 | metadata:
4 | name: date-checker
5 | spec:
6 | template:
7 | spec:
8 | containers:
9 | - name: date
10 | image: ubuntu:22.04
11 | command: ["date"]
12 | restartPolicy: Never
13 | backoffLimit: 4
14 |
15 |
--------------------------------------------------------------------------------
/chapter-07/probe-sample.txt:
--------------------------------------------------------------------------------
1 | ## このマニフェストは単体で動きません
2 | readinessProbe:
3 | httpGet:
4 | path: /health
5 | port: 8080
6 | initialDelaySeconds: 10
7 | periodSeconds: 5
8 | livenessProbe:
9 | httpGet:
10 | path: /health
11 | port: 8080
12 | initialDelaySeconds: 30
13 | periodSeconds: 5
14 |
--------------------------------------------------------------------------------
/chapter-07/pod-tolerations.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: nginx
5 | spec:
6 | containers:
7 | - name: nginx
8 | image: nginx:1.25.3
9 | imagePullPolicy: IfNotPresent
10 | tolerations:
11 | - key: "disktype"
12 | value: "ssd"
13 | operator: "Equal"
14 | effect: "NoSchedule"
15 |
--------------------------------------------------------------------------------
/chapter-06/cronjob.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: batch/v1
2 | kind: CronJob
3 | metadata:
4 | name: date
5 | spec:
6 | schedule: "*/2 * * * *"
7 | jobTemplate:
8 | spec:
9 | template:
10 | spec:
11 | containers:
12 | - name: date
13 | image: ubuntu:22.04
14 | command: ["date"]
15 | restartPolicy: Never
16 |
--------------------------------------------------------------------------------
/chapter-07/pod-liveness.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | labels:
5 | app: httpserver
6 | name: httpserver-liveness
7 | spec:
8 | containers:
9 | - name: httpserver
10 | image: blux2/delayfailserver:1.1
11 | livenessProbe:
12 | httpGet:
13 | path: /healthz
14 | port: 8080
15 | initialDelaySeconds: 5
16 | periodSeconds: 5
17 |
--------------------------------------------------------------------------------
/chapter-07/pod-topology.yaml:
--------------------------------------------------------------------------------
1 | kind: Pod
2 | apiVersion: v1
3 | metadata:
4 | name: mypod
5 | labels:
6 | app: nginx
7 | spec:
8 | topologySpreadConstraints:
9 | - maxSkew: 1
10 | topologyKey: zone
11 | whenUnsatisfiable: DoNotSchedule
12 | labelSelector:
13 | matchLabels:
14 | app: nginx
15 | containers:
16 | - name: nginx
17 | image: nginx:1.25.3
18 |
--------------------------------------------------------------------------------
/chapter-07/pod-readiness.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | labels:
5 | app: httpserver
6 | name: httpserver-readiness
7 | spec:
8 | containers:
9 | - name: httpserver
10 | image: blux2/delayfailserver:1.1
11 | readinessProbe:
12 | httpGet:
13 | path: /healthz
14 | port: 8080
15 | initialDelaySeconds: 5
16 | periodSeconds: 5
17 |
--------------------------------------------------------------------------------
/chapter-10/kustomize/hello-server/overlays/production/deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hello-server
5 | spec:
6 | replicas: 10
7 | template:
8 | spec:
9 | containers:
10 | - name: hello-server
11 | resources:
12 | requests:
13 | memory: "1Gi"
14 | limits:
15 | memory: "1Gi"
16 |
--------------------------------------------------------------------------------
/chapter-07/pod-resource-handson.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | labels:
5 | app: hello-server
6 | name: hello-server
7 | spec:
8 | containers:
9 | - name: hello-server
10 | image: blux2/hello-server:1.6
11 | resources:
12 | requests:
13 | memory: "64Mi"
14 | cpu: "10m"
15 | limits:
16 | memory: "64Mi"
17 | cpu: "10m"
18 |
--------------------------------------------------------------------------------
/chapter-01/hello-server/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "log"
6 | "net/http"
7 | )
8 |
9 | func main() {
10 | http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
11 | fmt.Fprintf(w, "Hello, world!")
12 | })
13 |
14 | log.Println("Starting server on port 8080")
15 | err := http.ListenAndServe(":8080", nil)
16 | if err != nil {
17 | log.Fatal(err)
18 | }
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/chapter-06/replicaset.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: ReplicaSet
3 | metadata:
4 | name: httpserver
5 | labels:
6 | app: httpserver
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: httpserver
12 | template:
13 | metadata:
14 | labels:
15 | app: httpserver
16 | spec:
17 | containers:
18 | - name: nginx
19 | image: nginx:1.25.3
20 |
--------------------------------------------------------------------------------
/chapter-07/pdb-hello-server.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hello-server
5 | labels:
6 | app: hello-server
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: hello-server
12 | template:
13 | metadata:
14 | labels:
15 | app: hello-server
16 | spec:
17 | containers:
18 | - name: hello-server
19 | image: blux2/hello-server:1.8
20 |
--------------------------------------------------------------------------------
/chapter-06/deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: nginx-deployment
5 | labels:
6 | app: nginx
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: nginx
12 | template:
13 | metadata:
14 | labels:
15 | app: nginx
16 | spec:
17 | containers:
18 | - name: nginx
19 | image: nginx:1.24.0
20 | ports:
21 | - containerPort: 80
22 |
23 |
--------------------------------------------------------------------------------
/chapter-07/pod-node-affinity.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: node-affinity-pod
5 | spec:
6 | affinity:
7 | nodeAffinity:
8 | preferredDuringSchedulingIgnoredDuringExecution:
9 | - weight: 1
10 | preference:
11 | matchExpressions:
12 | - key: disktype
13 | operator: In
14 | values:
15 | - ssd
16 | containers:
17 | - name: node-affinity-pod
18 | image: nginx:1.25.3
19 |
--------------------------------------------------------------------------------
/chapter-07/pod-nodeaffinity.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: node-affinity-pod
5 | spec:
6 | affinity:
7 | nodeAffinity:
8 | preferredDuringSchedulingIgnoredDuringExecution:
9 | - weight: 1
10 | preference:
11 | matchExpressions:
12 | - key: disktype
13 | operator: In
14 | values:
15 | - ssd
16 | containers:
17 | - name: node-affinity-pod
18 | image: nginx:1.25.3
19 |
--------------------------------------------------------------------------------
/chapter-05/deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: my-deployment
5 | labels:
6 | app: hello-server
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: hello-server
12 | template:
13 | metadata:
14 | labels:
15 | app: hello-server
16 | spec:
17 | containers:
18 | - name: hello-server
19 | image: blux2/hello-server:1.0
20 | ports:
21 | - containerPort: 8080
22 |
23 |
--------------------------------------------------------------------------------
/chapter-06/deployment-hello-server.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hello-server
5 | labels:
6 | app: hello-server
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: hello-server
12 | template:
13 | metadata:
14 | labels:
15 | app: hello-server
16 | spec:
17 | containers:
18 | - name: hello-server
19 | image: blux2/hello-server:1.0
20 | ports:
21 | - containerPort: 8080
22 |
--------------------------------------------------------------------------------
/chapter-06/deployment-hello-server-rollingupdate.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hello-server
5 | labels:
6 | app: hello-server
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: hello-server
12 | template:
13 | metadata:
14 | labels:
15 | app: hello-server
16 | spec:
17 | containers:
18 | - name: hello-server
19 | image: blux2/hello-server:1.3
20 | ports:
21 | - containerPort: 8080
22 |
23 |
--------------------------------------------------------------------------------
/chapter-06/secret/nginx-volume.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: nginx-sample
5 | spec:
6 | containers:
7 | - name: nginx-container
8 | image: nginx:1.25.3
9 | volumeMounts:
10 | - name: nginx-secret
11 | mountPath: /etc/config
12 | volumes:
13 | - name: nginx-secret
14 | secret:
15 | secretName: nginx-secret
16 | ---
17 | apiVersion: v1
18 | kind: Secret
19 | metadata:
20 | name: nginx-secret
21 | data:
22 | server.key: ZU05a3UzZWNDcFVMOXpQb0lJdUcycHRaWkM1Q3U0WkNRWFJ5bWxIYWpZdlp5ZmZwTTYK
23 |
--------------------------------------------------------------------------------
/chapter-07/pod-antiaffinity.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Pod
3 | metadata:
4 | name: pod-anti-affinity
5 | labels:
6 | app: nginx
7 | spec:
8 | affinity:
9 | podAntiAffinity:
10 | preferredDuringSchedulingIgnoredDuringExecution:
11 | - weight: 100
12 | podAffinityTerm:
13 | labelSelector:
14 | matchExpressions:
15 | - key: app
16 | operator: In
17 | values:
18 | - nginx
19 | topologyKey: kubernetes.io/hostname
20 | containers:
21 | - name: nginx
22 | image: nginx:1.25.3
23 |
--------------------------------------------------------------------------------
/chapter-06/deployment-recreate.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: nginx-deployment
5 | labels:
6 | app: nginx
7 | spec:
8 | replicas: 10
9 | strategy:
10 | type: Recreate
11 | selector:
12 | matchLabels:
13 | app: nginx
14 | template:
15 | metadata:
16 | labels:
17 | app: nginx
18 | spec:
19 | containers:
20 | - name: nginx
21 | image: nginx:1.24.0
22 | ports:
23 | - containerPort: 80
24 | lifecycle:
25 | preStop:
26 | exec:
27 | command: ["/bin/sh", "-c", "sleep 10"]
28 |
--------------------------------------------------------------------------------
/hello-server/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/bbf-kubernetes
2 |
3 | go 1.21
4 |
5 | require github.com/prometheus/client_golang v1.17.0
6 |
7 | require (
8 | github.com/beorn7/perks v1.0.1 // indirect
9 | github.com/cespare/xxhash/v2 v2.2.0 // indirect
10 | github.com/golang/protobuf v1.5.3 // indirect
11 | github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
12 | github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect
13 | github.com/prometheus/common v0.44.0 // indirect
14 | github.com/prometheus/procfs v0.11.1 // indirect
15 | golang.org/x/sys v0.11.0 // indirect
16 | google.golang.org/protobuf v1.31.0 // indirect
17 | )
18 |
--------------------------------------------------------------------------------
/chapter-07/deployment-memory-leak.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hello-server
5 | labels:
6 | app: hello-server
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: hello-server
12 | template:
13 | metadata:
14 | labels:
15 | app: hello-server
16 | spec:
17 | containers:
18 | - name: hello-server
19 | image: blux2/hello-server:1.7
20 | ports:
21 | - containerPort: 8080
22 | resources:
23 | requests:
24 | memory: "100Mi"
25 | cpu: "10m"
26 | limits:
27 | memory: "100Mi"
28 | cpu: "10m"
29 |
--------------------------------------------------------------------------------
/chapter-06/secret/nginx-sample.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: v1
3 | kind: Pod
4 | metadata:
5 | name: nginx-sample
6 | spec:
7 | containers:
8 | - name: nginx-container
9 | image: nginx:1.25.3
10 | env:
11 | - name: USERNAME
12 | valueFrom:
13 | secretKeyRef:
14 | name: nginx-secret
15 | key: username
16 | - name: PASSWORD
17 | valueFrom:
18 | secretKeyRef:
19 | name: nginx-secret
20 | key: password
21 | ---
22 | apiVersion: v1
23 | kind: Secret
24 | metadata:
25 | name: nginx-secret
26 | type: Opaque
27 | data:
28 | username: YWRtaW4=
29 | password: YWRtaW4xMjM=
30 |
--------------------------------------------------------------------------------
/chapter-06/deployment-rollingupdate.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: nginx-deployment
5 | labels:
6 | app: nginx
7 | spec:
8 | strategy:
9 | type: RollingUpdate
10 | rollingUpdate:
11 | maxUnavailable: 25%
12 | maxSurge: 100%
13 | replicas: 10
14 | selector:
15 | matchLabels:
16 | app: nginx
17 | template:
18 | metadata:
19 | labels:
20 | app: nginx
21 | spec:
22 | containers:
23 | - name: nginx
24 | image: nginx:1.24.0
25 | ports:
26 | - containerPort: 80
27 | lifecycle:
28 | preStop:
29 | exec:
30 | command: ["/bin/sh", "-c", "sleep 10"]
31 |
--------------------------------------------------------------------------------
/chapter-06/configmap/hello-server-env.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: hello-server
6 | labels:
7 | app: hello-server
8 | spec:
9 | replicas: 1
10 | selector:
11 | matchLabels:
12 | app: hello-server
13 | template:
14 | metadata:
15 | labels:
16 | app: hello-server
17 | spec:
18 | containers:
19 | - name: hello-server
20 | image: blux2/hello-server:1.4
21 | env:
22 | - name: PORT
23 | valueFrom:
24 | configMapKeyRef:
25 | name: hello-server-configmap
26 | key: PORT
27 | ---
28 | apiVersion: v1
29 | kind: ConfigMap
30 | metadata:
31 | name: hello-server-configmap
32 | data:
33 | PORT: "8081"
34 |
--------------------------------------------------------------------------------
/chapter-06/configmap/hello-server-volume.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: hello-server
6 | labels:
7 | app: hello-server
8 | spec:
9 | replicas: 3
10 | selector:
11 | matchLabels:
12 | app: hello-server
13 | template:
14 | metadata:
15 | labels:
16 | app: hello-server
17 | spec:
18 | containers:
19 | - name: hello-server
20 | image: blux2/hello-server:1.5
21 | volumeMounts:
22 | - name: hello-server-config
23 | mountPath: /etc/config
24 | volumes:
25 | - name: hello-server-config
26 | configMap:
27 | name: hello-server-configmap
28 | ---
29 | apiVersion: v1
30 | kind: ConfigMap
31 | metadata:
32 | name: hello-server-configmap
33 | data:
34 | myconfig.txt: |-
35 | I am hungry.
36 |
--------------------------------------------------------------------------------
/chapter-07/deployment-schedule-handson.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hello-server
5 | labels:
6 | app: hello-server
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: hello-server
12 | template:
13 | metadata:
14 | labels:
15 | app: hello-server
16 | spec:
17 | affinity:
18 | podAntiAffinity:
19 | requiredDuringSchedulingIgnoredDuringExecution:
20 | - labelSelector:
21 | matchExpressions:
22 | - key: app
23 | values:
24 | - hello-server
25 | operator: In
26 | topologyKey: kubernetes.io/hostname
27 | containers:
28 | - name: hello-server
29 | image: blux2/hello-server:1.8
30 | ports:
31 | - containerPort: 8080
32 |
--------------------------------------------------------------------------------
/chapter-10/kustomize/hello-server/base/deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hello-server
5 | labels:
6 | app: hello-server
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: hello-server
12 | template:
13 | metadata:
14 | labels:
15 | app: hello-server
16 | spec:
17 | containers:
18 | - name: hello-server
19 | image: blux2/hello-server:1.8
20 | resources:
21 | requests:
22 | memory: "256Mi"
23 | cpu: "10m"
24 | limits:
25 | memory: "256Mi"
26 | readinessProbe:
27 | httpGet:
28 | path: /health
29 | port: 8080
30 | initialDelaySeconds: 5
31 | periodSeconds: 5
32 | livenessProbe:
33 | httpGet:
34 | path: /health
35 | port: 8080
36 | initialDelaySeconds: 10
37 | periodSeconds: 5
38 |
--------------------------------------------------------------------------------
/chapter-07/deployment-destruction.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hello-server
5 | labels:
6 | app: hello-server
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: hello-server
12 | template:
13 | metadata:
14 | labels:
15 | app: hello-server
16 | spec:
17 | containers:
18 | - name: hello-server
19 | image: blux2/hello-server:1.6
20 | ports:
21 | - containerPort: 8080
22 | readinessProbe:
23 | httpGet:
24 | path: /health
25 | port: 8081
26 | initialDelaySeconds: 5
27 | periodSeconds: 5
28 | livenessProbe:
29 | httpGet:
30 | path: /health
31 | port: 8080
32 | initialDelaySeconds: 10
33 | periodSeconds: 5
34 | - name: busybox
35 | image: busybox:1.36.1
36 | command:
37 | - sleep
38 | - "9999"
39 |
40 |
--------------------------------------------------------------------------------
/hello-server/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "github.com/prometheus/client_golang/prometheus/promhttp"
6 | "log"
7 | "net/http"
8 | "os"
9 | )
10 |
11 | func main() {
12 | port := os.Getenv("PORT")
13 | if port == "" {
14 | port = "8080"
15 | }
16 |
17 | http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
18 | if r.URL.Path != "/" {
19 | http.NotFound(w, r)
20 | return
21 | }
22 | fmt.Fprintf(w, "Hello, world! Let's learn Kubernetes!")
23 | })
24 |
25 | http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) {
26 | if r.URL.Path != "/healthz" {
27 | http.NotFound(w, r)
28 | return
29 | }
30 | w.WriteHeader(http.StatusOK)
31 | fmt.Fprintf(w, "OK")
32 | log.Printf("Health Status OK")
33 | })
34 |
35 | http.Handle("/metrics", promhttp.Handler())
36 |
37 | log.Printf("Starting server on port %s\n", port)
38 | err := http.ListenAndServe(":"+port, nil)
39 | if err != nil {
40 | log.Fatal(err)
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/chapter-06/configmap/hello-server-destruction.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: hello-server
6 | labels:
7 | app: hello-server
8 | spec:
9 | strategy:
10 | type: RollingUpdate
11 | rollingUpdate:
12 | maxSurge: 0
13 | replicas: 1
14 | selector:
15 | matchLabels:
16 | app: hello-server
17 | template:
18 | metadata:
19 | labels:
20 | app: hello-server
21 | spec:
22 | containers:
23 | - name: hello-server
24 | image: blux2/hello-server:1.4
25 | env:
26 | - name: PORT
27 | valueFrom:
28 | configMapKeyRef:
29 | name: hello-server-configmap
30 | key: PORT
31 | - name: HOST
32 | valueFrom:
33 | configMapKeyRef:
34 | name: hello-server-configmap
35 | key: HOST
36 | ---
37 | apiVersion: v1
38 | kind: ConfigMap
39 | metadata:
40 | name: hello-server-configmap
41 | data:
42 | PORT: "8081"
43 |
--------------------------------------------------------------------------------
/chapter-07/deployment-resource-handson.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hello-server
5 | labels:
6 | app: hello-server
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: hello-server
12 | template:
13 | metadata:
14 | labels:
15 | app: hello-server
16 | spec:
17 | containers:
18 | - name: hello-server
19 | image: blux2/hello-server:1.6
20 | ports:
21 | - containerPort: 8080
22 | resources:
23 | requests:
24 | memory: "5Gi"
25 | cpu: "10m"
26 | limits:
27 | memory: "5Gi"
28 | cpu: "10m"
29 | readinessProbe:
30 | httpGet:
31 | path: /health
32 | port: 8080
33 | initialDelaySeconds: 5
34 | periodSeconds: 5
35 | livenessProbe:
36 | httpGet:
37 | path: /health
38 | port: 8080
39 | initialDelaySeconds: 10
40 | periodSeconds: 5
41 |
--------------------------------------------------------------------------------
/chapter-07/hello-server-node-handson.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hello-server
5 | labels:
6 | app: hello-server
7 | spec:
8 | replicas: 3
9 | selector:
10 | matchLabels:
11 | app: hello-server
12 | template:
13 | metadata:
14 | labels:
15 | app: hello-server
16 | spec:
17 | affinity:
18 | podAntiAffinity:
19 | requiredDuringSchedulingIgnoredDuringExecution:
20 | - labelSelector:
21 | matchExpressions:
22 | - key: app
23 | values:
24 | - hello-server
25 | operator: In
26 | topologyKey: kubernetes.io/hostname
27 | containers:
28 | - name: hello-server
29 | image: blux2/hello-server:1.8
30 | ports:
31 | - containerPort: 8080
32 | ---
33 | apiVersion: policy/v1
34 | kind: PodDisruptionBudget
35 | metadata:
36 | name: hello-server-pdb
37 | spec:
38 | maxUnavailable: 10%
39 | selector:
40 | matchLabels:
41 | app: hello-server
42 |
--------------------------------------------------------------------------------
/.github/workflows/build.yaml:
--------------------------------------------------------------------------------
1 | name: build
2 |
3 | on:
4 | push:
5 | tags:
6 | - "*"
7 |
8 | jobs:
9 | build:
10 | runs-on: ubuntu-latest
11 |
12 | steps:
13 | - name: Checkout repository
14 | uses: actions/checkout@v3
15 |
16 | # Add support for more platforms with QEMU (optional)
17 | # https://github.com/docker/setup-qemu-action
18 | - name: Set up QEMU
19 | uses: docker/setup-qemu-action@v2
20 |
21 | - name: Set up Docker Buildx
22 | uses: docker/setup-buildx-action@v2
23 |
24 | - name: Login to DockerHub
25 | uses: docker/login-action@v2
26 | with:
27 | username: ${{ secrets.DOCKERHUB_USERNAME }}
28 | password: ${{ secrets.DOCKERHUB_TOKEN }}
29 |
30 | - name: Build and push multi-arch images
31 | uses: docker/build-push-action@v3
32 | with:
33 | push: true
34 | platforms: linux/amd64,linux/arm64
35 | tags: blux2/hello-server:${{ github.ref_name }}
36 | context: ./hello-server
37 | file: ./hello-server/Dockerfile
38 | no-cache: true
39 |
--------------------------------------------------------------------------------
/chapter-10/hello-server.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: hello-server
6 | labels:
7 | app: hello-server
8 | spec:
9 | replicas: 3
10 | selector:
11 | matchLabels:
12 | app: hello-server
13 | template:
14 | metadata:
15 | labels:
16 | app: hello-server
17 | spec:
18 | containers:
19 | - name: hello-server
20 | image: blux2/hello-server:1.8
21 | resources:
22 | requests:
23 | memory: "256Mi"
24 | cpu: "10m"
25 | limits:
26 | memory: "256Mi"
27 | readinessProbe:
28 | httpGet:
29 | path: /health
30 | port: 8080
31 | initialDelaySeconds: 5
32 | periodSeconds: 5
33 | livenessProbe:
34 | httpGet:
35 | path: /health
36 | port: 8080
37 | initialDelaySeconds: 10
38 | periodSeconds: 5
39 | ---
40 | apiVersion: policy/v1
41 | kind: PodDisruptionBudget
42 | metadata:
43 | name: hello-server-pdb
44 | spec:
45 | maxUnavailable: 10%
46 | selector:
47 | matchLabels:
48 | app: hello-server
49 |
--------------------------------------------------------------------------------
/chapter-06/cronjob-hello-server.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: hello-server
6 | labels:
7 | app: hello-server
8 | spec:
9 | replicas: 3
10 | selector:
11 | matchLabels:
12 | app: hello-server
13 | template:
14 | metadata:
15 | labels:
16 | app: hello-server
17 | spec:
18 | containers:
19 | - name: hello-server
20 | image: blux2/hello-server:1.0
21 | ports:
22 | - containerPort: 8080
23 | ---
24 | apiVersion: v1
25 | kind: Service
26 | metadata:
27 | name: hello-server-service
28 | spec:
29 | selector:
30 | app: hello-server
31 | ports:
32 | - protocol: TCP
33 | port: 8080
34 | targetPort: 8080
35 | ---
36 | apiVersion: batch/v1
37 | kind: CronJob
38 | metadata:
39 | name: ping
40 | spec:
41 | schedule: "*/1 * * * *"
42 | jobTemplate:
43 | spec:
44 | template:
45 | spec:
46 | containers:
47 | - name: ping
48 | image: curlimages/curl
49 | command:
50 | - sh
51 | - -c
52 | args:
53 | - curl -s -v hello-server-service.default.svc.cluster.local:8081
54 | restartPolicy: OnFailure
55 |
--------------------------------------------------------------------------------
/chapter-11/hello-server.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | namespace: develop
6 | name: hello-server
7 | labels:
8 | app: hello-server
9 | spec:
10 | replicas: 3
11 | selector:
12 | matchLabels:
13 | app: hello-server
14 | template:
15 | metadata:
16 | labels:
17 | app: hello-server
18 | spec:
19 | containers:
20 | - name: hello-server
21 | image: blux2/hello-server:2.3
22 | resources:
23 | requests:
24 | memory: "256Mi"
25 | cpu: "10m"
26 | limits:
27 | memory: "256Mi"
28 | cpu: "10m"
29 | readinessProbe:
30 | httpGet:
31 | path: /healthz
32 | port: 8080
33 | initialDelaySeconds: 5
34 | periodSeconds: 5
35 | livenessProbe:
36 | httpGet:
37 | path: /healthz
38 | port: 8080
39 | initialDelaySeconds: 10
40 | periodSeconds: 5
41 | ---
42 | apiVersion: v1
43 | kind: Service
44 | metadata:
45 | namespace: develop
46 | name: hello-server
47 | spec:
48 | type: NodePort
49 | selector:
50 | app: hello-server
51 | ports:
52 | - port: 8080
53 | targetPort: 8080
54 |
--------------------------------------------------------------------------------
/chapter-11/hello-server-destruction.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | namespace: develop
6 | name: hello-server
7 | labels:
8 | app: hello-server
9 | spec:
10 | replicas: 3
11 | selector:
12 | matchLabels:
13 | app: hello-server
14 | template:
15 | metadata:
16 | labels:
17 | app: hello-server
18 | spec:
19 | containers:
20 | - name: hello-server
21 | image: blux2/hello-server:2.4.1
22 | resources:
23 | requests:
24 | memory: "256Mi"
25 | cpu: "10m"
26 | limits:
27 | memory: "256Mi"
28 | cpu: "10m"
29 | readinessProbe:
30 | httpGet:
31 | path: /healthz
32 | port: 8080
33 | initialDelaySeconds: 5
34 | periodSeconds: 5
35 | livenessProbe:
36 | httpGet:
37 | path: /healthz
38 | port: 8080
39 | initialDelaySeconds: 10
40 | periodSeconds: 5
41 | ---
42 | apiVersion: v1
43 | kind: Service
44 | metadata:
45 | namespace: develop
46 | name: hello-server
47 | spec:
48 | type: NodePort
49 | selector:
50 | app: hello-server
51 | ports:
52 | - port: 8080
53 | targetPort: 8080
54 |
--------------------------------------------------------------------------------
/chapter-07/hpa-hello-server.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: hpa-handson
5 | labels:
6 | app: hello-server
7 | spec:
8 | selector:
9 | matchLabels:
10 | app: hello-server
11 | template:
12 | metadata:
13 | labels:
14 | app: hello-server
15 | spec:
16 | containers:
17 | - name: hello-server
18 | image: blux2/hello-server:1.8
19 | ports:
20 | - containerPort: 8080
21 | resources:
22 | requests:
23 | memory: "10Mi"
24 | cpu: "5m"
25 | limits:
26 | memory: "10Mi"
27 | cpu: "5m"
28 | ---
29 | apiVersion: autoscaling/v2
30 | kind: HorizontalPodAutoscaler
31 | metadata:
32 | name: hello-server-hpa
33 | spec:
34 | minReplicas: 1
35 | maxReplicas: 10
36 | metrics:
37 | - resource:
38 | name: cpu
39 | target:
40 | averageUtilization: 50
41 | type: Utilization
42 | type: Resource
43 | scaleTargetRef:
44 | apiVersion: apps/v1
45 | kind: Deployment
46 | name: hpa-handson
47 | ---
48 | apiVersion: v1
49 | kind: Service
50 | metadata:
51 | name: hello-server-service
52 | spec:
53 | selector:
54 | app: hello-server
55 | ports:
56 | - protocol: TCP
57 | port: 8080
58 | targetPort: 8080
59 |
--------------------------------------------------------------------------------
/chapter-09/hello-server.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: hello-server
6 | labels:
7 | app: hello-server
8 | spec:
9 | replicas: 3
10 | selector:
11 | matchLabels:
12 | app: hello-server
13 | template:
14 | metadata:
15 | labels:
16 | app: hello-server
17 | spec:
18 | containers:
19 | - name: hello-server
20 | image: blux2/hello-server:1.8
21 | resources:
22 | requests:
23 | memory: "256Mi"
24 | cpu: "10m"
25 | limits:
26 | memory: "256Mi"
27 | cpu: "10m"
28 | readinessProbe:
29 | httpGet:
30 | path: /health
31 | port: 8080
32 | initialDelaySeconds: 5
33 | periodSeconds: 5
34 | livenessProbe:
35 | httpGet:
36 | path: /health
37 | port: 8080
38 | initialDelaySeconds: 10
39 | periodSeconds: 5
40 | ---
41 | apiVersion: policy/v1
42 | kind: PodDisruptionBudget
43 | metadata:
44 | name: hello-server-pdb
45 | spec:
46 | maxUnavailable: 10%
47 | selector:
48 | matchLabels:
49 | app: hello-server
50 | ---
51 | apiVersion: v1
52 | kind: Service
53 | metadata:
54 | name: hello-server-external
55 | spec:
56 | type: NodePort
57 | selector:
58 | app: hello-server
59 | ports:
60 | - port: 8080
61 | targetPort: 8080
62 | nodePort: 30599
63 |
--------------------------------------------------------------------------------
/chapter-08/hello-server.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: hello-server
6 | labels:
7 | app: hello-server
8 | spec:
9 | replicas: 3
10 | selector:
11 | matchLabels:
12 | app: hello-server
13 | template:
14 | metadata:
15 | labels:
16 | app: hello-server
17 | spec:
18 | affinity:
19 | podAntiAffinity:
20 | preferredDuringSchedulingIgnoredDuringExecution:
21 | - weight: 1
22 | podAffinityTerm:
23 | labelSelector:
24 | matchExpressions:
25 | - key: app
26 | values:
27 | - hello-server
28 | operator: In
29 | topologyKey: kubernetes.io/hostname
30 | containers:
31 | - name: hello-server
32 | image: blux2/hello-server:1.8
33 | env:
34 | - name: PORT
35 | valueFrom:
36 | configMapKeyRef:
37 | name: hello-server-configmap
38 | key: PORT
39 | resources:
40 | requests:
41 | memory: "256Mi"
42 | cpu: "10m"
43 | limits:
44 | memory: "256Mi"
45 | cpu: "10m"
46 | readinessProbe:
47 | httpGet:
48 | path: /health
49 | port: 8081
50 | initialDelaySeconds: 5
51 | periodSeconds: 5
52 | livenessProbe:
53 | httpGet:
54 | path: /health
55 | port: 8081
56 | initialDelaySeconds: 10
57 | periodSeconds: 5
58 | ---
59 | apiVersion: v1
60 | kind: ConfigMap
61 | metadata:
62 | name: hello-server-configmap
63 | data:
64 | PORT: "8081"
65 | HOST: "localhost"
66 | ---
67 | apiVersion: v1
68 | kind: Service
69 | metadata:
70 | name: hello-server-external
71 | spec:
72 | type: NodePort
73 | selector:
74 | app: hello-server
75 | ports:
76 | - port: 8081
77 | targetPort: 8081
78 | nodePort: 30599
79 | ---
80 | apiVersion: policy/v1
81 | kind: PodDisruptionBudget
82 | metadata:
83 | name: hello-server-pdb
84 | spec:
85 | maxUnavailable: 10%
86 | selector:
87 | matchLabels:
88 | app: hello-server
89 |
--------------------------------------------------------------------------------
/chapter-08/handson-answer.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: hello-server
6 | labels:
7 | app: hello-server
8 | spec:
9 | replicas: 3
10 | selector:
11 | matchLabels:
12 | app: hello-server
13 | template:
14 | metadata:
15 | labels:
16 | app: hello-server
17 | spec:
18 | affinity:
19 | podAntiAffinity:
20 | preferredDuringSchedulingIgnoredDuringExecution:
21 | - weight: 1
22 | podAffinityTerm:
23 | labelSelector:
24 | matchExpressions:
25 | - key: app
26 | values:
27 | - hello-server
28 | operator: In
29 | topologyKey: kubernetes.io/hostname
30 | containers:
31 | - name: hello-server
32 | image: blux2/hello-server:2.0.1
33 | env:
34 | - name: PORT
35 | valueFrom:
36 | configMapKeyRef:
37 | name: hello-server-configmap
38 | key: PORT
39 | resources:
40 | requests:
41 | memory: "256Mi"
42 | cpu: "10m"
43 | limits:
44 | memory: "256Mi"
45 | cpu: "10m"
46 | readinessProbe:
47 | httpGet:
48 | path: /healthz
49 | port: 8082
50 | initialDelaySeconds: 5
51 | periodSeconds: 5
52 | livenessProbe:
53 | httpGet:
54 | path: /healthz
55 | port: 8082
56 | initialDelaySeconds: 10
57 | periodSeconds: 5
58 | ---
59 | apiVersion: v1
60 | kind: ConfigMap
61 | metadata:
62 | name: hello-server-configmap
63 | data:
64 | PORT: "8082"
65 | HOST: "localhost"
66 | ---
67 | apiVersion: v1
68 | kind: Service
69 | metadata:
70 | name: hello-server-external
71 | spec:
72 | type: NodePort
73 | selector:
74 | app: hello-server
75 | ports:
76 | - port: 8082
77 | targetPort: 8082
78 | nodePort: 30599
79 | ---
80 | apiVersion: policy/v1
81 | kind: PodDisruptionBudget
82 | metadata:
83 | name: hello-server-pdb
84 | spec:
85 | maxUnavailable: 10%
86 | selector:
87 | matchLabels:
88 | app: hello-server
89 |
--------------------------------------------------------------------------------
/chapter-08/hello-server-update.yaml:
--------------------------------------------------------------------------------
1 | ---
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: hello-server
6 | labels:
7 | app: hello-server
8 | spec:
9 | replicas: 3
10 | selector:
11 | matchLabels:
12 | app: hello-server
13 | template:
14 | metadata:
15 | labels:
16 | app: hello-server
17 | spec:
18 | affinity:
19 | podAntiAffinity:
20 | preferredDuringSchedulingIgnoredDuringExecution:
21 | - weight: 1
22 | podAffinityTerm:
23 | labelSelector:
24 | matchExpressions:
25 | - key: app
26 | values:
27 | - hello-server
28 | operator: In
29 | topologyKey: kubernetes.io/hostname
30 | containers:
31 | - name: hello-server
32 | image: blux2/hello-server:2.0.1
33 | env:
34 | - name: PORT
35 | valueFrom:
36 | configMapKeyRef:
37 | name: hello-server-configmap
38 | key: PORT
39 | resources:
40 | requests:
41 | memory: "256Mi"
42 | cpu: "10m"
43 | limits:
44 | memory: "256Mi"
45 | cpu: "10m"
46 | readinessProbe:
47 | httpGet:
48 | path: /health
49 | port: 8081
50 | initialDelaySeconds: 5
51 | periodSeconds: 5
52 | livenessProbe:
53 | httpGet:
54 | path: /health
55 | port: 8081
56 | initialDelaySeconds: 10
57 | periodSeconds: 5
58 | ---
59 | apiVersion: v1
60 | kind: ConfigMap
61 | metadata:
62 | name: hello-server-configmap
63 | data:
64 | PORT: "8082"
65 | HOST: "localhost"
66 | ---
67 | apiVersion: v1
68 | kind: Service
69 | metadata:
70 | name: hello-server-external
71 | spec:
72 | type: NodePort
73 | selector:
74 | app: hello-server
75 | ports:
76 | - port: 8081
77 | targetPort: 8081
78 | nodePort: 30599
79 | ---
80 | apiVersion: policy/v1
81 | kind: PodDisruptionBudget
82 | metadata:
83 | name: hello-server-pdb
84 | spec:
85 | maxUnavailable: 10%
86 | selector:
87 | matchLabels:
88 | app: hello-server
89 |
--------------------------------------------------------------------------------
/hello-server/go.sum:
--------------------------------------------------------------------------------
1 | github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
2 | github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
3 | github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
4 | github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
5 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
6 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
7 | github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
8 | github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
9 | github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
10 | github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
11 | github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
12 | github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
13 | github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
14 | github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
15 | github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
16 | github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
17 | github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
18 | github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM=
19 | github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
20 | github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
21 | github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
22 | github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
23 | github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY=
24 | golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
25 | golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
26 | golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
27 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
28 | google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
29 | google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
30 | google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
31 | google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
32 |
--------------------------------------------------------------------------------