在这份CKAD考试实操指南中,我将为你详细介绍如何利用CKAD-exercises项目和知十平台进行CKAD考试的准备和复习。通过CKAD-exercises提供的练习题,你可以在知十平台的云原生环境中进行实践和模拟。在这个过程中,你将熟悉Kubernetes的各种操作和场景,并在实践中加深对知识的理解。这种结合实践和理论的学习方式将为你在考试中取得优异成绩提供强有力的支持。
首先,打开浏览器,访问知十平台。在页面右上角点击“登录”,然后使用微信扫码登录即可。
在未登录状态下,每个环境只能体验15分钟,每天有5次机会使用。登录后,每个环境可用时长为1小时,每天登录也有5次的使用机会。
当选择好要进入环境后,通常只需要等待约一分钟左右,就能进入环境中。在等待期间,你可以浏览环境说明文档,了解该环境包含哪些组件及版本。
现在开始第一个主题----核心概念的实操
这里使用到官网的链接及访问路径如下:
kubernetes.io > Documentation > Reference > Command line tool (kubectl) > kubectl Cheat Sheet https://kubernetes.io/docs/reference/kubectl/cheatsheet/
kubernetes.io > Documentation > Tasks > Monitoring, Logging, and Debugging > Troubleshooting Applications > Get a Shell to a Running Container https://kubernetes.io/docs/tasks/debug/debug-application/get-shell-running-container/
kubernetes.io > Documentation > Tasks > Access Applications in a Cluster > Configure Access to Multiple Clusters https://kubernetes.io/docs/tasks/access-application-cluster/configure-access-multiple-clusters/
kubernetes.io > Documentation > Tasks > Access Applications in a Cluster > Accessing Clusters https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster/
kubernetes.io > Documentation > Tasks > Access Applications in a Cluster > Use Port Forwarding to Access Applications in a Cluster https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/
# 创建命名空间
kubectl create namespace mynamespace
# 创建pod
# nginx: 这是为创建的 Pod 指定的名称。
# --image=nginx: 使用 "nginx"最新的镜像来创建 Pod。
# --restart=Never: 这表明该 Pod 不会自动重新启动(Never),(即不具备自动恢复的能力)
# -n mynamespace: 使用自定义命名空间 "mynamespace" 来创建该 Pod
kubectl run nginx --image=nginx --restart=Never -n mynamespace
知识点:
注意:做此步骤时需要将之前产生的pod删除,否则会冲突kubectl delete po nginx -n mynamespace
# nginx: 这是为创建的 Pod 指定的名称。
# --image=nginx: 使用 "nginx" 最新镜像来创建 Pod。
# --restart=Never: 这表明该 Pod 不会重新启动(Never)。
# --dry-run=client: 这告诉 Kubernetes 在实际创建 Pod 之前只运行客户端验证,而不会真正地执行创建操作。
# -n mynamespace: 在命名空间 "mynamespace" 来创建该 Pod。
# -o yaml: 这指定输出格式为 YAML。
kubectl run nginx --image=nginx --restart=Never --dry-run=client -n mynamespace -o yaml > pod.yaml
kubectl create -f pod.yaml
#或者直接运行命令
kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml | kubectl create -n mynamespace -f -
知识点:
- --dry-run 参数有两个不同的选项。
- --dry-run=client: 当使用 --dry-run=client 参数时,kubectl 客户端会在本地执行模拟,并在客户端上生成资源配置的 YAML 文件,而不会与 Kubernetes API 服务器进行实际交互。这意味着在执行 --dry-run=client 模式时,Kubernetes API 服务器不会收到任何请求,并且不会创建或更改任何资源。kubectl 仅在本地模拟操作,并在终端输出生成的 YAML 配置。
- --dry-run=server: 当使用 --dry-run=server 参数时,kubectl 会向 Kubernetes API 服务器发送模拟请求,但并不会真正应用这些更改。服务器会验证配置文件的有效性,并返回可能的错误,但不会创建或更改资源。与 --dry-run=client 不同的是,--dry-run=server 允许 Kubernetes API 服务器参与模拟过程,但仍然不会对集群状态产生任何实际影响。
# busybox 这是您为创建的 Pod 指定的名称。
# --image=busybox: 使用 "busybox" 最新镜像来创建 Pod。
# --command 用于指定容器的启动命令及其参数
# --restart=Never: 这表明该 Pod 不会重新启动(Never)。
# -it: 进入交互式模式。
# -- env : 在容器中执行env命令。
kubectl run busybox --image=busybox --command --restart=Never -it -- env
# 查看日志
kubectl logs busybox
知识点:
这在需要自定义命令或覆盖默认命令时非常有用。
通常情况下,在容器内执行交互式命令或进入容器进行调试时,都会使用 -it 参数
注意:做此步骤时需要将之前产生的pod删除,否则会冲突kubectl delete po busybox
# create a YAML template with this command
# busybox 创建的 Pod 的名称。
# --image=busybox: 使用 "busybox" 最新镜像来创建 Pod。
# --restart=Never: 这表明该 Pod 不会重新启动(Never)。
# --dry-run=client:创建 Pod 之前只运行客户端验证,而不会真正地执行创建操作。
# -o yaml: 指定输出格式为 YAML
# --command 用于指定容器的启动命令及其参数
# -- env : 在容器中执行env命令。
# > envpod.yaml: 将命令输出重定向到名为 "envpod.yaml" 的文件中
kubectl run busybox --image=busybox --restart=Never --dry-run=client -o yaml --command -- env > envpod.yaml
# 查看yaml文件
cat envpod.yaml
#回显如下
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: busybox
name: busybox
spec:
containers:
- command:
- env
image: busybox
name: busybox
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}
# 应用yaml文件
kubectl apply -f envpod.yaml
# 查看busybox的日志
kubectl logs busybox
知识点:
# kubectl create: 运行 kubectl 命令的基本命令部分,用于在 Kubernetes 集群中创建资源。
# namespace: 要创建的资源类型,这里是命名空间。
# myns: 要创建的命名空间的名称,这里是 "myns"。
# -o yaml: 指定输出格式为 YAML。
# --dry-run=client: 这告诉 Kubernetes 在实际创建命名空间之前只运行客户端验证,而不会真正地执行创建操作。
kubectl create namespace myns -o yaml --dry-run=client
知识点:
# kubectl create quota: 运行 kubectl 命令的基本命令部分,用于在 Kubernetes 集群中创建资源配额。
# myrq: 这是要创建的资源配额的名称,这里是 "myrq"。
# --hard=cpu=1,memory=1G,pods=2: 这是配额的硬限制规则,指定了对 "cpu"(CPU 使用量)、"memory"(内存使用量)和 "pods"(Pod 数量)三种资源的限制。在这里,CPU 限制为 1 个核心,内存限制为 1GB,Pod 限制为 2 个。
# --dry-run=client: 这告诉 Kubernetes 在实际创建资源配额之前只运行客户端验证,而不会真正地执行创建操作。
# -o yaml: 指定输出格式为 YAML。
kubectl create quota myrq --hard=cpu=1,memory=1G,pods=2 --dry-run=client -o yaml
知识点:
# kubectl get: 运行 kubectl 命令的基本命令部分,用于获取 Kubernetes 集群中的资源信息。
# po: 这是要获取的资源类型,这里是 "Pod" 的缩写。
# --all-namespaces:这个参数告诉 kubectl 在所有命名空间中查询资源信息,而不仅仅是默认命名空间。
kubectl get po --all-namespaces
#或
kubectl get po -A
知识点:
# kubectl run: 运行 kubectl 命令的基本命令部分,用于在 Kubernetes 集群中创建资源。
# nginx: 这是要创建的资源名称,这里是 "nginx",这将是新创建 Pod 的名称。
# --image=nginx: 使用 "nginx" 镜像来创建 Pod。
# --restart=Never: 指定 Pod 的重启策略为 "Never",这意味着该 Pod 不会自动重新启动。
# --port=80: 在容器内部暴露 80 端口,这使得可以从集群内部访问 Pod 的 80 端口服务。
kubectl run nginx --image=nginx --restart=Never --port=80
知识点:
# kubectl set image: 运行 kubectl 命令的基本命令部分,用于更新容器镜像。
# pod/nginx: 要更新的 Pod 或 Deployment 的名称。这里的 pod 是资源类型,nginx 是资源对象的名称。
# nginx=nginx:1.7.1: 更新的容器名称和镜像版本。在这里,nginx 是容器的名称,nginx:1.7.1 是新的镜像版本。
kubectl set image pod/nginx nginx=nginx:1.7.1
#------以下命令为查看nginx容器状态的命令-------
# kubectl describe: 运行 kubectl 命令的基本命令部分,用于获取资源的详细信息。
# po: 这是要获取信息的资源类型,这里是 "pod" 的缩写,用于获取 Pod 相关的详细信息。
# nginx: 这是要获取信息的 Pod 的名称,将显示有关名为 "nginx" 的 Pod 的详细信息。
kubectl describe po nginx
# kubectl get: 运行 kubectl 命令的基本命令部分,用于获取资源信息。
# po: 这是要获取信息的资源类型,这里是 "pod" 的缩写,用于获取 Pod 相关的资源信息。
# nginx: 这是要获取信息的 Pod 的名称,将获取名为 "nginx" 的 Pod 的信息。
# -w: 这是 kubectl 命令的参数之一,表示开启实时监控模式(Watch Mode)。一旦执行该命令,kubectl 将持续监控资源的状态变化,并实时更新显示在终端上。
kubectl get po nginx -w
# kubectl get: 运行 kubectl 命令的基本命令部分,用于获取资源信息。
# po: 这是要获取信息的资源类型,这里是 "pod" 的缩写,用于获取 Pod 相关的资源信息。
# nginx: 这是要获取信息的 Pod 的名称,将获取名为 "nginx" 的 Pod 的信息。
# -o jsonpath='{.spec.containers[].image}{"\n"}': 这是 kubectl 命令的参数之一,用于指定输出格式为 JSON,并使用 JSONPath 表达式来提取 Pod 的容器镜像信息。{.spec.containers[].image} 表达式表示提取 Pod 的所有容器的镜像信息,而 {"\n"} 表示在每个镜像信息后添加换行符,使输出更清晰。
kubectl get po nginx -o jsonpath='{.spec.containers[].image}{"\n"}'
知识点:
注意:做此步骤时需要将之前产生的pod删除,否则会冲突kubectl delete po busybox
# 获取ip
# kubectl get: 运行 kubectl 命令的基本命令部分,用于获取资源信息。
# po: 这是要获取信息的资源类型,这里是 "pod" 的缩写,用于获取 Pod 相关的资源信息。
# -o wide: 表示以宽输出格式显示结果。它会在默认的输出信息(名称、状态、重启次数等)基础上,增加额外的列来显示更多信息,例如 IP 地址、节点、容器状态等。
kubectl get po -o wide
# 使用临时命令下载"/"目录
# kubectl run busybox: 使用 kubectl run 命令创建一个名为 "busybox" 的 Pod。
# --image=busybox: 指定创建的 Pod 使用 BusyBox 镜像.
# --rm: 这个参数表示在容器退出后自动删除该 Pod。因为这里使用 wget 命令来获取网页内容,获取后容器就会退出,使用 --rm 参数可以确保该 Pod 自动清理。
# -it: 这是两个参数的组合,表示以交互式终端的方式运行容器,使得可以在终端中与容器进行交互。
# --restart=Never: 指定该 Pod 的重启策略为 "Never",即当容器退出时不会重新启动。
#-- wget -O- x.x.x.x:80: 这是在 BusyBox 容器中执行的命令。wget 命令用于获取指定 URL 的内容,这里获取的 URL 是 x.x.x.x:80,并使用 -O- 参数将获取的内容输出到标准输出。
# 请将x.x.x.x,替换为上条命令中获取到的nginx的pod的ip
kubectl run busybox --image=busybox --rm -it --restart=Never -- wget -O- x.x.x.x:80
# kubectl get: 运行 kubectl 命令的基本命令部分,用于获取资源信息。
# po: 这是要获取信息的资源类型,这里是 "pod" 的缩写,用于获取 Pod 相关的资源信息。
# nginx: 这是要获取信息的 Pod 的名称,将获取名为 "nginx" 的 Pod 的信息。
# -o yaml: 表示以 YAML 格式显示结果。它会将获取到的 Pod 的详细信息以 YAML 格式输出到终端。-o就是--output的缩写
kubectl get po nginx -o yaml
# 或
kubectl get po nginx -oyaml
# 或
kubectl get po nginx --output yaml
# 或
kubectl get po nginx --output=yaml
# kubectl describe: 运行 kubectl 命令的基本命令部分,用于获取资源的详细信息。
# po: 这是要获取信息的资源类型,这里是 "pod" 的缩写,用于获取 Pod 相关的资源信息。
# nginx: 这是要获取信息的 Pod 的名称,将显示有关名为 "nginx" 的 Pod 的详细信息。
kubectl describe po nginx
知识点:
# kubectl logs: 运行 kubectl 命令的基本命令部分,用于获取 Pod 的日志。
# nginx: 这是要获取日志的 Pod 的名称,将显示名为 "nginx" 的 Pod 的日志。
kubectl logs nginx
知识点:
常用参数为-f和--all-containers,在使用 -f 参数时,可能会不断地输出新的日志内容,因此在某些情况下,您可能需要小心使用,以避免日志输出过多导致终端不可控。如果不带任何参数,默认输出pod中第一个容器截止到执行命令的时间点的日志。
kubectl logs nginx -p
# 或
kubectl logs nginx --previous
# kubectl exec: 用于在 Pod 中执行命令。
# -it: 这是两个参数的组合,表示以交互式终端的方式运行命令,使得可以在终端中与 Pod 的容器进行交互。
# nginx: 这是要在其上执行命令的 Pod 的名称,将在名为 "nginx" 的 Pod 中执行命令。、
# --: 这个分隔符表示命令选项的结束,后面的内容将被视为要在容器中执行的命令。
# /bin/sh: 这是要在容器中执行的 shell 命令。在这个例子中,我们执行的是 /bin/sh,也就是默认的 shell。
kubectl exec -it nginx -- /bin/sh
# kubectl run busybox: 使用 kubectl run 命令创建一个名为 "busybox" 的 Pod。
# --image=busybox: 指定创建的 Pod 使用 BusyBox 镜像,BusyBox 是一个轻量的 Linux 发行版,内含常用的工具。
# -it: 这是两个参数的组合,表示以交互式终端的方式运行容器,使得可以在终端中与容器进行交互。
# --restart=Never: 指定该 Pod 的重启策略为 "Never",即当容器退出时不会重新启动。
# -- echo 'hello world': 在 BusyBox 容器中执行的命令。在这里,我们使用 echo 命令来输出 "hello world" 到容器的标准输出。
kubectl run busybox --image=busybox -it --restart=Never -- echo 'hello world'
# 或
kubectl run busybox --image=busybox -it --restart=Never -- /bin/sh -c 'echo hello world'
知识点:
注意:做此步骤时需要将之前产生的pod删除,否则会冲突kubectl delete po busybox
# kubectl run busybox: 使用 kubectl run 命令创建一个名为 "busybox" 的 Pod。
# --image=busybox: 指定创建的 Pod 使用 BusyBox 镜像。
# -it: 这是两个参数的组合,表示以交互式终端的方式运行容器,使得可以在终端中与容器进行交互。
# --rm: 这个参数表示在容器退出后自动删除该 Pod。由于这里使用了 -it 参数,这个选项会在终端会话结束后删除创建的 Pod。
# --restart=Never: 指定该 Pod 的重启策略为 "Never",即当容器退出时不会重新启动。
# -- /bin/sh -c 'echo hello world': 在 BusyBox 容器中执行的命令。在这里,我们使用 /bin/sh -c 来执行一个 shell 命令,即 echo hello world,输出 "hello world" 到容器的标准输出。
kubectl run busybox --image=busybox -it --rm --restart=Never -- /bin/sh -c 'echo hello world'
kubectl get po
知识点:
注意:做此步骤时需要将之前产生的pod删除,否则会冲突kubectl delete po nginx
# kubectl run nginx: 使用 kubectl run 命令创建一个名为 "nginx" 的 Pod。
# --image=nginx: 指定创建的 Pod 使用 nginx 镜像,该镜像是一个开源的 Web 服务器和反向代理服务器。
# --restart=Never: 指定该 Pod 的重启策略为 "Never",即当容器退出时不会重新启动。
# --env=var1=val1: 这是一个设置环境变量的选项,用于将环境变量 var1 设置为 val1。通过该选项,我们可以在 Pod 中设置容器的环境变量。
kubectl run nginx --image=nginx --restart=Never --env=var1=val1
# ------------------以下命令为查看pod中环境变量------------------------------
# kubectl exec: 这是用于在 Kubernetes 中执行命令的主要命令部分。它允许您在 Pod 内的容器中执行命令。
# -it: 这是两个参数的组合,表示要以交互式终端的方式运行命令,使得可以在终端中与 Pod 的容器进行交互。
# nginx: 这是要在其上执行命令的 Pod 的名称。在这个例子中,命令将在名为 "nginx" 的 Pod 中执行。
# -- env: 这是在容器中要执行的实际命令。在这里,env 是一个常见的 Linux 命令,用于显示当前的环境变量。
kubectl exec -it nginx -- env
# 或
# -- sh -c 'echo $var1': 这是在容器中要执行的实际命令。sh -c 表示使用 shell 来执行命令。在这里,执行了 echo $var1,其中 $var1 是一个环境变量。
kubectl exec -it nginx -- sh -c 'echo $var1'
# 或
# kubectl describe po nginx: 获取名为 "nginx" 的 Pod 的详细信息的。describe 用于显示有关 Kubernetes 资源的详细信息,包括 Pod 的配置、状态、事件等。
# |: 管道符号,用于将 kubectl describe 命令的输出传递给下一个命令。
# grep val1: 过滤文本。grep 命令用于在输入中搜索包含指定模式(在这里是 "val1")的行,并将匹配的行输出到终端。
kubectl describe po nginx | grep val1
# -----------------------既包含创建pod赋予变量,也包含查看变量的命令---------------------------
# kubectl run nginx: 使用 kubectl run 命令创建一个名为 "nginx" 的 Pod。
# --restart=Never: 指定该 Pod 的重启策略为 "Never",即当容器退出时不会重新启动。
# --image=nginx: 指定创建的 Pod 使用 nginx 镜像,该镜像是一个开源的 Web 服务器和反向代理服务器。
# --env=var1=val1: 这是一个设置环境变量的选项,用于将环境变量 var1 设置为 val1。通过该选项,我们在 Pod 中设置容器的环境变量。
# -it: 这是两个参数的组合,表示以交互式终端的方式运行容器,使得可以在终端中与容器进行交互。
# --rm: 这个参数表示在容器退出后自动删除该 Pod。因为这里使用 kubectl run 来运行一个临时任务,使用 --rm 参数可以确保该 Pod 在任务完成后自动清理。
# -- env: 在容器中执行的命令。env 是 Linux 系统中用于查看当前环境变量的命令。该命令将列出当前在容器内部设置的所有环境变量。
kubectl run nginx --restart=Never --image=nginx --env=var1=val1 -it --rm -- env
知识点:
CKAD考试实操指南(一)---登顶CKAD:征服考试的完美蓝图-腾讯云开发者社区-腾讯云 (tencent.com)
CKAD考试实操指南(二)--- 深入核心:探秘Kubernetes核心实操秘技-腾讯云开发者社区-腾讯云 (tencent.com)
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。