ckad练习题-observability
Observability (18%)
Defining a Pod’s Readiness and Liveness Probe
- Create a new Pod named
hello
with the imagebonomat/nodejs-hello-world
that exposes the port 3000. Provide the namenodejs-port
for the container port. - Add a Readiness Probe that checks the URL path / on the port referenced with the name
nodejs-port
after a 2 seconds delay. You do not have to define the period interval. - Add a Liveness Probe that verifies that the app is up and running every 8 seconds by checking the URL path / on the port referenced with the name
nodejs-port
. The probe should start with a 5 seconds delay. - Shell into container and curl
localhost:3000
. Write down the output. Exit the container. - Retrieve the logs from the container. Write down the output.
Solution:
Create the intial YAML with the following command.
kubectl run hello --image=bonomat/nodejs-hello-world --restart=Never --port=3000 -o yaml --dry-run > pod.yaml
Edit the YAML file and add the probes.
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: hello name: hello spec: containers: - image: bonomat/nodejs-hello-world name: hello ports: - name: nodejs-port containerPort: 3000 readinessProbe: httpGet: path: / port: nodejs-port initialDelaySeconds: 2 livenessProbe: httpGet: path: / port: nodejs-port initialDelaySeconds: 5 periodSeconds: 8 resources: {} dnsPolicy: ClusterFirst restartPolicy: Never status: {}
Create the Pod from the YAML file, shell into the Pod as soon as it is running and execute the curl
command.
$ kubectl create -f pod.yaml pod/hello created $ kubectl exec hello -it -- /bin/sh / # curl localhost:3000 <!DOCTYPE html> <html> <head> <title>NodeJS Docker Hello World</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="http://cdn.bootcss.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet"> <link href="/stylesheets/styles.css" rel="stylesheet"> </head> <body> <div class="container"> <div class="well well-sm"> <h2>This is just a hello world message</h2> <img a href="./cage.jpg"/> <img src="src/cage.jpg" alt="Smiley face" width="640"> </div> </div> </body> </html> / # exit $ kubectl logs pod/hello Magic happens on port 3000
Fixing a Misconfigured Pod
- Create a new Pod with the following YAML.
apiVersion: v1 kind: Pod metadata: creationTimestamp: null labels: run: failing-pod name: failing-pod spec: containers: - args: - /bin/sh - -c - while true; do echo $(date) >> ~/tmp/curr-date.txt; sleep 5; done; image: busybox name: failing-pod resources: {} dnsPolicy: ClusterFirst restartPolicy: Never status: {}
- Check the Pod's status. Do you see any issue?
- Follow the logs of the running container and identify an issue.
- Fix the issue by shelling into the container. After resolving the issue the current date should be written to a file. Render the output.
Solution:
First, create the Pod with the given YAML content.
$ vim pod.yaml
$ kubectl create -f pod.yaml
The Pod seems to be running without problems.
$ kubectl get pods NAME READY STATUS RESTARTS AGE failing-pod 1/1 Running 0 5s
Render the logs of the container. The output should indicate an error message every 5 seconds.
$ kubectl logs failing-pod Unable to write file! /bin/sh: 1: cannot create /root/tmp/curr-date.txt: Directory nonexistent Unable to write file! /bin/sh: 1: cannot create /root/tmp/curr-date.txt: Directory nonexistent Unable to write file! /bin/sh: 1: cannot create /root/tmp/curr-date.txt: Directory nonexistent
Apparently, the directory we want to write to does not exist. Log into the container and create the directory. The file ~/tmp/curr-date.txt
is populated.
$ kubectl exec failing-pod -it -- /bin/sh / # mkdir -p ~/tmp / # cd ~/tmp / # ls -l total 4 -rw-r--r-- 1 root root 112 May 9 23:52 curr-date.txt / # cat ~/tmp/curr-date.txt Thu May 9 23:59:01 UTC 2019 Thu May 9 23:59:06 UTC 2019 Thu May 9 23:59:11 UTC 2019 / # exit
分类:
k8s
, cloud native
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix