【01】Kubernets:捋一捋概念性东西

写在前面的话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 集群一些概念性的东西就说到这里,后续咱们会通常使用一边进行更详细的学习,本章节的内容尽量心底有个底。