LabHub
学习 学习路径 课程

Kubernetes 发行版 — 自己搭

默认值决定了你能做什么

在 LabHub 中继续学习

一句话总结

轻量级发行版的差异不是功能,而是基本值,那个基本值决定了在运营中可以做的事情。

概念图: 基本值不同 · sqlite · 真正的etcd · 默认包含traefik ingress和local-path配置器。

为什么要知道基本值后再选择呢?

k3s和k0s都是以单个二进制文件部署的轻量级容器管理系统。虽然看起来相似,但基本值不同,而这些基本值决定了在运营中可以做的事情。

仓库

k3s的基本存储库是sqlitekine这个层模仿了etcd的API,然后放上了sqlite。对于轻量级的单机来说足够了。etcdctl也不能使用成员管理。

k0s--enable-worker设置后是真正的etcd。可以实际处理快照、成员管理、恢复等。CKA的etcd问题和实际的控制平面运营与此相关。

需要注意的是k0s的--single是模式。虽然看起来很简单,但那边是kine(sqlite)k0s etcd member-list就这样拒绝。

Error: wrong storage type: kine

基本组成要素

k3s 默认包含traefik ingress和local-path配置器。 在开发环境中很方便。k0s什么都不放,直接调整所需的。在运营中,这边更好——因为以后清理默认配置会更麻烦。

大幅度

k0s的基本频段(板10.244.0.0/16·服务10.96.0.0/12)与**标准容器管理系统相同。**所以如果在其他群集中叠加设置的话,就会叠加。k3s的10.42/10.43因为是非标准,所以偶然避免了碰撞。

与其说哪一个是正确的,不如说了解并选择自己环境的替代品才是正确的。而且,如果偶然地依靠被推开的状态,那么在更换发行版的那一刻,陷阱就会复活。

不管以什么标准来选择

选择发行版不是根据喜好,而是根据在哪里放什么来决定。

情况 正确的事情 理由
边缘·IoT·单节点 k3s 双精度,内存512MB以上
开发用本地 kind, minikube 制作和丢弃速度快
想照样学习标准 kubeadm 认证考试和文档都以此为前提
自动 k0s, Cluster API 声明性地创建多个群集
想减少管理负担 管理型(EKS·GKE) 不看控制平面

如果是考试准备的话,就是kubeadm。k3s使用SQLite代替etcd,控制平面是 因为是同一过程,所以在考试中问到的“etcd备份”、“静态板修改”、“证书更新” 就那样不行。舒服和学习是不同的。

基本值造成的差异

即使是相同的容器管理,基本内容也不同,这决定了实践和运营。 切开。

kubeadm k3s k0s
数据存储 etcd SQLite(基本),等d可行 etcd(基本),kine可行
CNI 无 — 直接安装 Flannel Kube-router
Ingress Traefik
LoadBalancer ServiceLB(klipper)
存储类 local-path

第一次用kubeadm搭建的话,**节点会停留在NotReady状态。**不是故障 因为没有CNI。如果不知道这个的话,在第一次安装时要花一个小时。

相反,k3s包含了所有内容,所以很方便,但需要知道如何减去基本值。

# Traefik 과 ServiceLB 를 빼고 직접 고른 것을 쓴다
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik --disable=servicelb" sh -

搬的时候会有什么问题吗?

更换发行版的事情比想象中要经常发生。遇到的问题通常有三个。

在实际工作中真正重要的东西

**如果要处理etcd,从存储库开始确认。**在kine(sqlite)上etcdctl不能使用成员管理、Snapchat恢复。k0s也--single因为模式是kine,所以命令是wrong storage type: kine拒绝。

叠加建立时,首先检查大域是否重叠。 k0s的基本大域与标准容器管理系统相同,如果在其他群集中建立,就会发生冲突。k3s之所以成功,不是因为设计,而是因为非标准大域偶然地腾出了空间,一旦更换发布版,陷阱就会重新出现。

**作为基本配置的组成部分,以后要移除会更麻烦。**在开发环境中,包含traefik和local-path的比较方便,但在运营中,最好直接选择所需的。

在下次实习中建立k0s,进行备份和恢复一圈。