CKAD考试实操指南(五)---定制你的舞台:配置实践要点

简介: 在这篇 CKAD 考试实操指南文章中将为你介绍如何使用知十平台并结合开源项目 CKAD Exercises 中提供的练习题来练习 CKAD 考试中 Configuration 部分的考试内容。在这个过程中你将掌握如何通过 kubectl 命令行工具操作「ConfigMap」、「Secret」、「SecurityContext」、「ServiceAccount」、「ResourceQuota」等资源,并在实践中加深对知识的理解。

在这篇 CKAD 考试实操指南文章中将为你介绍如何使用知十平台并结合开源项目 [CKAD Exercises] 中提供的练习题来练习 CKAD 考试中 Configuration 部分的考试内容。在这个过程中你将掌握如何通过 kubectl 命令行工具操作「ConfigMap」、「Secret」、「SecurityContext」、「ServiceAccount」、「ResourceQuota」等资源,并在实践中加深对知识的理解。

实操平台介绍

访问实验平台

在浏览器中输入此网址 https://www.knows10.com点击此处进入知十平台。进入后你将看到如下界面:

知十

进入实验环境

点击 「Kubernetes 基础环境」 图标即可进入实验环境,点击后你将看到如下界面:

实验环境

官方参考资料

  • kubectl 命令行工具基础

    • 文档路径:kubernetes.io > Documentation > Reference > Command line tool (kubectl) > kubectl Cheat Sheet
    • 文档链接:https: //kubernetes.io/docs/reference/kubectl/cheatsheet
  • kubectl 命令行工具进阶

    • 文档路径:kubernetes.io > Documentation > Reference > Command line tool (kubectl) > kubectl Cheat Sheet
    • 文档链接:https: //kubernetes.io/docs/reference/kubectl/cheatsheet
  • ConfigMaps

    • 文档路径:kubernetes.io > Documentation > Concepts > Configuration > ConfigMaps
    • 文档链接:https:

    //kubernetes.io/docs/concepts/configuration/configmap

  • Secrets

    • 文档路径:kubernetes.io > Documentation > Concepts > Configuration > Secrets
    • 文档链接:https: //kubernetes.io/docs/concepts/configuration/secret
  • Service Accounts

    • 文档路径:kubernetes.io > Documentation > Concepts > Security > Service Accounts
    • 文档链接:https: //kubernetes.io/docs/concepts/security/service-accounts
  • Security Contexts

    • 文档路径:kubernetes.io > Documentation > Concepts > Configuration > SecurityContext
    • 文档链接:https: //kubernetes.io/docs/tasks/configure-pod-container/security-context
  • Resource Quotas

    • 文档路径:kubernetes.io > Documentation > Concepts > Policies > Resource Quotas
    • 文档链接:https: //kubernetes.io/docs/concepts/policy/resource-quotas

实操练习

ConfigMaps

Create a configmap named config with values foo=lala,foo2=lolo

译:创建一个名为 config 的 configmap,其值为 foo=lala,foo2=lolo。

kubectl create configmap config --from-literal=foo=lala --from-literal=foo2=lolo
  • 知识点:

ConfigMap 是什么?它有什么作用?

ConfigMap 是 Kubernetes 中的一种资源对象,用于存储应用程序的配置信息。它的应用场景包括但不限于:

  • 将应用程序的配置信息与应用程序本身分离,方便管理和维护。
  • 在不同的环境中使用相同的镜像,通过 ConfigMap 使用不同的配置信息,例如在开发环境和生产环境中使用不同的数据库地址。
  • 允许应用程序在运行时动态地加载配置信息,而不需要重新构建镜像。

举个例子,假设我们有一个使用 MySQL 数据库的应用程序,我们可以将 MySQL 的连接信息存储在一个 ConfigMap 中,然后在应用程序中使用该 ConfigMap 中的信息来连接数据库。这样,我们就可以在不同的环境中使用不同的 MySQL 连接信息,而不需要修改应用程序的代码。

Display its values

译:查看上一题创建的 ConfigMap 的值。

  • 方法一:
kubectl get cm config -o yaml
  • 方法二:
