前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CKAD考试实操指南(五)--- 定制你的舞台:配置实践要点

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

原创
作者头像
知十
修改2023-10-13 08:31:14
2460
修改2023-10-13 08:31:14
举报
文章被收录于专栏:小十-云原生小十-云原生

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

实操平台介绍

访问实验平台

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

进入实验环境

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

官方参考资料

实操练习

ConfigMaps

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

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

代码语言:shell
复制
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 的值。

  • 方法一:
代码语言:shell
复制
kubectl get cm config -o yaml
  • 方法二:
代码语言:shell
复制
kubectl describe cm config
Create and display a configmap from a file

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

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

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

第二步:从文件创建 ConfigMap。

代码语言:shell
复制
kubectl create cm configmap2 --from-file=config.txt

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

代码语言:shell
复制
kubectl get cm configmap2 -o yaml
Create and display a configmap from a .env file

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

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

代码语言:shell
复制
echo -e "var1=val1\n# this is a comment\n\nvar2=val2\n#anothercomment" > config.env

第二步:从文件创建 ConfigMap。

代码语言:shell
复制
kubectl create cm configmap3 --from-env-file=config.env

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

代码语言:shell
复制
kubectl get cm configmap3 -o yaml
Create and display a configmap from a file, giving the key 'special'

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

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

代码语言:shell
复制
echo -e "var3=val3\nvar4=val4" > config4.txt

第二步:从文件创建 ConfigMap。

代码语言:shell
复制
kubectl create cm configmap4 --from-file=special=config4.txt

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

代码语言:shell
复制
kubectl get cm configmap4 -o yaml
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。

代码语言:shell
复制
kubectl create cm options --from-literal=var5=val5

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

代码语言:shell
复制
kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

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

代码语言:yaml
复制
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。

代码语言:shell
复制
kubectl create -f pod.yaml

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

代码语言:shell
复制
# env 是 Linux 中的一个命令,用于显示所有环境变量。
kubectl exec -it nginx -- env | grep option

第六步:删除 Pod。

代码语言:shell
复制
  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

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

第一步:创建 ConfigMap。

代码语言:shell
复制
kubectl create configmap anotherone --from-literal=var6=val6 --from-literal=var7=val7

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

代码语言:shell
复制
kubectl run --restart=Never nginx --image=nginx -o yaml --dry-run=client > pod.yaml

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

代码语言:yaml
复制
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。

代码语言:shell
复制
kubectl create -f pod.yaml

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

代码语言:shell
复制
kubectl exec -it nginx -- env | grep var

第六步:删除 Pod。

代码语言:shell
复制
  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

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

第一步:创建 ConfigMap。

代码语言:shell
复制
kubectl create configmap cmvolume --from-literal=var8=val8 --from-literal=var9=val9

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

代码语言:shell
复制
kubectl run nginx --image=nginx --restart=Never -o yaml --dry-run=client > pod.yaml

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

代码语言:yaml
复制
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。

代码语言:shell
复制
kubectl create -f pod.yaml

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

代码语言:shell
复制
kubectl exec -it nginx -- /bin/sh
cd /etc/lala
ls
cat var8

第六步:删除 Pod。

代码语言:shell
复制
# 执行此命令前,先退出容器。
kubectl delete po nginx

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 模板文件。

代码语言:shell
复制
kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

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

代码语言:yaml
复制
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 has the capabilities "NET_ADMIN", "SYS_TIME" added to its single container

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

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

代码语言:shell
复制
kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

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

代码语言:yaml
复制
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:允许容器内进程修改系统时间。

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 模板文件。

代码语言:shell
复制
kubectl run nginx --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

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

代码语言:yaml
复制
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。

代码语言:shell
复制
kubectl create -f pod.yaml

第四步:删除 Pod。

代码语言:shell
复制
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 a namespace with limit range

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

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

代码语言:shell
复制
kubectl create ns one

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

代码语言:yaml
复制
apiVersion: v1
kind: LimitRange
metadata:
  name: ns-memory-limit
  namespace: one
spec:
  limits:
  - max:
      memory: "500Mi"
    min:
      memory: "100Mi"
    type: Container

第三步:创建 limit range。

代码语言:shell
复制
kubectl apply -f limit-range.yaml
Describe the namespace limitrange

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

代码语言:shell
复制
kubectl describe limitrange ns-memory-limit -n one
Create a pod with resources requests memory = half of max memory constraint in namespace

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

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

代码语言:shell
复制
kubectl run nginx -n one --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

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

代码语言:yaml
复制
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。

代码语言:shell
复制
kubectl create -f pod.yaml

第四步:删除 Pod。

代码语言:shell
复制
kubectl delete po nginx -n one
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 配置。

代码语言:yaml
复制
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。

代码语言:shell
复制
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 模板文件。

