午夜咖啡午夜咖啡

jolestar 的文章与笔记。

Post

Kubernetes 学习中的安装链路摩擦

2019-06-08 21:30:59Post

很多人刚接触 Kubernetes 时,先撞上的并不是抽象难度,而是版本探测、镜像下载和依赖拉取这些安装层障碍。

很多人说 Kubernetes 难学,我当然同意它本身就有不少概念门槛。但如果把“新手为什么一开始就被劝退”这件事拆开看,真正先把人卡死的,往往还不是那些抽象概念,而是安装链路。

一个朋友之前就和我吐槽,光部署一套 k8s 就已经筋疲力尽了。

我自己的判断是,在国内环境里,部署复杂度里有相当大一部分其实是“墙”带来的额外成本。

比如早些年用 kubeadm 的时候,它自己先去访问外部接口探测版本,这一步就可能直接卡住。再往后,很多关键镜像要从 gcr.io 拉,镜像又经常拉不下来。

理论上当然有很多补救手段:

  • 命令行开代理
  • 提前把镜像手工拉下来
  • 把镜像地址改成国内源
  • 直接使用云厂商托管版 k8s

但问题在于,新手最缺的恰恰不是“解决方案列表”,而是判断力。

镜像那么多,配置项那么多,kubeletcontainer runtime、初始化脚本、网络插件又分散在不同环节里。你告诉一个刚接触的人“改一下配置就行”,其实等于没说。因为他根本不知道该从哪一层开始排查。

于是最后很多人形成的结论就变成:“Kubernetes 太复杂了。”

这句话当然不算错,但也不完全公平。因为这里面有不少痛苦,其实并不是 Kubernetes 架构设计本身带来的,而是外部网络环境把安装和学习路径扭曲了。

所以我对新手的建议一直比较实际:

  • 如果条件允许,先在国外主机或者国外云环境里把流程跑通。
  • 如果不方便,就直接先用国内云厂商托管好的 Kubernetes 服务。
  • 先把组件关系、调度模型、控制面和数据面这些核心概念学明白,再回头自己从零搭环境。

否则一上来就和镜像仓库、代理、版本探测、初始化脚本死磕,很容易把“学习 Kubernetes”变成“学习怎么和被扭曲的网络环境搏斗”。

这两件事不能说完全无关,但显然也不是同一件事。