此文章适合没有任何 Kubernetes/容器/Docker 经验的同学 — 在不久的将来,你不懂如何操作 Kubernetes 接口,就等于现在的你不懂最普通的 Linux 命令。
此文章着重介绍如何在入门阶段使用 Kubernetes,以及要面向 Kubernetes 编程带来的优势,不会介绍复杂的 Kubernetes 架构、实现。因此此文章适合没有任何 Kubernetes/容器/Docker 经验的同学,对 Kubernetes 有了解的同学也可以从此文章里面获取一些灵感,可以更加酷炫的玩转 Kubernetes。
希望在阅读完此文章之后,你可以从 “我需要一个 Linux VM 做开发、测试和部署”,变成 “我需要一个 Kubernetes 做开发、测试和部署”。
Kubernetes 是这几年非常热门的一个词汇,大概所有的软件工程师都已经听说过这个词。
那么 Kubernetes 到底是什么呢?可能 Google 会告诉你很多,但是我想告诉你的是:Kubernetes 是下一代操作系统;一个 Kubernetes 集群是一个资源无限大(可扩容)的虚拟机。而且,Kubernetes 的接口是是声明式的,是天然面向分布式系统而设计的(下面会详细介绍)。
说到这里,大家估计立刻就有疑问了。我想大概是这些:
Q: 那么,Linux、Windows 要被淘汰了?
A: 不会被淘汰,只是 Linux、Windows 是一个底层的单机操作系统。而我们这些普通的应用软件工程师将来都不会跟Linux 打交道了,都会使用 Kubernetes 这个更上层、同时功能也更强大的操作系统。
Q: 那么,我不学 Kubernetes 可以吗?
A: 不行!在未来不久的某一天,也许云厂商只卖 Kubernetes “虚拟机”了:阿里云不单独卖 ecs 了,亚马逊AWS,微软云,Google 云等各种云厂商都不卖 Linux 虚拟机了。如果你想买单机版的 Linux 虚拟机,他们都会一脸惊讶的问你,你买那么底层的、功能那么薄弱的计算机干什么?就像你现在从云厂商那里买不到一个还没有安装 Linux 的虚拟机一样。以后,云厂商交付的 “虚拟机” 必定是 “集群级别的虚拟机” ,而 “集群级别的虚拟机” 的操作系统就是 Kubernetes。
在不久的将来,你不懂如何操作 Kubernetes 接口,就等于现在的你不懂最普通的 Linux 命令。
Q: 那这样的话,我买不到 Linux 虚拟机,我连学习 Linux 的机会都没有了?
A: 当然不是,有了 Kubernetes,你可以在 1秒内自己搞一个任何 Linux 发行版本的 “单机虚拟机” 出来。
Q: Kubernetes 真的是一个操作系统? Show me....
A:
功能/名词 | 单机 Linux | Kubernetes | 说明 |
---|---|---|---|
Shell, CMD | sh, bash | kubectl | kubectl 是 Kubernetes 的 shell 工具,有了 kubectl 你就可以连接并管理 Kubernetes 这个超级虚拟机了。 |
用户,登录 Linux | User, Group, ssh 登录 | kubeconfig 文件类似 Linux ssh 的 .key 文件,用户使用 kubeconfig 访问 Kubernetes 就自带了用户信息。Kubernetes 能根据用户限制权限,也能限制用户能使用的资源。kubectl 使用 kubeconfig 访问 Kubernetes 就好比使用 .ssh key 访问 Linux | Kubernetes 集群管理员(或者自动化的申请系统)为用户颁发 kubeconfig 文件。 |
进程 | 进程 | Pod | Pod 就是 Kubernetes 这个 “超级虚拟机” 的进程。 |
管理进程 | ps, kill | kubectl get pod, kubectl delete pod | 发布、升级、管理 “进程”(或者说应用) |
配置管理 | 登录各个 Linux VM,替换机器上的文件。 | kubectl apply -f ./cm.yaml | 使用 ConfigMap 管理应用的配置文件,一次提交,进程的每个实例自动生效新的配置。由于篇幅管理,使用 ConfigMap 配置应用(“进程”)启动参数不在此文章里面举例。 |
发布、管理、升级应用 | 在 Linux 上面发布一个应用,需要一顿疯狂的操作:先阅读如何发布、参数有什么、下载二进制包、搞定一些配置文件,然后运行应用。 | kubectl apply -f ./my-app.yaml | my-app.yaml 可能是应用提供商提供的、面向 Kubernetes 发布应用的“菜单”文件(为什么叫“菜单”我后面会介绍)。只要提交这个“菜单”,应用就部署好了。Kubernetes 让一切简单,而且,它是分布式,是天然容灾的。只要向 Kubernetes 提交 Deployment 这样的“资源”即可,下文有介绍。 |
限制应用资源 | 一顿疯狂的操作,把应用进程的 Cgroup 限制好。 | 发布应用时已经做了 | Kubernetes 让一切简单。 |
分布式应用发布 | 在各个 Linux 虚拟机上面发布好应用,然后把他们组网。 | 发布应用时已经做了 | 还是那句话,Kubernetes 让一切简单。 |
分布式应用容灾 | 搞个监控,监控我们各个 Linux 虚拟机上面的应用是不是不健康了。不健康了的话,我们起床,来一次“一顿操作猛如虎”的故障恢复操作。 | / | 天然容灾,安心睡你的觉。 |
数据持久化,故障时数据迁移 | “一顿操作猛如虎” | 用 PV(持久化存储卷),容灾把应用的一个应用实例从 “节点一” 切换到了 “节点二”,都不用做任何数据迁移。新的应用实例起来就能使用老数据。 | 还是那句话,Kubernetes 让一切简单。我都不用关心这个事情。(由于篇幅管理,下文的例子中也不会涉及 PV 的例子) |
“一顿操作猛如虎” 听起来很酷,但是你在做一些没必要的事情,同时你做了这些事情并不讨好你的老板,可能在因为你的失误操作引起更大的故障和问题。
面向 Kubernetes 做最简单的操作,达到最佳的效果,才是更酷的事情。
A: 行了行了,别说那么多了,我还是需要一个 Linux VM。
Q: 好的,我给您一个 Kubernetes,然后给你一个 基础 OS Pod “菜单”文件,然后您自己就可以创建任何一个 Linux 发行版、任何一个 Linux 版本的的 Linux VM了。在文章的最后会有介绍。
本文系作者在时代Java发表,未经许可,不得转载。
如有侵权,请联系nowjava@qq.com删除。