一、实操核心概念

在这份CKAD考试实操指南中,我将为你详细介绍如何利用CKAD-exercises项目和知十平台进行CKAD考试的准备和复习。通过CKAD-exercises提供的练习题,你可以在知十平台的云原生环境中进行实践和模拟。在这个过程中,你将熟悉Kubernetes的各种操作和场景,并在实践中加深对知识的理解。这种结合实践和理论的学习方式将为你在考试中取得优异成绩提供强有力的支持。

首先,打开浏览器,访问知十平台。在页面右上角点击“登录”,然后使用微信扫码登录即可。

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_CKAD

在未登录状态下,每个环境只能体验15分钟,每天有5次机会使用。登录后,每个环境可用时长为1小时,每天登录也有5次的使用机会。

当选择好要进入环境后,通常只需要等待约一分钟左右,就能进入环境中。在等待期间,你可以浏览环境说明文档,了解该环境包含哪些组件及版本。

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_CKAD_02

二、官网链接及访问路径

现在开始第一个主题----核心概念的实操

这里使用到官网的链接及访问路径如下:

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/

三、题目

  1. Create a namespace called 'mynamespace' and a pod with image nginx called nginx on this namespace
    译:创建一个名为'mynamespace'的命名空间,并在此命名空间上创建一个名为nginx的pod,其中包含镜像nginx
# 创建命名空间
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

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_K8S_03

知识点:

  • 默认的命名空间的名称为default,如果未指定命名空间,则资源将被创建在该命名空间下。
  • 同一个命名空间内的对象名称必须是唯一的,但不同命名空间之间的对象名称可以重复。
  • --restart有以下几个选项
  • Always: 这是默认选项,表示如果 Pod 失效,它将总是自动重新启动。
  • OnFailure: 这表示只有在 Pod 失效时才会自动重新启动。
  • Never: 这表示 Pod 不会自动重新启动,只有当它被手动删除或节点重启时才会终止。


  1. Create the pod that was just described using YAML
    译:使用YAML创建刚才描述的pod

注意:做此步骤时需要将之前产生的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 -

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_Pod_04

知识点:

  • --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 服务器参与模拟过程,但仍然不会对集群状态产生任何实际影响。


  1. Create a busybox pod (using kubectl command) that runs the command "env". Run it and see the output
    译:创建一个busybox的pod(使用kubectl命令),运行命令“env”。运行它并查看输出
# 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

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_CKAD_05

知识点:

  • --command 参数用于指定容器的启动命令及其参数。它允许在创建 Pod 时直接指定要在容器中运行的命令,而不是使用容器镜像中默认的启动命令。

 这在需要自定义命令或覆盖默认命令时非常有用。

  • -it是是两个参数的合并,分别是 -i-t
  • -i 表示要求在容器中保持标准输入 (stdin) 打开。这允许在容器内输入命令或与容器交互。
  • -t 表示要求分配一个伪终端 (pseudo-TTY)。这使得在容器内执行交互式命令时,输出结果可以正确地显示在终端中,并且可以与容器进行交互。

 通常情况下,在容器内执行交互式命令或进入容器进行调试时,都会使用 -it   参数

  • -- 后面的内容会被视为容器的启动命令及其参数。env 实际上是在容器内执行的命令。使用 -- 来分隔 kubectl run 命令与容器内的实际命令。


  1. Create a busybox pod (using YAML) that runs the command "env". Run it and see the output
    译:创建一个busybox pod(使用YAML),运行命令“env”。运行它并查看输出

注意:做此步骤时需要将之前产生的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

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_K8S_06

知识点:

  • -o 参数用于指定容器的输出的格式和显示。
  • -o yaml-o yml: 将输出以 YAML 格式显示。
  • -o json: 将输出以 JSON 格式显示。
  • -o wide: 在表格中显示更多的列信息。
  • -o name: 仅显示资源的名称。
  • -o custom-columns=...: 自定义列输出,使用 --custom-columns 后接要显示的字段和标题,例如:-o custom-columns=NAME:.metadata.name,STATUS:.status.phase.
  • -o jsnotallow=...: 使用自定义的 JSONPath 表达式来提取资源的特定字段,例如:-o jsnotallow='{.spec.replicas}'.
  • -o go-template=...: 使用 Go 模板语言来格式化输出,例如:-o go-template='{{.metadata.name}}'.
  • -o template=...: 使用 Go 模板或文本模板来格式化输出,例如:-o template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'.


  1. Get the YAML for a new namespace called 'myns' without creating it
    译:获取名为'myns'的新命名空间的YAML,而无需创建它
