写在前面的话docker
docker 先告一段,如今开始进入 Kubernets(K8S) 的学习阶段,在学习过程当中,可结合以前学的 docker swarm 比对着理解。数据库
关于 K8Sapi
先来看一下两个 logo:架构
docker 是 “码头工人”,K8S 是 “舵手”,简单且直接。负载均衡
那 K8S 究竟是啥?这得从编排工具提及,以前学过 docker 自带的 docker swarm。elasticsearch
对于编排工具,网上是这样说的:分布式
编排工具是能扩展管理容器,实现跨主机通讯,指定容器运行关系,实现复杂程序简单运行的工具。工具
截至目前,有几款比较出名的须要知道一下:oop
1. docker 自己的 docker machine + swarm + compose。性能
2. mesos + marathon:系统资源调度,可以调度 hadoop 或者容器,并不算专业的容器编排工具。
3. Kubernets(K8S):将容器归类,以 Pod 管理(市场核心)。
和 docker 同样,K8S 也是 Go 语言开发,由谷歌根据本身内部容器调度系统 Borg 重写。咱们彷佛看到了 Go 语言的将来。
选择 K8S 的理由:
1. 自动装箱,自动部署,保证服务可用性。
2. 自我修复,在某个容器 down 掉之后会自动启动新的。
3. 自动水平扩展,服务发现,负载均衡。
4. 自动发布,回滚。
5. 支持密钥和配置管理,能将服务的配置经过服务来加载,而不用本地配置,保证了配置的一致性。
6. 存储编排和任务批处理。
其实这些东西单纯的写出来,很干涩,也很懵逼,因此只有个印象就行,后面会慢慢经过实践来理解。
K8S 集群
既然上了 K8S,就别再想单机怎么工做了。
在 K8S 集群中有两种角色:Master / Node,和 docker swarm 相似,Master 和 Worker,叫法不一样而已。
Master 做为集群中枢,意味着集群的操做都须要在它上面执行,因此尽量多节点高可用,咱们测试资源有限就单节点了。
Node 做为干活的节点,没啥数量限制,大于 1 就行。用于运行 Pod。
这里引入了一个概念,Pod。那啥是 Pod?
首先咱们要记住一点:
K8S 能调度的最小单位是 Pod,不是 docker 容器。
Pod 和容器的区别在于:Pod 是将一个或多个关系很是密切的容器打包在一块儿造成的集合。
咱们能够经过 Master 节点发出指令来管理 Pod 怎么运行,运行多少,使用多少资源等。
举个例子:假如要搭建一个 LAMP 环境,虽然几者看似有很大关系,但实际关系又不紧密,对于这种服务,通常将其拆为单独 Pod 运行。
K8S 集群部署很难,有个很直接的难点就在于 K8S 光内部通讯一共就须要 5 套证书:
1. etcd 内部通讯须要一套证书。
2. etcd 与外部通讯须要一套证书。
3. APIServer 间通信须要一套证书。
4. APIServer 与 Node 通讯须要一套证书。
5. Node 与 Node 间通讯须要一套证书。
值得庆幸的是,这些证书,咱们已经能够实现自动生成。
这里能够简单谈谈本身对于 K8S 的见解,该见解只表明我本身:
K8S 真的很香,但这并不意味着它适用于我全部的服务,为了便于维护和故障排除,更为了下降风险,对于数据库这一类有状态且很重要的服务,我仍是建议单独运行。
关于 Master 和 Node
通用集群架构图:
Master 和 Node 细化:
Master 有三个重要组件:
1. APIServer:请求入口,负责解析,处理请求,即网关。
2. Scheduler:调度器,请求到达后,计算 Node 的资源状况,将服务调度到适合的 Node,而后该节点的 Kubelet 启动和操做 Pod。
3. Controller-manager:控制管理器,统一管控资源,监控 Master 节点的健康状态,给 Master 节点作高可用。
Master 节点其余组件:
etcd:分布式高性能键值存储数据库,保存集群对象状态信息。apiserver 的全部操做都保存在这里,因而可知其重要性。
在前面 docker 跨节点通讯的时候咱们也用到了它,忘了的能够回头捋一捋。
Node 节点有三个重要组件:
1. Kubelet:至关于 K8S 的 agent,有点像 Zabbix 的 agent。检测当前节点的健康状态,和 apiserver 交互。
2. Kube-proxy:为当前节点 Pod 生成 iptables 或者 ipvs 规则,实现将请求调度到 Pod。和 apiserver 进行通讯,及时更新规则。
3. Container engine:不仅是 docker,K8S 并不是只能编排 docker,还有 RKT 这些。
扩展:关于 Pod 调度实现,在 1.1 版本之前是 userspace,1.11 版本之前是 iptables,以后都是 ipvs。提升调度性能。
除了以上须要运行的核心组件之外,K8S 还推荐使用一些附件(add-ons):
1. kube-dns:负责给 K8S 提供 DNS 服务。
2. Igress Controller:为服务提供外网入口。
3. Heapster:提供资源监控。
4. Dashboard:提供 GUI 界面。
5. Federation:提供跨可用区集群。
6. Fluentd-elasticsearch:提供集群日志采集,只存不查。
小结
关于 K8S 集群一些概念性的东西就说到这里,后续咱们会通常使用一边进行更详细的学习,本章节的内容尽量心底有个底。