kubectl describe cm config

kubectl describe cm config

Create and display a configmap from a file

译:从文件创建一个 ConfigMap 并查看其值。

第一步:创建一个名为 confing.txt 的文件并向文件中写入配置项。

# -e 参数用于解析转义字符 \n,否则 \n 会被当做字符串写入文件。
echo -e "foo3=lili\nfoo4=lele" > config.txt

第二步:从文件创建 ConfigMap。

kubectl create cm configmap2 --from-file=config.txt

第三步:查看创建好的 ConfigMap。

kubectl get cm configmap2 -o yaml

Create and display a configmap from a file

Create and display a configmap from a .env file

译:从 .env 文件创建一个 ConfigMap 并查看其值。

第一步:创建一个名为 config.env 的文件并向文件中写入配置项。

echo -e "var1=val1\n# this is a comment\n\nvar2=val2\n#anothercomment" > config.env

第二步:从文件创建 ConfigMap。

kubectl create cm configmap3 --from-env-file=config.env

第三步:查看创建好的 ConfigMap。

kubectl get cm configmap3 -o yaml

Create and display a configmap from a .env file

Create and display a configmap from a file, giving the key 'special'

译:从文件创建一个 ConfigMap 并指定 key 为 special,查看其值。

第一步:创建一个名为 config4.txt 的文件并向文件中写入配置项。

echo -e "var3=val3\nvar4=val4" > config4.txt

第二步:从文件创建 ConfigMap。

kubectl create cm configmap4 --from-file=special=config4.txt

第三步:查看创建好的 ConfigMap。

kubectl get cm configmap4 -o yaml

Create and display a configmap from a file, giving the key 'special'

Create a configMap called 'options' with the value var5=val5. Create a new nginx pod that loads the value from variable 'var5' in an env variable called 'option'

译:创建一个名为 options 的 ConfigMap,其值为 var5=val5。创建一个新的 Nginx Pod,从名为 var5 的变量中加载值到名为 option 的环境变量中。

第一步:创建 ConfigMap。

kubectl create cm options --from-literal=var5=val5

第二步:生成创建 Nginx的 YAML 文件。

kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

第三步:编辑 YAML 文件,添加从 ConfigMap 中加载值到环境变量的配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
    resources: {}
    env:
    - name: option # 环境变量名
      valueFrom:
        configMapKeyRef: # 表示通过 ConfigMap Key 来获取值,然后赋值给环境变量
          name: options # 之前创建的 ConfigMap 名
          key: var5 # ConfigMap 中的 key 名
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

第四步:创建 Pod。

kubectl create -f pod.yaml

第五步:查看 Pod 的环境变量。

# env 是 Linux 中的一个命令,用于显示所有环境变量。
kubectl exec -it nginx -- env | grep option

第六步:删除 Pod。

  kubectl delete po nginx

Create a configMap called 'options' with the value var5=val5. Create a new nginx pod that loads the value from variable 'var5' in an env variable called 'option'

Create a configMap 'anotherone' with values 'var6=val6', 'var7=val7'. Load this configMap as env variables into a new nginx pod

译:创建一个名为 anotherone 的 ConfigMap,其值为 var6=val6 和 var7=val7。将这个 ConfigMap 加载到一个新的 Nginx Pod 的环境变量中。

第一步:创建 ConfigMap。

kubectl create configmap anotherone --from-literal=var6=val6 --from-literal=var7=val7

第二步:生成创建 Nginx的 YAML 文件。

kubectl run --restart=Never nginx --image=nginx -o yaml --dry-run=client > pod.yaml

第三步:编辑 YAML 文件,添加从 ConfigMap 中加载值到环境变量的配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
    resources: {}
    envFrom: # 和前一题的配置不同,前一题是 valueFrom,这里是 envFrom,表示把整个 ConfigMap 加载到环境变量中
    - configMapRef: # 和前一题的配置不同,前一题是 configMapKeyRef(按照 Key 来引用),这里是 configMapRef(直接引用整个 ConfigMap)
        name: anotherone # 被引用的 ConfigMap 名字
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

