面向 Kubernetes 编程: Kubernetes 是下一代操作系统

摘要

此文章适合没有任何 Kubernetes/容器/Docker 经验的同学 — 在不久的将来,你不懂如何操作 Kubernetes 接口,就等于现在的你不懂最普通的 Linux 命令。

导言

此文章着重介绍如何在入门阶段使用 Kubernetes,以及要面向 Kubernetes 编程带来的优势,不会介绍复杂的 Kubernetes 架构、实现。因此此文章适合没有任何 Kubernetes/容器/Docker 经验的同学,对 Kubernetes 有了解的同学也可以从此文章里面获取一些灵感,可以更加酷炫的玩转 Kubernetes。

希望在阅读完此文章之后,你可以从 “我需要一个 Linux VM 做开发、测试和部署”,变成 “我需要一个 Kubernetes 做开发、测试和部署”。

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:

功能/名词单机 LinuxKubernetes说明
Shell, CMDsh, bashkubectlkubectl 是 Kubernetes 的 shell 工具,有了 kubectl 你就可以连接并管理 Kubernetes 这个超级虚拟机了。
用户,登录 LinuxUser, Group, ssh 登录kubeconfig 文件类似 Linux ssh 的 .key 文件,用户使用 kubeconfig 访问 Kubernetes 就自带了用户信息。Kubernetes 能根据用户限制权限,也能限制用户能使用的资源。kubectl 使用 kubeconfig 访问 Kubernetes 就好比使用 .ssh key 访问 LinuxKubernetes 集群管理员(或者自动化的申请系统)为用户颁发 kubeconfig 文件。
进程进程PodPod 就是 Kubernetes 这个 “超级虚拟机” 的进程。
管理进程ps, killkubectl get pod, kubectl delete pod发布、升级、管理 “进程”(或者说应用)
配置管理登录各个 Linux VM,替换机器上的文件。kubectl apply -f ./cm.yaml使用 ConfigMap 管理应用的配置文件,一次提交,进程的每个实例自动生效新的配置。由于篇幅管理,使用 ConfigMap 配置应用(“进程”)启动参数不在此文章里面举例。
发布、管理、升级应用在 Linux 上面发布一个应用,需要一顿疯狂的操作:先阅读如何发布、参数有什么、下载二进制包、搞定一些配置文件,然后运行应用。kubectl apply -f ./my-app.yamlmy-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删除。

编辑于

关注时代Java

关注时代Java