欢迎大家来到IT世界,在知识的湖畔探索吧!
什么是CKA考试?
CKA (Certified Kubernetes Administrator) 考试是一种远程在线、有监考、基于实操的认证考试,需要在运行Kubernetes的命令行中解决多个任务。CKA认证考试是专为Kubernetes管理员、云管理员和其他管理Kubernetes实例的IT专业人员而设的。已获得认证的K8s管理员具备了进行基本安装以及配置和管理生产级Kubernetes集群的能力。
考CKA有什么用?
- 证明你的实力,提高竞争力: 云原生发展趋势日益迅猛,越来越多的公司已经开始使用kubernetes作为核心容器调度平台,因此在诸多岗位都有明确的CKA认证要求。
- 公司招投标:有过招投标经验的同学应该了解招投标的过程,这块就不详细叙述,通过CKA证明你们公司拥有云原生技术实力,同时可通过CKA认证提供公司投标评分
- 申请KCSP认证:每个公司有3名CKA员工就可以申请KCSP
考试内容
通过考试后您将会获得由Linux基金会和云原生计算基金会(CNCF)颁发的CKA (Certified Kubernetes Administrator)证书,如下:
考试规则
考试模式:线上考试
考试时间:2小时
认证有效期:3年
软件版本:Kubernetes v1.24
重考政策:可接受1次重考
经验水平:中級
考试过程中你的PC机是可以通过浏览器访问Kubernetes官网的,这一点很重要,相当于“开卷考试”,所以没事多看看官网文档很重要!知道考试内容在哪里,学会关键词搜索。
https://kubernetes.io/zh-cn/docs/home/
更多关于考试的详细内容可以前往linuxfoundation社区官网查看
https://training.linuxfoundation.cn/certificates/1
考试技巧
1. 别名设置
考试多半是通过命令行直接操作,已到达考试目标,频繁的命令不仅容易出错而且比较占用时间,2小时很宝贵!通过别名来偷个懒吧!
vi ~/.bashrc --- alias k='kubectl' alias kg='k get' alias kd='k describe' alias kl='k logs' alias kc='k create' source <(kubectl completion bash) source <(kubectl completion bash | sed 's/kubectl/k/g' ) complete -F __start_kubectl k ---
欢迎大家来到IT世界,在知识的湖畔探索吧!
2. 资源简称-SHORTNAMES
下面只是列举了部分比较常见的资源,因为k8s资源很多,像查看更多的话,可以执行 kubectl api-resources 命令来查看,表格中的简称一定要记住!尤其是英文不好的同学。
3. 学会看文档
记住“这是一场开卷考试”,所以不要想着死记硬背那一堆yaml文件,学会使用搜索,这将事半功倍,例如:想要知道deployment里面有哪些可以配置的字段,直接在官网文档搜索 deployment 即可,而且支持中文,考试中让你创建一个 deployment,你完全可以把 yaml 粘贴过去,通过 vi 命令编辑一些名称和docker image 即可,到这是不是感觉离通过考试又进了一步!
4. Help大法好
学会 kubectl xxx –help,会有不一样的惊喜。
5.牢记pod的状态
在k8s集群中,我们创建最多的资源应该就是pod了,因为这直接关系到我们的服务是否正常,了解pod不同状态所代表的含义是更加有利于帮助我们排查问题
考试练习
集群安装
平时学习、练习时是可以用kubeadm去安装集群,目前这是官方比较推荐的方式。
1) 初始化集群
欢迎大家来到IT世界,在知识的湖畔探索吧!kubeadm init --kubernetes-version 1.24 \ --pod-network-cidr=172.16.0.0/16 \ --apiserver-advertise-address=167.235.78.191
2) 添加节点
kubeadm join 192.168.1.253:6443 --token ptildy.2nyolwhkd8g1p8pq \ --discovery-token-ca-cert-hash sha256:baab546b87f6fbfc1342d4092aa18601b2c27c3
3) 维护、移除节点
欢迎大家来到IT世界,在知识的湖畔探索吧!cordon 将节点标记为不可调度 drain 节点准备维护,将有问题的node中的pod迁移到其他正常的node上 taint 更新一个或多个节点上的错误
4) 恢复节点
uncordon 将节点标记为可调度
工作负载:
1) Deployment(无状态应用):是kubernetes在1.2版本中引入的概念,用于更好的解决Pod的编排问题,Deployment在内部使用了ReplicaSet来实现目的,我们可以把Deployment理解为ReplicaSet的一次升级,两者的相似度超过90%。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
2) StatefulSet(有状态应用):和 Deployment 类似, StatefulSet 管理基于相同容器规约的一组 Pod。但和 Deployment 不同的是, StatefulSet 为它们的每个 Pod 维护了一个有粘性的 ID。这些 Pod 是基于相同的规约来创建的, 但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID。
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx # 必须匹配 .spec.template.metadata.labels
serviceName: "nginx"
replicas: 3 # 默认值是 1
minReadySeconds: 10 # 默认值是 0
template:
metadata:
labels:
app: nginx # 必须匹配 .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: registry.k8s.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "my-storage-class"
resources:
requests:
storage: 1G
3) DaemonSet:守护进程,DaemonSet会在每个k8s 节点运行一个pod,当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。比如:Prometheus监控、日志收集的系统都需要
apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-elasticsearch namespace: kube-system labels: k8s-app: fluentd-logging spec: selector: matchLabels: name: fluentd-elasticsearch template: metadata: labels: name: fluentd-elasticsearch spec: tolerations: # 这些容忍度设置是为了让该守护进程集在控制平面节点上运行 # 如果你不希望自己的控制平面节点运行 Pod,可以删除它们 - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule containers: - name: fluentd-elasticsearch image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2 resources: limits: memory: 200Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log
4) Job: 任务,通常任务是临时性的,Job 会创建一个或者多个 Pod,Pod中的程序计算完成后会自动终止
apiVersion: batch/v1 kind: Job metadata: name: pi spec: template: spec: containers: - name: pi image: perl:5.34.0 command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] restartPolicy: Never backoffLimit: 4
服务和网络:
1) service: 将运行在一组 Pods上的应用程序公开为网络服务的抽象方法。简单来说就是起到一个自动注册和对集群内部服务访问的作用。试想一下因为pod重建后IP都会变,想要被其他服务一直被访问不太现实,而且多个pod副本难道自己要搭建一个负载均衡,然后还要考虑pod怎么注册进来?不需要!这就是 service 干的活儿。
通过 selector 可以选择这个 service 后端的服务是什么,类似配置SLB负载均衡的Backend
apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app.kubernetes.io/name: MyApp ports: - protocol: TCP port: 80 targetPort: 9376
2) ingress:
提供将集群内部服务暴露到外部的能力,简单理解就是起到一个负载均衡器的作用,目前开源的ingress有 nginx-ingress、traefik,商用的F5、A10都有
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: minimal-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: ingressClassName: nginx rules: - http: paths: - path: /app pathType: Prefix backend: service: name: my-app port: number: 80
存储
1) 持久卷(Persistent Volume)简称 PV,PV是集群中的一块存储,可以由管理员事先制备, 或者使用存储类(Storage Class)来动态制备。持久卷是集群资源,就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样, 也是使用卷插件来实现的,只是它们拥有独立于任何使用 PV 的 Pod 的生命周期。此 API 对象中记述了存储的实现细节,无论其背后是 NFS、iSCSI 还是特定于云平台的存储系统
apiVersion: v1 kind: PersistentVolume metadata: name: foo-pv spec: storageClassName: "" claimRef: name: foo-pvc namespace: foo
2) 持久卷申领(PersistentVolumeClaim)简称PVC,PVC 表达的是用户对存储的请求。概念上与 Pod 类似。Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源。Pod 可以请求特定数量的资源(CPU 和内存);同样 PVC 申领也可以请求特定的大小和访问模式 (例如,可以要求 PV 卷能够以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: test-claim annotations: volume.beta.kubernetes.io/storage-class: "nfs" spec: storageClassName: "nfs" accessModes: - ReadWriteMany resources: requests: storage: 10Gi
3) 存储类 (storageClass)简称SC,通过SC不需要管理员单独去创建PV,普通用于只需要根据需要指定用哪个SC,然后在PVC中指定存储卷大小就可以自动申请下来存储卷
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs provisioner: fuseim.pri/ifs parameters: archiveOnDelete: "true" reclaimPolicy: Retain
4) 存储类型:
emptyDir: Pod 启动时为空,存储空间来自本地的 kubelet 根目录(通常是根磁盘)或内存,使用场景:如果Pod被删除,那么数据也会被删除,不具备持久化。Pod内的容器,需要共享数据卷的时候,使用的临时数据卷。
hostpath:直接挂载主机目录, 如果需要通过容器直接读取宿主机磁盘中的内容,那么可以通过挂载hostpath 的卷实现
故障排除
1) 常用工具:
kubectl describe: 当任何资源没有进入一个正常状态的时候,都可以通过kubectl describe查看这个资产的事件信息
kubectl logs:这个命令主要对于pod资源使用,当pod 进入 running 状态后,服务已经有问题,这时候可能程序里面有报错,可以使用 kubectl logs 查看pod中应用的具体日志
2) 网络:
遇到网络问题可使用 ping 、mtr、telnet 等命令测试网络连通性,判断网络故障点
总结
勤加练习是通过 CKA 考试的关键,本文只列举了部分实操内容,更多考试内容以及详细信息可以前往CNCF官网或Linux foundation查看,最后祝各位考试顺利通过!
关于HummerRisk
HummerRisk 是开源的云原生安全平台,以非侵入的方式对云原生环境进行全面安全检测。
针对于 K8s 容器云的安全,我们提供多方面的检测能力,可以帮助用户快速发现K8s集群中的各种安全问题。
欢迎关注我们了解更多。
https://github.com/HummerRisk/HummerRisk
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/81486.html