第四步:创建 Pod。

kubectl create -f pod.yaml

第五步:查看 Pod 的环境变量。

kubectl exec -it nginx -- env | grep var

第六步:删除 Pod。

  kubectl delete po nginx

Create a configMap 'anotherone' with values 'var6=val6', 'var7=val7'. Load this configMap as env variables into a new nginx pod

Create a configMap 'cmvolume' with values 'var8=val8', 'var9=val9'. Load this as a volume inside an nginx pod on path '/etc/lala'. Create the pod and 'ls' into the '/etc/lala' directory

译:创建一个名为 cmvolume 的 ConfigMap,其值为 var8=val8 和 var9=val9。将这个 ConfigMap 作为一个卷挂载到一个 Nginx Pod 的 /etc/lala 目录下。然后创建 Pod 并查看 /etc/lala 目录。

第一步:创建 ConfigMap。

kubectl create configmap cmvolume --from-literal=var8=val8 --from-literal=var9=val9

第二步:生成创建 Nginx的 YAML 文件。

kubectl run nginx --image=nginx --restart=Never -o yaml --dry-run=client > pod.yaml

第三步:编辑 YAML 文件,添加将 ConfigMap 作为卷挂载到 Pod 的 /etc/lala 目录下的配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  volumes:
  - name: myvolume # 卷名,后续在容器中挂载时会用到
    configMap:
      name: cmvolume # 想要挂载的 ConfigMap 名
  containers:
  - image: nginx
    name: nginx
    resources: {}
    volumeMounts: # 配置挂载卷
    - name: myvolume # 在 spec.volumes 中定义的卷名
      mountPath: /etc/lala # 挂载到容器中的目录
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

第四步:创建 Pod。

kubectl create -f pod.yaml

第五步:查看 Pod 的 /etc/lala 目录。

kubectl exec -it nginx -- /bin/sh
cd /etc/lala
ls
cat var8

第六步:删除 Pod。

# 执行此命令前,先退出容器。
kubectl delete po nginx

Create a configMap 'cmvolume' with values 'var8=val8', 'var9=val9'. Load this as a volume inside an nginx pod on path '/etc/lala'. Create the pod and 'ls' into the '/etc/lala' directory

SecurityContext

Create the YAML for an nginx pod that runs with the user ID 101. No need to create the pod

译:编写一个 Nginx Pod YAML(编写 YAML 即可,不需要创建 Pod),将运行用户 ID 设置为 101。

第一步:生成 YAML 模板文件。

kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

第二步:编辑 YAML 文件,添加运行用户 ID 为 101 的配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  securityContext: # 在此处添加 securityContext 配置
    runAsUser: 101 # 在此处设置运行用户 ID
  containers:
  - image: nginx
    name: nginx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

Create the YAML for an nginx pod that runs with the user ID 101. No need to create the pod

Create the YAML for an nginx pod that has the capabilities "NET_ADMIN", "SYS_TIME" added to its single container

译:编写一个 Nginx Pod YAML(编写 YAML 即可,不需要创建 Pod),将容器的 capabilities 设置为 "NET_ADMIN", "SYS_TIME"。

第一步:生成 YAML 模板文件。

kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

第二步:编辑 YAML 文件,添加 capabilities 配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: nginx
    securityContext: # 在此处添加 securityContext 配置
      capabilities: # 在此处添加 capabilities 配置
        add: ["NET_ADMIN", "SYS_TIME"] # 在此处设置 capabilities 为 "NET_ADMIN", "SYS_TIME"
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}
  • 知识点:

Capabilities 是 Linux 的一种权限控制机制,它允许将传统 Unix 的 root 权限细分为多个不同的权限集,这样就可以更精细地控制进程的权限。比如,一个进程可能只需要网络权限,而不需要文件系统权限,那么我们就可以只给这个进程赋予网络权限,而不是全部的 root 权限。详细的权限功能介绍可以参考 capabilities(7) — Linux manual page。此处配置的 NET_ADMIN 和 SYS_TIME 权限的作用如下:

  • NET_ADMIN:允许容器内进程进行网络配置,如修改接口 IP 地址、路由表、接口状态,防火墙等。
  • SYS_TIME:允许容器内进程修改系统时间。

