CKA考试练习题(持续更新,请收藏或订阅)

实验环境及架构大致如图所示:

在这里插入图片描述

我的实验环境

在这里插入图片描述

练习参考文档:

https://kubernetes.io/docs/home/

习题部分

1.题目大意:使用name排序出所有的pv,把输出内容存储到/opt/result.txt中,使用 kubectl own 对输出进行排序,并且不再进一步操作它。

解析如下:

kubectl get pv -A --sort-by=.metadata.name > /opt/result.txt

2.题目大意:监控kube-system空间下,etcd pod的日志,提取pod相应的行 ‘error’ 写入到 /logs/etcd_error.txt 中。

解析如下:

kubectl logs etcd-ip-10-0-1-211 -n kube-system | grep error -i > /logs/etcd_error.txt

3.创建一个名为kucc的pod,其中内部运行着nginx+redis+memcached+consul这4个容器。

解析如下:

apiVersion: v1
kind: Pod
metadata:
  name: kucc
spec:
   containers:
   - name: nginx
     image: nginx
   - name: redis
     image: redis
   - name: memcached
     image: mencached
   - name: consul
     image: consul

4.确保在kubectl集群的每个节点上运行一个Nginx Pod。其中Nginx Pod 必须使用Nginx镜像。不要覆盖当前环境中的任何traints。使用Daemonset来完成这个任务,Daemonset的名字使用ds。

解析如下:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: ds
  namespace: kube-system
  labels:
  k8s-app: fluentd-logging
spec:
  selector:
  matchLabels:
    name: fluentd-elasticsearch
  template:
  metadata:
    labels:
    name: fluentd-elasticsearch
  spec:
    containers:
    - name: fluentd-elasticsearch
    image: nginx

5.确保在kubectl集群的每个节点上运行一个Nginx Pod。其中Nginx Pod必须使用Nginx镜像。不要覆盖当前环境中的任何traints。使用Daemonset来完成这个任务,Daemonset的名字使用ds。

解析如下: 这里把tolerations部分注释掉了,因为题目中写的是不要覆盖当前环境中任何taints(不接受污点),意思就是说不要在master上去调度启动,反之(接受污点),也就是说要在master节点上调度启动,那就需要把注释的内容放开。因为我的环境上,默认master节点是有污点,不允许调度的,默认都是启动在k8snode1和k8snode2上
在这里插入图片描述

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: ds
  namespace: raytest
spec:
  selector:
    matchLabels:
      name: nginx
  template:
    metadata:
      labels:
        name: nginx
    spec:
      #tolerations:
      #- key: node-role.kubernetes.io/master
      #  operator: Exists
      #  effect: NoSchedule
      containers:
      - name: nginx
        image: nginx

6.添加一个initcontainer到lum(/etc/data)这个initcontainer应该创建一个名为 /workdir/calm.txt 的空文件,如果 /workdir/calm.txt 没有被检测到,这个Pod应该退出。

apiVersion: v1
kind: Pod
metadata:
  name: initcon
spec:
  volumes:
  - name: workdir
    hostPath:
      path: /etc/data
  containers:
  - name: nginx
    image: nginx
    volumeMounts:
    -  mountPath: /workdir
       name: workdir
  initContainers:
  - name: init-nginx
    image: busybox
    command: ['sh', '-c', 'touch /workdir/calm.txt']
    volumeMounts:
    -  mountPath: /workdir
       name: workdir

7.创建deployment名字为nginx-app容器采用1.11.9版本的nginx,这个deployment包含3个副本,接下来通过滚动升级的方式更新镜像版本为1.12.0,并记录这个更新,最后,回滚这个更新到之前的1.11.9版本。

nginx-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.11.9

在这里插入图片描述
执行命令,更改镜像版本为1.12.0

kubectl set image deployment/nginx-app nginx=nginx:1.12.0 --record

在这里插入图片描述
查询更新状态