# kubectl create: 运行 kubectl 命令的基本命令部分,用于在 Kubernetes 集群中创建资源。
# namespace: 要创建的资源类型,这里是命名空间。
# myns: 要创建的命名空间的名称,这里是 "myns"。
# -o yaml: 指定输出格式为 YAML。
# --dry-run=client: 这告诉 Kubernetes 在实际创建命名空间之前只运行客户端验证,而不会真正地执行创建操作。

kubectl create namespace myns -o yaml --dry-run=client

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_Kubernetes_07

知识点:

  • Kubernetes 默认提供了几个预定义的命名空间,如 defaultkube-systemkube-public 等。其中 default 是默认的命名空间,如果不指定命名空间,资源将被创建在该命名空间下。
  • 命名空间名称必须符合 DNS 子域名的命名规则,只能包含小写字母、数字和短横线 -,且必须以字母或数字开头和结尾,长度不超过 63 个字符。
  • 命名空间的名称在 Kubernetes 集群中必须是唯一的。


  1. Get the YAML for a new ResourceQuota called 'myrq' with hard limits of 1 CPU, 1G memory and 2 pods without creating it
    译:获取名为'myrq'的新ResourceQuota的YAML,CPU限制为1,内存限制为1G,Pod个数为2个,而无需创建它
# 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

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_CKAD_08

知识点:

  • --hard 参数用于指定资源的硬限制,参数后面跟着资源和对应的限制值。
  • cpu: 指定 CPU 使用量的限制,例如 --hard=cpu=1 表示该命名空间中的 Pod 总 CPU 使用量不超过 1 个 CPU 核心。
  • memory: 指定内存使用量的限制,例如 --hard=memory=1G 表示该命名空间中的 Pod 总内存使用量不超过 1GB。
  • pods: 指定 Pod 数量的限制,例如 --hard=pods=10 表示该命名空间中最多只能运行 10 个 Pod。
  • persistentvolumeclaims: 指定持久卷声明(PersistentVolumeClaim)的数量,例如 --hard=persistentvolumeclaims=5 表示该命名空间中最多只能创建 5 个持久卷声明。
  • 其他资源:还可以使用其他资源名称,如 services, configmaps, secrets 等,并指定相应的限制。
  • --hard 参数后跟随的资源名称以逗号" , "隔开。


  1. Get pods on all namespaces
    译:获取所有命名空间上的Pod
# kubectl get: 运行 kubectl 命令的基本命令部分,用于获取 Kubernetes 集群中的资源信息。
# po: 这是要获取的资源类型,这里是 "Pod" 的缩写。
# --all-namespaces:这个参数告诉 kubectl 在所有命名空间中查询资源信息,而不仅仅是默认命名空间。

kubectl get po --all-namespaces
#或
kubectl get po -A

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_Pod_09

知识点:

  • kubectl get 是用于获取集群中的资源信息的命令。
  • kubectl get 命令可以获取不同类型的资源信息,例如 Pod、Deployment、Service、Namespace 等。需要指定资源类型的缩写来获取相应的资源信息,如 podsdeploymentsservicesnamespaces 等。
  • 可以通过指定资源名称来获取特定的资源信息,如 podsdeploymentsservices的名称。如果没有指定资源名称,则会返回该资源类型下的所有资源。
  • kubectl get 默认只获取default命名空间下的资源信息。使用-n指定命名空间可以获取该命名空间下的资源信息,使用 --all-namespaces 参数可以获取所有命名空间中的资源信息。
  • kubectl get 命令默认以表格格式输出资源信息。您还可以使用 -o 参数指定其他输出格式,如 JSON、YAML 或自定义输出。
  • kubectl get 命令支持使用 -l 参数来筛选带有特定标签的资源。


  1. Create a pod with image nginx called nginx and expose traffic on port 80
    译:创建一个名为nginx的使用镜像nginx的pod,并在暴露80端口