Create the YAML for an nginx pod that has the capabilities "NET_ADMIN", "SYS_TIME" added to its single container

Requests and Limits

Create an nginx pod with requests cpu=100m,memory=256Mi and limits cpu=200m,memory=512Mi

译:创建一个 Nginx Pod,设置其 requests 为 cpu=100m,memory=256Mi,设置其 limits 为 cpu=200m,memory=512Mi。

第一步:生成 YAML 模板文件。

kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

第二步:编辑 YAML 文件,添加 requests 和 limits 配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
    resources: # 在此处添加 resources 配置
      requests:
        memory: "256Mi"
        cpu: "100m"
      limits:    
        memory: "512Mi"
        cpu: "200m"
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

第三步:创建 Pod。

kubectl create -f pod.yaml

第四步:删除 Pod。

kubectl delete po nginx
  • 知识点:

    • 可以使用以下两种方式配置 CPU 资源:

      • 核数(Core):这是一个相对直观的单位,表示 CPU 的物理或逻辑核心数。例如,如果你有一个四核 CPU,你可以将 Kubernetes Pod 的 CPU 资源设置为 1,这意味着 Pod 可以使用一个完整的 CPU 核心。在 Kubernetes 配置中,你可以直接使用数字表示核心数,比如 1、2、3 等。
      • 毫核(MilliCore):这是 Kubernetes 中的一个更精细的单位,用于表示 CPU 资源的一部分。1核等于1000毫核。例如,如果你希望 Pod 使用半个 CPU 核心,你可以将其设置为 500m(m 表示 milli)。这样,Pod 将能够使用 50% 的 CPU 资源。详细的 CPU 资源配置介绍可以参考 [CPU resource units]
    • 配置 Memory 资源时可以使用如下所示单位:
      E, P, T, G, M, K 代表 Exa, Peta, Tera, Giga, Mega, Kilo。例如,128M 表示128兆字节。
      Ei, Pi, Ti, Gi, Mi, Ki 代表 Exbi, Pebi, Tebi, Gibi, Mebi, Kibi。例如,128Mi 表示大约134217728字节。
      这两种单位的区别在于,第一种是基于10的幂次(1K = 1000),第二种是基于2的幂次(1Ki = 1024)。
      详细的 Memory 资源配置介绍可以参考 [Memory resource units]

Create an nginx pod with requests cpu=100m,memory=256Mi and limits cpu=200m,memory=512Mi

Create a namespace with limit range

译:创建一个带有 limit range 的命名空间。

第一步:创建一个命名空间。

kubectl create ns one

第二步:创建一个名为 limit-range.yaml 的文件,并在其中添加 limit range 配置。

apiVersion: v1
kind: LimitRange
metadata:
  name: ns-memory-limit
  namespace: one
spec:
  limits:
  - max:
      memory: "500Mi"
    min:
      memory: "100Mi"
    type: Container

第三步:创建 limit range。

kubectl apply -f limit-range.yaml

Describe the namespace limitrange

译:查看命名空间的 limit range。

kubectl describe limitrange ns-memory-limit -n one

Describe the namespace limitrange

Create a pod with resources requests memory = half of max memory constraint in namespace

译:创建一个 Pod,设置其 requests 为命名空间中最大内存限制的一半。

第一步:生成 YAML 模板文件。

kubectl run nginx -n one --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

第二步:编辑 YAML 文件,添加 requests 配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
  namespace: one
spec:
  containers:
  - image: nginx
    name: nginx
    resources:
      requests:
        memory: "250Mi"
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

第三步:创建 Pod。

kubectl create -f pod.yaml

第四步:删除 Pod。

kubectl delete po nginx -n one

Create a pod with resources requests memory = half of max memory constraint in namespace

Create ResourceQuota in namespace one with hard requests cpu=1, memory=1Gi and hard limits cpu=2, memory=2Gi