kubectl rollout status deployment.v1.apps/nginx-app

查看更新历史

kubectl rollout history deployment.v1.apps/nginx-app

回滚版本

kubectl rollout undo deployment.v1.apps/nginx-app

可以再次调用查看命令验证nginx版本是否回滚为1.11.9

8.创建和配置service,名字为front-end-service。可以通过NodePort/ClusterIp来访问,并且路由到front-end的pod上

先创建一个pod:

front-end.yaml

apiVersion: v1
kind: Pod
metadata:
  name: front-end
  labels:
    app: my-nginx
spec:
  containers:
  - name: my-nginx
    image: nginx:1.11.9                 
kubectl apply -f front-end.yaml

第一种方式:

kubectl expose pod front-end --name=front-end-service --port=80 --type=NodePort

第二种方式:

front-end-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: my-nginx
  ports:
    - port: 80
      targetPort: 80
kubectl apply -f front-end-service.yaml

我这边自动生成的端口为31038,通过curl
在这里插入图片描述
9.创建一个pod,名字为jenkins,镜像使用jenkins。在新的namespace website-frontend上创建。

kubectl create ns website-frontend

jenkins-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: jenkins
  namespace: website-frontend
spec:
  containers:
  - name: jenkins
    image: jenkins
kubectl apply -f jenkins-pod.yaml

在这里插入图片描述
10.创建deployment的spec文件:使用redis镜像,7个副本,label为app_enb_stage=dev,deployment名字为kual00201,保存这个spec文件到 /opt/KUAL00201/deploy_spec.yaml完成后,清理(删除)在此任务期间生成的任何新的k8s API对象。

第一种方式:

kubectl run kual00201 --image=redis --labels=app_env_stage=dev --dry-run -oyaml > /opt/KUAL00201/deploy_spec.yaml

第二种方式:

redis-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kual00201
  labels:
    app_enb_stage: dev
spec:
  replicas: 7
  selector:
    matchLabels:
      app_enb_stage: dev
  template:
    metadata:
      labels:
        app_enb_stage: dev
    spec:
      containers:
      - name: redis
        image: redis
kubectl apply -f redis-deployment.yaml --dry-run > deploy_spec.yaml

11.创建一个文件 /opt/kucc.txt,这个文件列出所有的service为foo,在namespace为production的pod这个文件的格式是每行一个Pod的名字

kubectl get svc -n production --show-labels | grep foo

kubectl get pods -l k8s-app=kube-dns -n production -o=custom-columns=NAME:metadata.name > kucc.txt

12.创建一个secret,名字为super-secret包含用户名(username) bob,创建pod1挂载该secret,路径为 /secret,创建pod2,使用环境变量引用该secret,该变量的环境变量名为ABC

super-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: super-secret
type: Opaque
data:
  username: Ym9i

pod1.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: pod1
    image: redis
    volumeMounts:
    - name: mt
      mountPath: "/secret"
      readOnly: true
  volumes:
  - name: mt
    secret:
      secretName: super-secret

pod2.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
  - name: pod2
    image: redis
    env:
      - name: ABC
        valueFrom:
          secretKeyRef:
            name: super-secret
            key: username

13.在新的ns中创建pv,指定pv名字和挂在路径,镜像等

kubectl create ns ns
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0003
spec:
  capacity:
    storage: 5Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  hostPath:
    path: "~/raytest/cka/data"

14.为给定的deploy website副本扩容到6

kubectl scale deployment website --replicas=6

15.查看给定集群ready的node个数(不包含NoSchedule)

kubectl get nodes 


查看单个
kubectl describe node $nodename | grep Taint    如果有NoSchedule
或者是查看全部
kubectl describe nodes | grep Taint       如果有NoSchedule

16.找出指定ns中使用cpu最高的pod名,并写出到指定文件中

kubectl top pod -l xxx -n default
  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RayCheungQT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值