写点什么

Kubernetes 认证管理员(CKA)必过心得

作者:HummerCloud
  • 2022 年 10 月 10 日
    北京
  • 本文字数:4968 字

    阅读完需:约 16 分钟


什么是 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---
复制代码


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) 初始化集群


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:581214693222568860b1887121aab546b87f6fbfc1342d4092aa18601b2c27c3
复制代码


3) 维护、移除节点


cordon  将节点标记为不可调度drain  节点准备维护,将有问题的node中的pod迁移到其他正常的node上taint    更新一个或多个节点上的错误
复制代码


4) 恢复节点


uncordon  将节点标记为可调度
复制代码


工作负载

  1. Deployment(无状态应用)

是 kubernetes 在 1.2 版本中引入的概念,用于更好的解决 Pod 的编排问题,Deployment 在内部使用了 ReplicaSet 来实现目的,我们可以把 Deployment 理解为 ReplicaSet 的一次升级,两者的相似度超过 90%。


apiVersion: apps/v1kind: Deploymentmetadata:  name: nginx-deployment  labels:    app: nginxspec:  replicas: 3  selector:    matchLabels:      app: nginx  template:    metadata:      labels:        app: nginx    spec:      containers:      - name: nginx        image: nginx:1.14.2        ports:        - containerPort: 80
复制代码


  1. StatefulSet(有状态应用)

和 Deployment 类似, StatefulSet 管理基于相同容器规约的一组 Pod。但和 Deployment 不同的是, StatefulSet 为它们的每个 Pod 维护了一个有粘性的 ID。这些 Pod 是基于相同的规约来创建的, 但是不能相互替换:无论怎么调度,每个 Pod 都有一个永久不变的 ID。


apiVersion: v1kind: Servicemetadata:  name: nginx  labels:    app: nginxspec:  ports:  - port: 80    name: web  clusterIP: None  selector:    app: nginx---apiVersion: apps/v1kind: StatefulSetmetadata:  name: webspec:  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: 1Gi
复制代码


  1. DaemonSet

守护进程,DaemonSet 会在每个 k8s 节点运行一个 pod,当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。比如:Prometheus 监控、日志收集的系统都需要


apiVersion: apps/v1kind: DaemonSetmetadata:  name: fluentd-elasticsearch  namespace: kube-system  labels:    k8s-app: fluentd-loggingspec:  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
复制代码


  1. Job

任务,通常任务是临时性的,Job 会创建一个或者多个 Pod,Pod 中的程序计算完成后会自动终止


apiVersion: batch/v1kind: Jobmetadata:  name: pispec:  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: v1kind: Servicemetadata:  name: my-servicespec:  selector:    app.kubernetes.io/name: MyApp  ports:    - protocol: TCP      port: 80      targetPort: 9376
复制代码


  1. ingress

提供将集群内部服务暴露到外部的能力,简单理解就是起到一个负载均衡器的作用,目前开源的 ingress 有 nginx-ingress、traefik,商用的 F5、A10 都有


apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  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: v1kind: PersistentVolumemetadata:  name: foo-pvspec:  storageClassName: ""  claimRef:    name: foo-pvc    namespace: foo
复制代码


  1. 持久卷申领(PersistentVolumeClaim)

简称 PVC,PVC 表达的是用户对存储的请求。概念上与 Pod 类似。Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源。Pod 可以请求特定数量的资源(CPU 和内存);同样 PVC 申领也可以请求特定的大小和访问模式 (例如,可以要求 PV 卷能够以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载


kind: PersistentVolumeClaimapiVersion: v1metadata:  name: test-claim  annotations:    volume.beta.kubernetes.io/storage-class: "nfs"spec:  storageClassName: "nfs"  accessModes:    - ReadWriteMany  resources:    requests:      storage: 10Gi
复制代码


  1. 存储类 (storageClass)

简称 SC,通过 SC 不需要管理员单独去创建 PV,普通用于只需要根据需要指定用哪个 SC,然后在 PVC 中指定存储卷大小就可以自动申请下来存储卷


apiVersion: storage.k8s.io/v1kind: StorageClassmetadata:  name: nfsprovisioner: fuseim.pri/ifsparameters:  archiveOnDelete: "true"reclaimPolicy: Retain
复制代码


  1. 存储类型

emptyDir:  Pod 启动时为空,存储空间来自本地的 kubelet 根目录(通常是根磁盘)或内存,使用场景:如果 Pod 被删除,那么数据也会被删除,不具备持久化。Pod 内的容器,需要共享数据卷的时候,使用的临时数据卷。

hostpath:直接挂载主机目录, 如果需要通过容器直接读取宿主机磁盘中的内容,那么可以通过挂载 hostpath 的卷实现


故障排除

  1. 常用工具

kubectl describe:  当任何资源没有进入一个正常状态的时候,都可以通过 kubectl describe 查看这个资产的事件信息

kubectl logs:这个命令主要对于 pod 资源使用,当 pod 进入 running 状态后,服务已经有问题,这时候可能程序里面有报错,可以使用 kubectl logs 查看 pod 中应用的具体日志


  1. 网络

遇到网络问题可使用 ping 、mtr、telnet 等命令测试网络连通性,判断网络故障点


总结    

勤加练习是通过 CKA 考试的关键,本文只列举了部分实操内容,更多考试内容以及详细信息可以前往 CNCF 官网或 Linux foundation 查看,最后祝各位考试顺利通过!

关于 HummerRisk


图片


HummerRisk 是开源的云原生安全平台,以非侵入的方式解决云原生环境的安全和治理问题。核心能力包括混合云的安全治理和容器云安全检测。

针对于 K8s 容器云的安全,我们提供多方面的检测能力,可以帮助用户快速发现 K8s 集群中的各种安全问题。

欢迎关注我们了解更多。

​https://github.com/HummerRisk/HummerRisk​


发布于: 刚刚阅读数: 3
用户头像

HummerCloud

关注

还未添加个人签名 2022.09.07 加入

还未添加个人简介

评论

发布
暂无评论
Kubernetes 认证管理员(CKA)必过心得_云原生_HummerCloud_InfoQ写作社区