译:在命名空间 one 中创建一个 ResourceQuota,设置其 hard requests 为 cpu=1, memory=1Gi,设置其 hard limits 为 cpu=2, memory=2Gi。

第一步:创建一个名为 rq-one.yaml 的文件,并在其中添加 ResourceQuota 配置。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: my-rq
  namespace: one
spec:
  hard:
    requests.cpu: "1"
    requests.memory: 1Gi
    limits.cpu: "2"
    limits.memory: 2Gi

第二步:创建 ResourceQuota。

kubectl apply -f rq-one.yaml

Attempt to create a pod with resource requests cpu=2, memory=3Gi and limits cpu=3, memory=4Gi in namespace one

译:在命名空间 one 中创建一个 Pod,设置其 requests 为 cpu=2, memory=3Gi,设置其 limits 为 cpu=3, memory=4Gi。

第一步:生成 YAML 模板文件。

kubectl run nginx -n one --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

第二步:编辑 YAML 文件,添加 requests 和 limits 配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
  namespace: one
spec:
  containers:
  - image: nginx
    name: nginx
    resources:
      requests:
        memory: "3Gi"
        cpu: "2"
      limits:
        memory: "4Gi"
        cpu: "3"
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

第三步:创建 Pod。

kubectl create -f pod.yaml

执行第三步命令后应该出现如下所示的错误提示,因为请求的资源超出了 namespace 的配额限制:

Error from server (Forbidden): error when creating "pod.yaml": pods "nginx" is forbidden: exceeded quota: my-rq, requested: limits.cpu=3,limits.memory=4Gi,requests.cpu=2,requests.memory=3Gi, used: limits.cpu=0,limits.memory=0,requests.cpu=0,requests.memory=0, limited: limits.cpu=2,limits.memory=2Gi,requests.cpu=1,requests.memory=1Gi

Attempt to create a pod with resource requests cpu=2, memory=3Gi and limits cpu=3, memory=4Gi in namespace one

Create a pod with resource requests cpu=0.5, memory=1Gi and limits cpu=1, memory=2Gi in namespace one

译:在命名空间 one 中创建一个 Pod,设置其 requests 为 cpu=0.5, memory=1Gi,设置其 limits 为 cpu=1, memory=2Gi。

第一步:编辑 pod.yaml 文件并修改 requests 和 limits 配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
  namespace: one
spec:
  containers:
  - image: nginx
    name: nginx
    resources:
      requests:
        memory: "1Gi"
        cpu: "0.5"
      limits:
        memory: "2Gi"
        cpu: "1"
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

第二步:创建 Pod。

kubectl create -f pod.yaml

第三步:查看 ResourceQuota。

kubectl get resourcequota -n one

Create a pod with resource requests cpu=0.5, memory=1Gi and limits cpu=1, memory=2Gi in namespace one

Secrets

Create a secret called mysecret with the values password=mypass

译:创建一个名为 mysecret 的 Secret,其值为 password=mypass。

kubectl create secret generic mysecret --from-literal=password=mypass
  • 知识点:

ConfigMap 与 Secret 的区别是什么?分别在什么场景下使用?

ConfigMap 和 Secret 都是用于存储配置信息的资源类型,但它们的主要区别在于存储的数据类型和使用场景。
ConfigMap通常用于存储和共享非敏感的、非机密的配置信息。例如,你可能有一个应用程序需要一个配置文件,这个文件中包含了一些如服务的端口号、数据库连接的URL等信息。你可以将这些信息存储在 ConfigMap 中,然后在 Pod 的定义中引用这个 ConfigMap,这样,应用程序就可以访问到这些配置信息了。
Secret 用于存储敏感信息,例如密码、API 密钥、OAuth 令牌等。Secret 的数据在存储时会被 Kubernetes 加密,并且在传输过程中也会被加密。在 Pod 的定义中,你可以引用 Secret 以使应用程序可以访问到这些敏感信息。
在选择使用 ConfigMap 还是 Secret 时,主要的考虑因素是你需要存储的信息是否敏感。如果信息是敏感的,那么应该使用 Secret。如果信息不敏感,可以使用 ConfigMap。需要注意的是,虽然 Secret 的数据在存储和传输过程中是加密的,但是在 Pod 内部,应用程序访问到的数据是解密的,因此你还需要确保应用程序本身的安全性。

