2025年cka考试试题及答案_第1页
2025年cka考试试题及答案_第2页
2025年cka考试试题及答案_第3页
2025年cka考试试题及答案_第4页
2025年cka考试试题及答案_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2025年cka考试试题及答案试题1集群初始化与节点加入现有3台Ubuntu22.04服务器,节点信息如下:master-node:0,worker-node1:1,worker-node2:2,所有节点已关闭swap、开启iptables桥接配置,容器运行时containerd已安装完成。要求使用kubeadm完成以下操作:1.初始化control-plane节点,指定kubernetes版本为v1.29.4,pod子网范围为/16,service子网范围为/12,将kubeconfig配置文件复制到当前用户的.kube目录下并配置正确权限;2.生成新的worker节点加入令牌,令牌有效期设置为24小时,记录加入命令;3.完成FlannelCNI网络插件的部署,验证所有节点状态为Ready。参考答案:在master-node执行初始化操作:

sudokubeadminit--kubernetes-version=v1.29.4--pod-network-cidr=/16--service-cidr=/12初始化完成后配置kubeconfig:

mkdir-p$HOME/.kube

sudocp-i/etc/kubernetes/admin.conf$HOME/.kube/config

sudochown$(id-u):$(id-g)$HOME/.kube/config生成有效期24小时的加入令牌并输出加入命令:

kubeadmtokencreate--ttl24h--print-join-command复制输出的加入命令,分别在两个worker节点执行即可完成节点加入。部署FlannelCNI插件:

kubectlapply-f/flannel-io/flannel/releases/latest/download/kube-flannel.yml等待3-5分钟后执行kubectlgetnodes,所有节点状态显示为Ready即完成配置。试题2节点调度与污点容忍配置现有k8s集群中,worker-node2节点配置了高IOSSD磁盘,要求将所有带标签storage=ssd的Pod调度到该节点,同时禁止该节点运行其它无对应标记的业务Pod。请完成配置并验证结果。参考答案:为worker-node2添加调度标签:

kubectllabelnodeworker-node2storage=ssd为worker-node2添加专属污点,禁止无容忍的Pod调度:

kubectltaintnodeworker-node2dedicated=ssd:NoSchedule验证配置,创建测试Pod文件test-ssd.yaml:

apiVersion:v1

kind:Pod

metadata:

name:test-ssd-pod

labels:

storage:ssd

spec:

containers:

-name:nginx

image:nginx:alpine

tolerations:

-key:"dedicated"

operator:"Equal"

value:"ssd"

effect:"NoSchedule"

nodeSelector:

storage:ssd执行kubectlapply-ftest-ssd.yaml后,执行kubectlgetpodtest-ssd-pod-owide,可看到Pod成功调度到worker-node2节点。再创建一个不带标签和容忍的测试Pod,执行kubectlgetpod可看到Pod状态为Pending,符合要求,配置完成。试题3持久化存储配置要求在集群中创建一个基于HostPath的StorageClass,名称为local-hostpath,回收策略为Retain,然后创建一个10Gi的PersistentVolumeClaim,绑定该StorageClass,最后创建一个NginxPod,使用该PVC挂载到容器的/data/nginx目录,验证挂载正常。参考答案:创建StorageClass配置文件sc.yaml:

apiVersion:storage.k8s.io/v1

kind:StorageClass

metadata:

name:local-hostpath

provisioner:kubernetes.io/no-provisioner

reclaimPolicy:Retain

volumeBindingMode:WaitForFirstConsumer执行kubectlapply-fsc.yaml完成创建。创建对应PV配置文件pv.yaml:

apiVersion:v1

kind:PersistentVolume

metadata:

name:local-pv-10g

labels:

type:local-ssd

spec:

capacity:

storage:10Gi

accessModes:

-ReadWriteOnce

persistentVolumeReclaimPolicy:Retain

storageClassName:local-hostpath

hostPath:

path:/mnt/local-pv-10g

type:DirectoryOrCreate执行kubectlapply-fpv.yaml完成PV创建。创建PVC配置文件pvc.yaml:

apiVersion:v1

kind:PersistentVolumeClaim

metadata:

name:nginx-data-pvc

spec:

accessModes:

-ReadWriteOnce

resources:

requests:

storage:10Gi

storageClassName:local-hostpath执行kubectlapply-fpvc.yaml,执行kubectlgetpvc可看到PVC状态变为Bound,说明绑定成功。创建Nginx测试Pod配置文件nginx-storage.yaml:

apiVersion:v1

kind:Pod

metadata:

name:nginx-storage-test

spec:

containers:

-name:nginx

image:nginx:alpine

volumeMounts:

-name:nginx-data

mountPath:/data/nginx

volumes:

-name:nginx-data

persistentVolumeClaim:

claimName:nginx-data-pvc执行kubectlapply-fnginx-storage.yaml,执行kubectlexecnginx-storage-test--ls/data/nginx,可正常输出目录内容,执行kubectlgetpv可看到PV回收策略为Retain,符合要求,配置完成。试题4Ingress服务发布要求将部署在default命名空间的web-deploymentDeployment(容器端口为80)发布为ClusterIP类型的Service,名称为web-svc,然后配置Ingress资源,名称为web-ingress,域名为api.test.cka,将访问该域名的请求转发到后端web-svc服务,要求Ingress启用TLS,使用已存在的名为test-tls的Secret(包含tls证书和私钥),验证访问正常。参考答案:创建Service暴露后端服务:

kubectlexposedeploymentweb-deployment--name=web-svc--type=ClusterIP--port=80--target-port=80也可通过YAML创建:

apiVersion:v1

kind:Service

metadata:

name:web-svc

spec:

type:ClusterIP

selector:

app:web

ports:

-port:80

targetPort:80创建Ingress配置文件web-ingress.yaml:

apiVersion:networking.k8s.io/v1

kind:Ingress

metadata:

name:web-ingress

spec:

tls:

-hosts:

-api.test.cka

secretName:test-tls

rules:

-host:api.test.cka

http:

paths:

-path:/

pathType:Prefix

backend:

service:

name:web-svc

port:

number:80执行kubectlapply-fweb-ingress.yaml完成配置。验证访问:执行kubectlgetingressweb-ingress获取Ingress控制器的IP地址,执行以下命令测试访问:

curl-khttps://api.test.cka--resolveapi.test.cka:<INGRESS_IP>可正常返回后端web服务的响应,配置完成。试题5RBAC权限配置要求在集群中创建一个名为dev-user的ServiceAccount,位于ns-dev命名空间下,授予该ServiceAccount对ns-dev命名空间下的Pod、Deployment、Service资源拥有list、get、watch、create、delete权限,不允许访问其他资源和其他命名空间,请完成配置并验证。参考答案:创建命名空间和ServiceAccount:

kubectlcreatensns-dev

kubectlcreatesadev-user-nns-dev创建RBAC配置文件dev-rbac.yaml:

apiVersion:rbac.authorization.k8s.io/v1

kind:Role

metadata:

name:dev-role

namespace:ns-dev

rules:

-apiGroups:[""]

resources:["pods","services"]

verbs:["list","get","watch","create","delete"]

-apiGroups:["apps"]

resources:["deployments"]

verbs:["list","get","watch","create","delete"]

---

apiVersion:rbac.authorization.k8s.io/v1

kind:RoleBinding

metadata:

name:dev-rolebinding

namespace:ns-dev

subjects:

-kind:ServiceAccount

name:dev-user

namespace:ns-dev

roleRef:

kind:Role

name:dev-role

apiGroup:rbac.authorization.k8s.io执行kubectlapply-fdev-rbac.yaml完成权限绑定。验证权限:

#验证允许的权限

kubectlauthcan-igetpods--assystem:serviceaccount:ns-dev:dev-user-nns-dev

#返回结果为yes

kubectlauthcan-ideletedeployments--assystem:serviceaccount:ns-dev:dev-user-nns-dev

#返回结果为yes

#验证禁止的权限

kubectlauthcan-igetnodes--assystem:serviceaccount:ns-dev:dev-user-nns-dev

#返回结果为no

kubectlauthcan-igetpods--assystem:serviceaccount:ns-dev:dev-user-nkube-system

