赞
踩
Kubernetes(K8s)是Geogle团队发起并维护的开源容器集群管理系统,底层基于Docker、RKT 等容器技术,提供强大的应用管理和资源调度能力。
Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署、规划、更新、维护的一种机制。它的主要作用是对Docker容器做编排工作,当然,Docker只是容器工具的一种引擎,K8s可支持多种容器引擎。
Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着。
(1)使用Kubernetes特点:
集群是一组节点,这些节点可以是物理服务器或者虚拟机,之上安装了Kubernetes平台。。
Master 组件运行的节点一般称为Master 节点,在Master 节点上运行着以下关键进程 Kube-apiserver 、Etcd、Kube-sheduler、Kube-controller-manager。
每个Node 节点上都运行着以下关键进程,Kubelet、Kube-proxy、Docker Engine(docker)
(1)Pod:是若干相关容器的组合,Pod包含的容器运行在同一台宿主机上,这些容器使用相同的网络命令空间,IP地址和端口,相互之间通过localhost 来发现和通信。Pod 是k8s 创建、调度和管理的最小单位。
k8s 运行容器(Pod)与访问容器(Pod) ,这两项任务分别由 Controller 和 Service 执行。
(2)Replication Controller: 用来管理Pob 副本(或称为实例),Replication Controller 确保任何时候 k8s 集群中有指定数量的Pob 副本在运行。
(3)Service :是真实应用服务的抽象,定义了Pod 的逻辑集合和访问这个Pob集合的策略。
Service是定义一系列Pod以及访问这些Pod的策略的一层抽象。Service通过Label找到Pod组。因为Service是抽象的,所以在图表里通常看不到它们的存在。
Service 定义了外加访问一组特定 Pod 的方式,Service 有自己的IP 和端口, Service 为Pod 提供了负载均衡。
(4)Lable: 是用来区分 Pod、Service、Replication Controller 的Key/Value 对,k8s包含多种类型的资源对象,所有的资源对象都可以通过k8s提供的工具进行增删查改。一个Lable 是一个key-value 形式的键值对,其中key与value 由用户自己指定。给某个资源定义一个Label 相当于给它们打了一个标签,随后可以通过标签选择器查询和筛选拥有某些Label 的资源对象。
(5)Node: Node 可以认为是Pod 的宿主机。可以是物理或虚拟机。
Node 节点可以在运行期间动态增加到K8S 集群中,前提是这个节点上已经正确安装、配置和启动了上述关键进程。
K8s 属于主从分布式架构,节点在角色上分为 Master 和 Node。K8s 使用Etcd 作为存储中间件,它是一种高可用的键值存储系统。
etcd 是一个分布式的、可靠的 key-value 存储系统,它用于存储分布式系统中的关键数据。Kubernetes 将自身所用的状态存储在 etcd 中,在k8s 集群中,etcd 主要用于配置共享和服务发现。
Etcd主要解决的是分布式系统中数据一致性的问题,而分布式系统中的数据分为控制数据和应用数据,etcd处理的数据类型为控制数据,对于很少量的应用数据也可以进行处理。
Etcd 是CoreOS 团队发起的开源项目,基于Go语言实现。Etcd 的优点:
如: 在k8s 集群中etcd 是用来存放数据并通知变动的,k8s 中没有用到数据库,数据存放到etcd中,在k8s 中,数据是随时变化的,k8s 每个组件通过监听etcd 中的数据,知道任务的变化。
Etcd 的集群也采用典型的“主-从” 模型,通 Raft 协议保证一段时间内有一个节点为主节点,其他节点为从节点。一旦主节点发生故障,其他节点可以自动再重新选举出新的主节点。集群中节点个数推荐为奇数个,最少为3个。
集群参数配置:
Master 作为控制节点,调度管理整个系统。可以包含以下组件:
scheduler 将任务给 api server ,api server 将任务存入etcd。
K8s Node 是运行节点,用于运行管理业务的容器。
kubelet 在每个Node节点都存在一份,在Node 节点上的资源操作指令由 Kubelet 来执行。
(1)K8s 是用来管理容器,但是不直接操作容器,最小操作单元是 Pod (间接管理容器),一个Pod 代表集群上正在运行的一个进程,由一个或多个容器组成:
(2)Pob特点:
(3)K8S 引入Pod 的主要目的
Pod中有两个容器:File Puller 定期从外部拉取文件,放在共享的Volume 中,Web Server 从volume 读取文件,响应Consumer 的请求。
k8s 通常不会直接创建Pod,而是通过 Controller 来管理 Pod。Controller 中定义了 Pod 的部署特性,如几个副本,在什么样的 Node 上运行。为了满足不同的业务场景,k8s提供了多种 Controller 。
Namespace 可以将一个物理的Cluster 逻辑上划分为多个虚拟Cluster ,每个 Cluster 就是一个 Namespace。
不同Namespace 里资源是完全隔离的。
从底层实现技术看,Pod 内不同容器之间共享存储和一些namespace。
共享的资源:
参考文献:
【1】十分钟带来理解 Kubernetes 核心概念:http://www.dockone.io/article/932
【2】K8s中文文档:https://www.kubernetes.org.cn/k8s
【3】etcd : https://www.cnblogs.com/centos-python/articles/11044019.html
【4】尚硅谷K8S 教程: https://www.bilibili.com/video/BV1w4411y7Go
【5】k8s-基于阿里云服务器使用kubeadm搭建k8s集群: https://www.cnblogs.com/gcxblogs/p/13710023.html
【6】知乎-10分钟看懂 docker 与k8s: https://zhuanlan.zhihu.com/p/53260098
【7】《每天5分钟玩转Kubernetes 》
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。