# 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

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_Pod_10

知识点:

  • kubectl run 是 Kubernetes 中用于创建资源的命令之一,它主要用于快速创建 Pods 或 Deployments。常用参数如下
  • --restart 参数来指定 Pod 或 Deployment 的重启策略。常见选项有 "Always"(默认,出现故障时自动重启)和 "Never"(不重启)。
  • --port:指定容器暴露的端口。
  • --expose:在创建 Pod 的同时,创建一个 Service 来将 Pod 暴露到集群内部。
  • --env:设置容器的环境变量。
  • --labels:为资源设置标签。
  • --command:覆盖容器的默认启动命令。
  • --image-pull-policy:指定容器镜像的拉取策略。
  • Always:每次启动容器都会尝试拉取最新的镜像。
  • IfNotPresent:如果本地已经有了镜像,则不再拉取,否则才拉取镜像。
  • Never:只使用本地已有的镜像,不再拉取新的镜像。
  • --attach:如果设置了此参数,则在创建 Pod 后将附加到该 Pod 的标准输入、输出和错误流(stdin、stdout 和 stderr)。这使得可以与 Pod 进行交互,类似于在容器内执行命令。


  1. Change pod's image to nginx:1.7.1. Observe that the container will be restarted as soon as the image gets pulled
    译:将pod的镜像修改为nginx:1.7.1。注意,一旦镜像被拉取,容器就会重新启动
# 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"}'

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_Pod_11

知识点:

  • kubectl set 后面通常会跟随其他参数或子命令,以实现特定的功能或操作。
  • kubectl set resources: 用于更新正在运行的 Deployment、ReplicaSet 或 ReplicationController 中的资源限制(例如 CPU 和内存)。如:kubectl set resources deployment/myapp --limits=cpu=200m,memory=512Mi
  • kubectl set env: 用于更新正在运行的 Pod 中容器的环境变量。如设置环境变量DB_HOST:kubectl set env deployment/myapp DB_HOST=database.example.com
  • kubectl set scale: 用于更新正在运行的 Deployment、ReplicaSet 或 ReplicationController 的副本数。如修改myapp的副本数为3:kubectl set scale deployment/myapp --replicas=3


  1. Get nginx pod's ip created in previous step, use a temp busybox image to wget its '/'
    译:获取nginx pod在上一步中创建的ip,使用临时busybox镜像wget其'/'目录

注意:做此步骤时需要将之前产生的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

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_K8S_12


  1. Get pod's YAML 
    译:获取pod的YAML
