听说过 OCI Runtime 不止 runc 还有 kata

OS:Ubuntu 22.04安装与配置通过 snap 安装 kata-containers,目前【2022-08-25】snap 中最新版本是 2.4.2 2022-06-08,但是官网的 release 已经发布到了 2.5.0。sudo snap install kata-containers
阅读更多

3 分钟带你搞定 Kubernetes CNI 插件开发

本文介绍 CNI 插件调用的时机、CNI 插件配置的读取,以及 CNI 插件的调用、执行。读完此文,您将清楚 CNI 插件的运行机制、调用细节,并能够自信地写出一个简单的 CNI 插件。CRI:containerdCNI plugin:flannelCNI 的调用时机源码位置:containerd
阅读更多

我敢打赌这不是你所认识的kubectl apply!

介绍与 kubectl apply 相关的几个概念、相关操作的主要逻辑,主要包括 Server Side Apply、Client Side Apply。一句话概述kubectl apply 执行时,先读取资源,再将资源更新到 apiserver。读取资源流程这里有被谭浩强i+++++i支配的恐惧(
阅读更多

CKA备考心得!这证没有值不值,想拿就拿就完了!

如果拿到证后,能报销考试费,或者有补贴,上车就完事了

报考

CKA or CKA-CN

  • CKA 英文试题、监考官和你用英文和你聊天、考试时出示证件为护照;
  • CKA-CN 中文试题、监考官用中文和你聊天、考试时出示证件为身份证。

报名

报完名交完钱后,后续的操作基本不在 linuxfoundation.cn

选考试时间

报考到考试期间的准备

Vim

或者其他在服务器 Terminal 中可以进行编辑的工具

Vim 用得越溜,编辑得越快,考试时做题的速度也就越快。

刷题

其他资料

考试开始前15分钟 Tips

  • 提前检查考试电脑的兼容性 WebDelivery Compatibility Check (examslocal.com)
  • 考试全程需要录屏、录音;需要一个无人的房间;桌子上面、下面不能出现纸质、电子资料;考试前会让你拿着电脑,转动摄像头,展示桌子上面、下面以及整个房间;
  • 不要说话、不要交谈;
  • 考试时使用插电源的笔记本电脑
  • 考试前会让你将其他进程都关掉(macOS 上就只剩下 Finder浏览器两个进程);
  • 准备好、调试好梯子以备不时之需(考试时没有使用梯子,但刚进入考试界面时,页面载入特别慢);
  • 考官的作用:
    • 给你下发指令,做考试前准备;
    • 当你有问题时,和你网聊;
    • 当时间快到时,给你提醒。

考试开始后

进入考试界面后,先简单设置一下 vim、bash,方便在后面答题中的使用。

Vim

简略的 Vim 常用配置 ~/.vimrc,可以提高 Vim 的使用幸福感(考试时需要凭记忆手动配置)。

1
2
3
4
5
6
7
8
9
10
# 显示行号,方便移动
set nu
# 上色,不上色可能看不清
syntax on
# 按下 Tab 键时,Vim 显示的空格数。
set tabstop=2
# 在文本上按下>>(增加一级缩进)、<<(取消一级缩进)或者==(取消全部缩进)时,每一级的字符数。
set shiftwidth=2
# 由于 Tab 键在不同的编辑器缩进不一致,该设置自动将 Tab 转为空格。
set expandtab

快捷命令

  1. 检查是否配置了 kubectl 命令补全(按 tab 是否有提示)或通过 source <(kubectl completion bash) 来设置命令补全;
  2. kubectl 创建别名 alias k=kubectl

考试中

开始每一道题目之前,需要注意一下3点是否符合题意:

  • context
  • namespace
  • node

操作完了之后记得 k describe/get 相应的资源看看,检查一下。

快速命令

  1. 使用 kubectl create/run 来创建资源;

    当其创建的资源不满足要求时,可以考虑使用下面的模式答题

    k create/run xxxxxx --dry-run=client -o yaml > 1.yaml

    将生成好的 yaml 保存到本地

    vim 1.yaml

    然后用 vim 之类的工具编辑

    k apply -f 1.yaml

    再提交给 k8s

  2. 使用 kubectl expose 来暴露服务;

  3. k edit 直接修改资源;

  4. --all-namespace => -A

  5. --namesapce => -n

救命命令

  • --help/-h
  • k explain pods.spec.containers 查看某个资源有哪些具体字段及说明

最后的倔强

kubernetes.io 中使用搜索功能搜索关键字。只要在文档中找到了相应的关键字,基本上就能获取到题目相关的 yaml。将 yaml 粘贴保存到本地后,用 Vim 编辑,然后 apply。

其他

  • 不是越往后越难,该跳就跳,不要浪费时间;
  • 没搞定的题可以打标签,做完一遍后,在下拉菜单回顾时,可以很清楚的看到;
  • 考试界面有个做笔记的 Web 应用,可以用来暂存一些信息。

印象比较深刻的题

k8s 故障恢复

印象中是使用 kubeadm 安装的 k8s 集群,所以得熟悉一下用 kubeadm 搭建 k8s 集群。

  • Master 节点问题

    • 看 kube-system 命名空间下的 pod 是否正常。可考虑看异常 pod 的日志

      1
      k -n kube-system logs xxxx
  • Node 节点 kubelet 启动(由 systemd 托管)问题

    • 看 kubelet 进程状态 systemctl status kubelet
    • 看 kubelet 日志 journalctl -xefu kubelet
    • 看 kubelet 命令是否存在(xxx.service 中定义的 kubelet 路径是否存在);
  • Node 节点 join 问题

    • 当修复好 Node 节点上面的 kubelet 问题后,在 Master 节点上面,通过 kubeadm 重新生成 bootstrap-token

      1
      kubeadm token create --print-join-command
      • 再使用 kubeadm join xxxxx,将 Node 节点加入集群。

记录某个操作

命令行里面加 --record 参数

etcd 的备份与恢复

基本会考,但是不难,就两条命令记下就好。证书路径别记错了。

ingress & egress(网络策略)

多容器Pod与sidecar

  • 多个容器共享同一个目录

印象中这道题我没做完,错误理解题意了,修改 yaml 贼慢,并且时间来不及了。

最后

祝愿各位明天拿证!!!

在 Kubernetes 中遇见 NFS 存储

当在 K8s 中使用到 NFS 类型的存储时,首先需要搭建一个 NFS 服务,另外注意一个挂载路径问题,就能愉快地玩耍它啦。安装NFS服务sudo apt install -y nfs-kernel-server rpcbind创建目录 ~/nfs 作为共享目录,并在该目录下,新建一个文件 date
阅读更多

Kubernetes 中 apiserver 加载 schema 流程

在 apiserver 初始化、启动时,会加载所有能识别的 schema。加载的过程通过 import pkg 后,触发对应包下 init() 方法来加载。入口cmd/kube-apiserver/apiserver.go: 初始化 apiserver 命令行,并运行。func main() {co
阅读更多

Helm3进行template时如何处理Capabilities.KubeVersion字段

在 helm3 中有一个 Capabilities.KubeVersion 字段,可以用来标识目标 Kubernetes 集群的版本,同时在 helm 中,可以通过模板语言,使用这个值来达到兼容性处理的目标。那么这个值该如何做,才能跟随目标集群变动呢?场景使用到 Capabilities.KubeV
阅读更多

Kubernetes 如何关闭一个 Pod

本文主要求证一个问题:Pod 生命周期中执行 preStop 的时长是否计入 terminationGracePeriodSeconds 中。这个问题在 https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-ter
阅读更多

从动图来理解 Raft 协议关键概念

节点状态FollowerCandidateLeaderLearner领导选举(Leader Selection)节点的初始状态为 Follower。选举超时(Election Timeout)当处于 Follower 状态的节点没有收到 Leader 节点的心跳时,会开启计时,经过 Election
阅读更多