#返回结果为no所有验证符合要求,配置完成。试题6控制平面组件故障排查现有k8s集群中,控制平面节点的kube-controller-manager组件无法正常启动,该组件以静态Pod的形式运行在master节点,故障现象:执行kubectlgetnodes显示集群只有master节点,worker节点都为NotReady,执行kubectlgetpods-nkube-system显示kube-controller-manager状态为CrashLoopBackOff,请排查并修复故障。参考答案:进入master节点,查看kube-controller-manager容器日志获取故障原因:

crictlps-a|grepkube-controller-manager

#获取停止的容器ID,查看日志

crictllogs<容器ID>根据常见故障场景修复:场景1:证书权限错误,日志提示open/etc/kubernetes/controller-manager.conf:permissiondenied,修复命令:

sudochownroot:root/etc/kubernetes/controller-manager.conf

sudochmod600/etc/kubernetes/controller-manager.conf场景2:证书过期,执行sudokubeadmcertscheck-expiration可看到controller-manager证书已过期,修复命令:

sudokubeadmcertsrenewcontroller-manager场景3:配置文件参数错误,编辑静态Pod配置文件/etc/kubernetes/manifests/kube-controller-manager.yaml,修正错误的kube-apiserver地址、端口或参数,保存后kubelet会自动重启组件。修复后等待5分钟,执行kubectlgetpods-nkube-system,可看到kube-controller-manager状态变为Running,执行kubectlgetnodes所有worker节点状态变为Ready,故障修复完成。试题7Etcd数据备份与还原现有集群的etcd以静态Pod形式运行在master节点,etcd数据目录位于/var/lib/etcd,使用的证书文件为:ca证书/etc/kubernetes/pki/etcd/ca.crt,etcd证书/etc/kubernetes/pki/etcd/server.crt,etcd私钥/etc/kubernetes/pki/etcd/server.key,服务地址为:2379。要求完成以下操作:1.将整个etcd集群数据备份到/master-backup/etcd-backup.db文件,目录不存在请创建;2.模拟etcd数据损坏后,将备份的etcd-backup.db还原到etcd,验证集群数据正常。参考答案:备份操作:

sudomkdir-p/master-backup

ETCDCTL_API=3etcdctlsnapshotsave/master-backup/etcd-backup.db\

--endpoints=:2379\

--cacert=/etc/kubernetes/pki/etcd/ca.crt\

--cert=/etc/kubernetes/pki/etcd/server.crt\

--key=/etc/kubernetes/pki/etcd/server.key验证备份:

ETCDCTL_API=3etcdctlsnapshotstatus/master-backup/etcd-backup.db可输出备份的版本、哈希、数据库大小等信息,备份完成。还原操作:停止控制平面所有静态Pod:

sudomv/etc/kubernetes/manifests/*.yaml/tmp/

#等待kubelet停止所有容器,验证etcd已停止

crictlps|grepetcd

#无输出则证明已停止清空原有etcd数据,执行还原:

sudorm-rf/var/lib/etcd/*

ETCDCTL_API=3etcdctlsnapshotrestore/master-backup/etcd-backup.db\

--data-dir/var/lib/etcd恢复静态Pod配置,重启控制平面:

sudomv/tmp/*.yaml/etc/kubernetes/manifests/等待10分钟后,执行kubectlgetnodes、kubectlgetpods-A,所有节点和资源状态正常,还原完成。试题8HPA自动扩缩容配置现有default命名空间下的php-apacheDeployment,metrics-server已在集群中正常运行,要求创建一个HorizontalPodAutoscaler,名称为php-apache-hpa,目标CPU使用率为60%,最小副本数为2,最大副本数为10,完成配置后验证HPA状态正常。

参考答案:创建HPA配置文件hpa.yaml:

apiVersion:autoscaling/v2

kind:HorizontalPodAutoscaler

metadata:

name:php-apache-hpa

namespace:default

spec:

scaleTargetRef:

apiVersion:apps/v1

kind:Deployment

name:php-apache

minReplicas:2

maxReplicas:10

metrics:

-type:Resource

resource:

name:cpu

target:

type:Utilization

averageUtilization:60执行kubectlapply-fhpa.yaml,执行kubectlgethpaphp-apache-hpa,输出显示MINPODS=2,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论