# 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

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_Pod_13


  1. Get information about the pod, including details about potential issues (e.g. pod hasn't started)
    译:获取有关pod的信息,包括有关潜在问题的详细信息(例如pod尚未启动)
# kubectl describe: 运行 kubectl 命令的基本命令部分,用于获取资源的详细信息。
# po: 这是要获取信息的资源类型,这里是 "pod" 的缩写,用于获取 Pod 相关的资源信息。
# nginx: 这是要获取信息的 Pod 的名称,将显示有关名为 "nginx" 的 Pod 的详细信息。

kubectl describe po nginx

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_Pod_14

知识点:

  • kubectl describe 用于获取资源的详细信息包含如下信息。
  • Pod 的基本信息:名称、命名空间、标签、状态等。
  • 容器信息:包含每个容器的名称、镜像、运行状态、重启次数等。
  • 节点信息:显示 Pod 所在的节点和节点的 IP 地址。
  • 事件信息:显示与 Pod 相关的事件历史记录,例如创建、调度、重启等事件


  1. Get pod logs 
    译:获取pod日志
# kubectl logs: 运行 kubectl 命令的基本命令部分,用于获取 Pod 的日志。
# nginx: 这是要获取日志的 Pod 的名称,将显示名为 "nginx" 的 Pod 的日志。

kubectl logs nginx

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_CKAD_15

知识点:

  • logs用于查看日志
  • -f: 跟踪日志输出,以实时模式显示并持续刷新日志内容。
  • --all-containers:在多容器的 Pod 中,显示所有容器的日志而不仅仅是第一个容器。
  • --previous:显示之前终止容器的日志,适用于已经终止的容器。
  • --since:指定要显示日志的时间范围,例如 --since=1h 表示显示最近一小时内的日志。
  • --since-time:指定要显示日志的时间戳,格式为 RFC3339,例如 --since-time="2023-07-19T12:00:00Z"
  • --timestamps -t:显示日志的时间戳。
  • --tail:从日志的末尾显示指定行数的日志,默认为最近的10行。
  • --limit-bytes:限制日志的大小(字节)。
  • --container -c:指定要查看日志的容器名称,在多容器的 Pod 中非常有用。
  • --namespace -n:指定要查看日志的命名空间,如果不指定,默认为 "default" 命名空间。
  • --pod-running-timeout:等待 Pod 运行的最大时间,以秒为单位,默认值为 20 秒。

常用参数为-f--all-containers,在使用 -f 参数时,可能会不断地输出新的日志内容,因此在某些情况下,您可能需要小心使用,以避免日志输出过多导致终端不可控。如果不带任何参数,默认输出pod中第一个容器截止到执行命令的时间点的日志。


  1. If pod crashed and restarted, get logs about the previous instance
    译:如果pod崩溃并重新启动,则获取有关前一个实例的日志
kubectl logs nginx -p
# 或
kubectl logs nginx --previous

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_Kubernetes_16


  1. Execute a simple shell on the nginx pod
    译:在nginx pod上执行简单的shell
# kubectl exec: 用于在 Pod 中执行命令。
# -it: 这是两个参数的组合,表示以交互式终端的方式运行命令,使得可以在终端中与 Pod 的容器进行交互。
# nginx: 这是要在其上执行命令的 Pod 的名称,将在名为 "nginx" 的 Pod 中执行命令。、
# --: 这个分隔符表示命令选项的结束,后面的内容将被视为要在容器中执行的命令。
# /bin/sh: 这是要在容器中执行的 shell 命令。在这个例子中,我们执行的是 /bin/sh,也就是默认的 shell。

kubectl exec -it nginx -- /bin/sh

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_K8S_17


  1. Create a busybox pod that echoes 'hello world' and then exits
    译:创建一个busybox pod,回显'hello world',然后退出
# 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'

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_Pod_18

知识点:

  • -- /bin/sh -c 'echo hello world':
  • 这个命令使用 /bin/sh 作为容器中执行命令的 shell。
  • -c 'echo hello world' 表示在容器中执行一个 shell 命令,即将 echo hello world 作为 shell 命令来执行。
  • 在 BusyBox 镜像中,默认的 shell 是 /bin/sh,所以这里使用 /bin/sh -c 来执行命令。
  • -- echo 'hello world':
  • 这个命令直接将 echo 'hello world' 作为命令在容器中执行。
  • 在这种情况下,echo 命令将直接在容器的默认 shell 中执行。如果容器的默认shellbash则用bash执行,如果默认是sh,则用sh执行


  1. Do the same, but have the pod deleted automatically when it's completed
    译:执行相同的操作,但在完成时自动删除pod

注意:做此步骤时需要将之前产生的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

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_Kubernetes_19

知识点:

  • --rm 参数通常用于创建临时性的 Pod,例如用于执行一次性任务、快速测试或临时调试等场景,可以确保在任务完成后及时清理临时创建的 Pod,避免遗留无用的资源。通过使用 --rm 参数,可以避免手动清理临时 Pod 和相关资源的繁琐操作。


  1. Create an nginx pod and set an env value as 'var1=val1'. Check the env value existence within the pod
    译:创建一个nginx pod,并设置一个env值为'var1= val1'。检查Pod中是否存在env值

注意:做此步骤时需要将之前产生的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考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技_Kubernetes_20

知识点:

  • 如果要在 Kubernetes 的 Pod 中创建多个环境变量,可以使用多个 --env 参数,以空格隔开。
  • 如果要修改pod的环境变量,可以使用kubectl set env pod/nginx var1=xxxx
  • 如果要删除pod环境变量,可以使用kubectl set env pod/nginx var1-

我叫小十,我将继续更新CKAD考试攻略与实操指南文章系列

CKAD考试实操指南(一)--- 登顶CKAD:征服考试的完美蓝图

CKAD考试实操指南(二)---深入核心:探秘Kubernetes核心实操秘技