Create a secret called mysecret2 that gets key/value from a file

译:创建一个名为 mysecret2 的 Secret,其值从文件中获取。

第一步:创建一个名为 username 的文件并向文件中写入配置项。

echo -n admin > username

第二步:创建 Secret。

kubectl create secret generic mysecret2 --from-file=username

Get the value of mysecret2

译:查看 mysecret2 的值。

  • 方法一:直接获取。
kubectl get secret mysecret2 -o yaml

# base64 是一个命令行工具,用于对数据进行 Base64 编码和解码。此处使用 base64 对 Secret 中的 username 字段进行解码。
echo -n YWRtaW4= | base64 -d
  • 方法二:使用 jsonpath 获取。
kubectl get secret mysecret2 -o jsonpath='{.data.username}' | base64 -d
  • 方法三:使用 --template 获取。
# template 接收一个 Go 模板字符串,其中 .data.username 表示获取 Secret 中的 username 字段。
kubectl get secret mysecret2 --template '{{.data.username}}' | base64 -d
  • 方法四:使用 jq 获取。
# jq 是一个命令行 JSON 处理工具。此处使用 jq 并结合 jsonpath 获取 Secret 中的 username 字段。
kubectl get secret mysecret2 -o json | jq -r .data.username | base64 -d

Create a secret called mysecret2 that gets key/value from a file

Create an nginx pod that mounts the secret mysecret2 in a volume on path /etc/foo

译:创建一个 Nginx Pod,将 mysecret2 作为一个卷挂载到 /etc/foo 目录下。

第一步:生成 YAML 模板文件。

kubectl run nginx --image=nginx --restart=Never -o yaml --dry-run=client > pod.yaml

第二步:编辑 YAML 文件,添加将 Secret 作为卷挂载到 Pod 的 /etc/foo 目录下的配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  volumes: 
  - name: foo
    secret:
      secretName: mysecret2 # 引用已经创建好的 Secret
  containers:
  - image: nginx
    name: nginx
    resources: {}
    volumeMounts: # 将 Secret 作为卷挂载到 /etc/foo 目录下
    - name: foo
      mountPath: /etc/foo
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

第三步:创建 Pod。

kubectl create -f pod.yaml

第四步:查看挂载到 Pod 的卷。

kubectl exec -it nginx -- /bin/bash
ls /etc/foo
cat /etc/foo/username

Create an nginx pod that mounts the secret mysecret2 in a volume on path /etc/foo

Delete the pod you just created and mount the variable 'username' from secret mysecret2 onto a new nginx pod in env variable called 'USERNAME'

译:删除上一题创建的 Pod,然后将 mysecret2 中的 username 变量挂载到一个新的 Nginx Pod 的环境变量 USERNAME 中。

第一步:删除 Pod。

kubectl delete po nginx

第二步:生成 YAML 模板文件。

kubectl run nginx --image=nginx --restart=Never -o yaml --dry-run=client > pod.yaml

第三步:编辑 YAML 文件,添加将 Secret 中的 username 变量挂载到环境变量 USERNAME 中的配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
    resources: {}
    env:
    - name: USERNAME # 环境变量名
      valueFrom:
        secretKeyRef: # 表示以 Secret 中的某个字段作为环境变量的值
          name: mysecret2 # 引用已经创建好的 Secret
          key: username # 引用 Secret 中的 username 字段
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

第四步:创建 Pod。

kubectl create -f pod.yaml

第五步:查看 Pod 的环境变量。

kubectl exec -it nginx -- env | grep USERNAME | cut -d '=' -f 2

第六步:删除 Pod。

kubectl delete po nginx

Delete the pod you just created and mount the variable 'username' from secret mysecret2 onto a new nginx pod in env variable called 'USERNAME'

Service Accounts

See all the service accounts of the cluster in all namespaces

译:查看集群中所有命名空间的所有 ServiceAccount。

  • 方法一:
kubectl get sa --all-namespaces
  • 方法二:
kubectl get sa -A

Create a new serviceaccount called 'myuser'

译:创建一个名为 myuser 的 ServiceAccount。

kubectl create sa myuser

Create an nginx pod that uses 'myuser' as a service account

译:创建一个 Nginx Pod,使用 myuser 作为 ServiceAccount。

第一步:生成 YAML 模板文件。

kubectl run nginx --image=nginx --restart=Never -o yaml --dry-run=client > pod.yaml

第二步:编辑 YAML 文件,添加 ServiceAccount 配置。

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: nginx
  name: nginx
spec:
  serviceAccountName: myuser # 此处也可以把 serviceAccountName 改为 serviceAccount
  containers:
  - image: nginx
    imagePullPolicy: IfNotPresent
    name: nginx
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

第三步:创建 Pod。

kubectl create -f pod.yaml

第四步:查看 Pod 的 ServiceAccount。

kubectl describe pod nginx

Create an nginx pod that uses 'myuser' as a service account

Generate an API token for the service account 'myuser'

译:为 ServiceAccount myuser 生成一个 API token。

kubectl create token myuser

Generate an API token for the service account 'myuser'


系列文章

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

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

[CKAD考试实操指南(三)---舞动容器:多容器Pod实践指南]

CKAD考试实操指南(四)---优雅设计:掌握Pod设计技巧

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
Kubernetes Cloud Native Linux
CKAD考试实操指南(一)--- 登顶CKAD:征服考试的完美蓝图
Certified Kubernetes Application Developer (CKAD)是由Linux Foundation和Cloud Native Computing Foundation (CNCF)联合推出的一项专业认证,旨在验证候选人是否具备Kubernetes应用开发者所需的技能、知识和能力。CKAD考试是一个在线的、监考的、基于性能的考试,由一系列需要在命令行中解决的性能型任务(问题)组成,考试时间为2小时。
814 0
CKAD考试实操指南(一)--- 登顶CKAD:征服考试的完美蓝图
|
项目管理
PMP备考之路 - 视频教程第六讲(进度管理)(一)
PMP备考之路 - 视频教程第六讲(进度管理)
39 0
|
项目管理
PMP备考之路 - 视频教程第六讲(进度管理)(二)
PMP备考之路 - 视频教程第六讲(进度管理)(二)
23 0
|
监控 项目管理
通俗易懂的方式理解项目管理的49个过程(追妹子案例)
通俗易懂的方式理解项目管理的49个过程(追妹子案例)
144 0
|
数据挖掘 项目管理
PMP备考之路 - 视频教程第五讲(进度管理)(五)
PMP备考之路 - 视频教程第五讲(进度管理)(五)
48 0
|
项目管理
PMP备考之路 - 视频教程第五讲(进度管理)(三)
PMP备考之路 - 视频教程第五讲(进度管理)(三)
48 0
|
Kubernetes 应用服务中间件 nginx
CKAD考试实操指南(四)---优雅设计:掌握Pod设计技巧
在这篇 CKAD 考试实操指南文章中将为你介绍如何使用知十平台并结合开源项目 CKAD Exercises 中提供的练习题来练习 CKAD 考试中 Pod Design 部分的考试内容。在这个过程中你将熟悉如何通过 kubectl 命令行工具去操作「Label」、「Annotation」、「Pod」、「Deployment」、「Job」、「CronJob」,并在实践中加深对知识的理解。
193 0
CKAD考试实操指南(四)---优雅设计:掌握Pod设计技巧
|
前端开发 容灾
小白也能做出满分前端工程:01 配置管理(下)
小白也能做出满分前端工程:01 配置管理
102 0
小白也能做出满分前端工程:01 配置管理(下)
|
前端开发 搜索推荐 Java
小白也能做出满分前端工程:01 配置管理(上)
小白也能做出满分前端工程:01 配置管理
211 0
|
前端开发
前端学习笔记202303学习笔记第五天-梳理项目的基本结构1
前端学习笔记202303学习笔记第五天-梳理项目的基本结构1
68 0
下一篇
无影云桌面