1、比对与 ZooKeeper,etcd 更量轻级1.etcd 是由 CoreOS 开发并维护的,灵感来自于 ZooKeeper 和 Doozer,提供了与ZooKeeper 相似的功能,它使用 Go 语言编写,并通过 Raft 一致性算法处理日志复制以保证强一致性。Raft 是一个新的一致性算法,适用于分布式系统的日志复制,Raft 通过选举的方式来实现一致性。Google 的容器集群管理系统 Kubernetes、开源 PaaS 平台 Cloud Foundry 和 CoreOS 的 Fleet 都广泛使用了 etcd。在分布式系统中,如何管理节点间的状态一直是一个难题,etcd 像是专门为集
2、群环境的服务发现和注册而设计,它提供了数据 TTL失效、数据改变监视、多值、目录监听、分布式锁原子操作等功能,可以方便的跟踪并管理集群节点的状态etcd简单:支持 curl 方式的用户 API(HTTP+JSON)安全:可选的 SSL 客户端证书认证快速:单实例每秒 1000 次读写能力可靠:使用 Raft 保证强一致性Etcd 的用景包括服(应场务发现Service Discovery)、消息布、均衡、发与订阅负载分布式通知、分布式、分布式列。如果与协调锁队你熟悉 ZooKeeper,你会发现 etcd 实了现ZooKeeper 的功能Node除了 Master,Kubernetes 集群中
3、的其他机器被称为 Node 节点,早期版本也称为 Minion 节点Node 节点才是 Kubernetes 集群中的工作负载节点,每个 Node 都会被 Master 分配一些工作负载(Docker 容器),当某个 Node 宕机,其上的工作负载会被 Master 自动转移到其他节点上去1.kubelet,负责 Pod 对应的容器的创建、启停等任务,同时与 Master 节点密切协作,实现集群管理的基本功能。一旦 Node 被纳入集群管理范围,kubelet 进程就会向 Master汇报自身的情报,这样 Master 可以获知每个 Node 的资源使用情况,并实现高效均衡的资源调度策略。而某
4、个 Node 超过指定时间不上报信息,会被 Master“判定为 失”联,Node 状态被标记为不可用(Not Ready),随后 Master“”会触发 工作负载大转移的自动流程;2.kube-proxy,实现 Kubernetes Service 的通信与负载均衡机制的重要组件;3.Docker Engine(docker),Docker 引擎,负责本机的容器创建和管理工作;NodePod 是最小部署单元,一个 Pod 由一个或多个容器组成,Pod 中容器共享存储和网络,在同一台 Docker主机上运行。同一个 Pod 里的容器共享同一个网络命名空间,可以使用 localhost 互相通信
5、 1.每个 Pod“”都有一个特殊的被称为 根容器 的 Pause 容器,还包含一个或多个紧密相关的用户业务容器;2.一个 Pod 里的容器与另外主机上的 Pod 容器能够直接通信;3.如果 Pod 所在的 Node 宕机,会将这个 Node 上的所有 Pod 重新调度到其他节点上;4.普通 Pod 及静态 Pod,前者存放在 etcd 中,后者存放在具体 Node 上的一个具体文件中,并且只能在此 Node 上启动运行;5.Docker Volume 对应 Kubernetes 中的 Pod Volume;6.每个 Pod 可以设置限额的计算机资源有 CPU 和 Memory;Request
6、s,资源的最小申请量;Limits,资源最大允许使用的量;PodPodPod、容器与 Node 关系 Endpoint(IP+Port)标识服务进程的访问点 Event是一个事件记录,记录了事件最早产生的时间、最后重复时间、重复次数、发起者、类型,以及导致此事件的原因等信息。Event 通常关联到具体资源对象上,式排查故障的重要参考信息;Endpoint、EventService Service 一个应用服务抽象,定义了 Pod 逻辑集合和访问这个 Pod 集合的策略。Service 代理 Pod 集合对外表现是为一个访问入口,分配一个集群 IP 地址,来自这个 IP 的请求将负载均衡转发后端
7、 Pod 中的容器。Service 通过 LableSelector 选择一组 Pod 提供服务。在 K8s 集群中微服务的负载均衡是由 Kube-proxy 实现的,在 K8s 的每个节点上都有一个Service“”其实就是我们经常提起的微服务架构中的一个 微服务,kubernetes 中的核心。通过分析、识别并建模系统中的所有服务为微服务Kubernetes Service,最终我们的系统由多个提供不同业务能力而又彼此独立的微服务单元所组成,服务之间通过 TCP/IP 进行通信,从而形成了我们强大而又灵活的弹性网络,拥有了强大的分布式能力、弹性扩展能力、容错能力ServiceService
8、Service 如上图示,每个 Pod 都提供了一个独立的 Endpoint(Pod IP+ContainerPort)以被客户端访问,多个 Pod 副本组成了一个集群来提供服务,一般的做法是部署一个负载均衡器来访问它们,为这组Pod 开启一个对外的服务端口如 8000,并且将这些 Pod 的 Endpoint 列表加入 8000 端口的转发列表中,客户端可以通过负载均衡器的对外 IP地址+服务端口来访问此服务。运行在 Node 上的 kube-proxy 其实就是一个智能的软件负载均衡器,它负责把对 Service 的请求转发到后端的某个 Pod 实例上,并且在内部实现服务的负载均衡与会话保
9、持机制。Service 不是共用一个负载均衡器的 IP 地址,而是每个 Servcie分配一个全局唯一的虚拟 IP 地址,这个虚拟 IP 被称为 Cluster IP。ServiceNode IP Node 节点的 IP 地址,是 Kubernetes 集群中每个节点的物理网卡的 IP 地址,是真是存在的物理网络,所有属于这个网络的服务器之间都能通过这个网络直接通信;Pod IP Pod 的 IP 地址,是 Docker Engine 根据 docker0 网桥的 IP 地址段进行分配的,通常是一个虚拟的二层网络,位于不同 Node 上的 Pod 能够彼此通信,需要通过 Pod IP 所在的虚
10、拟二层网络进行通信,而真实的 TCP 流量则是通过 Node IP 所在的物理网卡流出的;Cluster IP Service 的 IP 地址。特性如下:仅仅作用于 Kubernetes Servcie 这个对象,并由 Kubernetes 管理和分配 IP 地址;无法被 Ping“”,因为没有一个 实体网络对象 来响应;只能结合 Service Port 组成一个具体的通信端口;Node IP 网、Pod IP 网域 Cluster IP 网之间的通信,采用的是 Kubernetes 自己设计的一种编程方式的特殊的路由规则,与 IP 路由有很大的不同;Label Label 可以附加到各种资
11、源对象上,一个资源对象可以定义任意数量的 Label。给某个资源定义一个 Label,相当于给他打一个标签,随后可以通过 Label Selector(标签选择器)查询和筛选拥有某些 Label 的资源对象。我们可以通过给指定的资源对象捆绑一个或多个 Label 来实现多维度的资源分组管理功能,以便于灵活、方便的进行资源分配、调度、配置、部署等管理工作;Label Selector 示例:select*from pod where pods name=XXX,env=YYY,支持操作符有=、!=、in、not in;部署和升级 Pod,声明某种 Pod 的副本数量在任意时刻都符合某个预期值;P
12、od 期待的副本数;用于筛选目标 Pod 的 Label Selector;当 Pod 副本数量小于预期数量的时候,用于创建新 Pod 的Pod 模板(template);Replication Controller(RC)下一代的 Replication Controlle,RC 与 RS 唯一区别就是lableselector 支持不同,RS 支持新的基于集合的标签,RC 仅支持基于等式的标签。Replication Controlle 只支持基于等式的selector(env=dev 或 environment!=qa)但 Replica Set 还支持新的、基于集合的 selector(version in(v1.0,v2.0)或 env notin(dev,qa),这对复杂的运维管理带来很大方便。Replica Set拥有更加灵活强大的升级、回滚功能。在新的版本中,官方推荐使用 Replica Set和 Deployment 来代替 RC,两者相似度 90%,相对于 RC 一个最大升级是我们随时指导当前 Pod“”部署 的进度。Deployment 使用了 Replica Set,除非需要自定义升级功能或根本不需要升级 Pod,一般情况下,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1