代码语言:shell
复制
kubectl run nginx -n one --image=nginx --restart=Never --dry-run=client -o yaml > pod.yaml

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

代码语言:yaml
复制
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。

代码语言:shell
复制
kubectl create -f pod.yaml

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

代码语言:shell
复制
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
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 配置。

代码语言:yaml
复制
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。

代码语言:shell
复制
kubectl create -f pod.yaml

第三步:查看 ResourceQuota。

代码语言:shell
复制
kubectl get resourcequota -n one

Secrets

Create a secret called mysecret with the values password=mypass

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

代码语言:shell
复制
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 的文件并向文件中写入配置项。

代码语言:shell
复制
echo -n admin > username

第二步:创建 Secret。

代码语言:shell
复制
kubectl create secret generic mysecret2 --from-file=username
Get the value of mysecret2

译:查看 mysecret2 的值。

  • 方法一:直接获取。
代码语言:shell
复制
kubectl get secret mysecret2 -o yaml

# base64 是一个命令行工具,用于对数据进行 Base64 编码和解码。此处使用 base64 对 Secret 中的 username 字段进行解码。
echo -n YWRtaW4= | base64 -d
  • 方法二:使用 jsonpath 获取。
代码语言:shell
复制
kubectl get secret mysecret2 -o jsonpath='{.data.username}' | base64 -d
  • 方法三:使用 --template 获取。
代码语言:shell
复制
# template 接收一个 Go 模板字符串,其中 .data.username 表示获取 Secret 中的 username 字段。
kubectl get secret mysecret2 --template '{{.data.username}}' | base64 -d
  • 方法四:使用 jq 获取。
代码语言:shell
复制
# jq 是一个命令行 JSON 处理工具。此处使用 jq 并结合 jsonpath 获取 Secret 中的 username 字段。
kubectl get secret mysecret2 -o json | jq -r .data.username | base64 -d
Create an nginx pod that mounts the secret mysecret2 in a volume on path /etc/foo

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

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

代码语言:shell
复制
kubectl run nginx --image=nginx --restart=Never -o yaml --dry-run=client > pod.yaml

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

代码语言:yaml
复制
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。

代码语言:shell
复制
kubectl create -f pod.yaml

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

代码语言:shell
复制
kubectl exec -it nginx -- /bin/bash
ls /etc/foo
cat /etc/foo/username
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。

代码语言:shell
复制
kubectl delete po nginx

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

代码语言:shell
复制
kubectl run nginx --image=nginx --restart=Never -o yaml --dry-run=client > pod.yaml

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

代码语言:yaml
复制
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。

代码语言:shell
复制
kubectl create -f pod.yaml

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

代码语言:shell
复制
kubectl exec -it nginx -- env | grep USERNAME | cut -d '=' -f 2

第六步:删除 Pod。

代码语言:shell
复制
kubectl delete po nginx

Service Accounts

See all the service accounts of the cluster in all namespaces

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

  • 方法一:
代码语言:shell
复制
kubectl get sa --all-namespaces
  • 方法二:
代码语言:shell
复制
kubectl get sa -A
Create a new serviceaccount called 'myuser'

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

代码语言:shell
复制
kubectl create sa myuser
Create an nginx pod that uses 'myuser' as a service account

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

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

代码语言:shell
复制
kubectl run nginx --image=nginx --restart=Never -o yaml --dry-run=client > pod.yaml

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

代码语言:yaml
复制
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。

代码语言:shell
复制
kubectl create -f pod.yaml

第四步:查看 Pod 的 ServiceAccount。

代码语言:shell
复制
kubectl describe pod nginx
Generate an API token for the service account 'myuser'

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

代码语言:shell
复制
kubectl create token myuser

系列文章

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

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实操平台介绍
    • 访问实验平台
      • 进入实验环境
      • 官方参考资料
      • 实操练习
        • ConfigMaps
          • Create a configmap named config with values foo=lala,foo2=lolo
          • Display its values
          • Create and display a configmap from a file
          • Create and display a configmap from a .env file
          • 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'
          • 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
        • SecurityContext
          • 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
        • Requests and Limits
          • Create an nginx pod with requests cpu=100m,memory=256Mi and limits cpu=200m,memory=512Mi
          • Create a namespace with limit range
          • Describe the namespace limitrange
          • 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
          • 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
        • Secrets
          • Create a secret called mysecret with the values password=mypass
          • Create a secret called mysecret2 that gets key/value from a file
          • Get the value of mysecret2
          • 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'
        • Service Accounts
          • See all the service accounts of the cluster in all namespaces
          • Create a new serviceaccount called 'myuser'
          • Create an nginx pod that uses 'myuser' as a service account
          • Generate an API token for the service account 'myuser'
      • 系列文章
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档