k8s总结(一)概念与组件
@[toc[基本概念k8s是一个工业级的容器编排平台。k8s的主要功能有三块:调度自我修复水平扩展相关概念Cluster : 集群是指由k8s使用一些列的物理机,虚拟机和其他基础资源来运行你的应用程序.Master:集群的控制的节点.Node : 一个node就是一个运行着k8s的物理机或虚拟机,平切pod可以在其上面被调度.Pod : 一个pod对应一个由相关容器和卷组成的容器组.Label :
@[toc[
基本概念
k8s是一个工业级的容器编排平台。
k8s的主要功能有三块:
- 调度
- 自我修复
- 水平扩展
相关概念
Cluster : 集群是指由k8s使用一些列的物理机,虚拟机和其他基础资源来运行你的应用程序.
Master:集群的控制的节点.
Node : 一个node就是一个运行着k8s的物理机或虚拟机,平切pod可以在其上面被调度.
Pod : 一个pod对应一个由相关容器和卷组成的容器组.
Label : 一个label是一个被附加到资源上的键/值对,譬如附加到一个pod上,为他传递一个用户自定义并且可是别的属性.Label还可以被应用来组织和选择子网中的资源.
Selector : 是一个通过匹配labels来定义资源之间关系的表达式,例如为一个负载均衡的service指定pod.
Replication Controller : RC是为了保证一定数量被指定的Pod的复制品在任何时间都能正常工作.它不仅允许复制的系统易于扩展,还会处理当pod在机器重启或发生故障的时候再次创建一个.
Service : 一个service定义了访问pod的方式,就像单个固定的IP地址和与其相对应的DNS之间的关系.
Volume : 一个volume是一个目录,k8s volume构建在docker volumes之上,并且支持添加和配置volume目录或者其他存储设备.
Secret : secret存储了敏感数据,例如能允许容器接受请求的权限令牌.
Namespaces : 用户为k8s中资源定义的名字.
组件介绍
Master
Master是集群的控制节点,每个K8s集群里需要有一个Master节点来负责整个集群的管理和控制。基本上k8s的所有控制命令都发给它,它来负责整个具体的执行过程。Master节点通常占据一个独立的服务器(高可用部署建议至少3台服务器)。
Master节点运行着以下一组关键过程:
- API Server:集群控制的入口进程。
- k8s Controller Manager:K8s里所有资源对象的自动化控制中心,k8s中所有资源对象的自动化控制中心,维护管理集群的状态,比如故障检测,自动扩展,滚动更新等。
- K8s Scheduler:负责资源调度的进程,按照预定的调度策略将Pod调度到相应的机器上。
- etcd:所有资源对象的数据全部保存在etcd。
Node节点
除了master以外的节点被称为Node或者Worker节点,可以在master中使用命令 kubectl get nodes查看集群中的node节点。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,该节点上的工作负载就会被Master自动转移到其它节点上。在Node上主要运行着:
- kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能
- kube-proxy:实现service的通信与负载均衡
- docker(Docker Engine):Docker引擎,负责本机的容器创建和管理
Pod
Pod是Kubernetes创建或部署的最小/最简单的基本单位,一个Pod代表集群上正在运行的一个进程。一个Pod封装一个应用容器(也可以有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。Pod代表部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。
一个Pod(就像一个豌豆夹)相当于一个共享context的配置组,在同一个context下,应用可能还会有独立的cgroup隔离机制,一个Pod是一个容器环境下的“逻辑主机”,它可能包含一个或者多个紧密相连的应用,这些应用可能是在同一个物理主机或虚拟机上。
Pod 的context可以理解成多个linux命名空间的联合
- PID 命名空间(同一个Pod中应用可以看到其它进程)
- 网络 命名空间(同一个Pod的中的应用对相同的IP地址和端口有权限)
- IPC 命名空间(同一个Pod中的应用可以通过VPC或者POSIX进行通信)
- UTS 命名空间(同一个Pod中的应用共享一个主机名称)
pod资源共享
Pods提供两种共享资源:网络和存储。
Pod的中的应用均使用相同的网络命名空间及端口,并且可以通过localhost发现并沟通其他应用,每个Pod都有一个扁平化的网络命名空间下IP地址,它是Pod可以和其他的物理机及其他的容器进行无障碍通信。
-
网络:每个Pod被分配一个独立的IP地址,Pod中的每个容器共享网络命名空间,包括IP地址和网络端口。Pod内的容器可以使用localhost相互通信。当Pod中的容器与Pod 外部通信时,他们必须协调如何使用共享网络资源(如端口)。
-
存储:Pod可以指定一组共享存储volumes。Pod中的所有容器都可以访问共享volumes,允许这些容器共享数据。volumes 还用于Pod中的数据持久化,以防其中一个容器需要重新启动而丢失数据。
pod管理
Pod通过提供一个高层次抽象而不是底层的接口简化了应用的部署及管理,Pod 作为最小的部署及管理单位,位置管理,拷贝复制,资源共享,依赖关系都是自动处理的。
Labels
Labels其实就一对 key/value ,其中key与value由用户自己指定。Label可以附加到各种资源对象上。例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label。我们可以给指定的资源对象捆绑一个或多个不同的Label来实现多维度的资源分组管理功能,以便于灵活、方便地进行资源分配、调度、配置、部署等管理工作。
ReplicationController
RC是K8s系统中的核心概念之一,简单来说,它其实定义了一个期望的场景。即声明某种Pod的副本数量在任意时刻都符合某个预期值。RC包括以下几个部分:
- Pod期待的副本数
- 用于筛选目标Pod的Label Selector。
- 当Pod的副本数量小于预期数量时,用于创建新的Pod模板(template)
Controller Manager组件会定时巡检系统中目前存活的目标Pod,并且确保目标Pod实例的数量刚好等于期望值。如果有过多的副本在运行,系统就会停掉一些Pod,反之系统就会再自动创建一些Pod。
Service
Svc就是一个“微服务”,Svc定义了一个服务的访问入口地址,前端应用(Pod)通过这个入口地址访问其背后的一组由Pod副本组成的集群实例。Service与其后端的Pod之间通过Label Selector实现“无缝对接”,Replication Controller(简称RC)的作用是通过满足要求的Pod副本数,保证Svc的服务能力和服务质量始终处于预期的标准。
一个Service可以看成一组提供相同服务的Pod的对外访问接口。Pod的Ip地址和Service的Cluster IP地址:
Pod的Ip地址是Docker Daemon根据docker0网桥的Ip地址段进行分配的,但Service的Cluster IP地址是k8s系统中的虚拟IP地址。Service的Cluster IP地址相对于Pod的IP地址来说相对稳定。
外部访问Service
由于Service对象在Cluster IP Range池中分配的IP地址只能在内部访问,所以其他Pod都可以无障碍地访问它。
K8s提供两种对外提供服务的Service的Type定义:Nodeport和LoadBalance
1)Nodeport:假设有3个hello Pod运行在3个不同的Node上,客户端访问其中任意一个Node都可以访问到这个服务。
2)LoadBalance:设置为云提供商提供的负载均衡器的IP地址。
其他组件
组件名称 | 作用 |
---|---|
kube-dns | 负责为整个集群提供DNS服务 |
Ingress Controller | 为服务提供外网入口 |
Heapster | 提供资源监控 |
Dashboard | 提供GUI |
Federation | 提供跨可用区的集群 |
Fluentd-elasticsearch | 提供集群日志采集、存储与查询 |
更多推荐
所有评论(0)