k8s中大部分概念如node/pod等均可以看作资源对象,k8s实际上是一个高度自动化的资源控制系统,经过跟踪比对etcd里的资源指望状态和当前环境里的
实际资源状态差别来实现自动控制和自动纠错的高级功能。
在Kubernetes中建立对象时,必须提供描述其所需Status的对象Spec,以及关于对象(如name)的一些基本信息。k8s对象示例必填字段:apiVersion 、kind 、metadata及对象Spec,spec是容器组的定义。顺便提下k8s的Events概念,它是一个事件的记录,记录了事件的最先产生时间、最后重现时间等众多信息。node
Kubernetes集群的两种类型资源
Master节点:协调控制整个集群。
Nodes节点:运行应用的工做节点。
1. Master组件负责整个集群的管理和控制。基本上全部的控制命令都发给它,命令都是在master节点上运行的,他来负责总体的执行过程,通常独自占一台机器,若是宕机或不可用,那么对容器应用的控制将失效。
2. kube-apiserver用于暴露Kubernetes API,k8s全部资源增删改查操做的惟一入口。
3. etcd是Kubernetes提供默认的存储系统,保存全部集群数据
4. kube-controller-manager资源对象的自动化控制中心
5. kube-schedule 负责资源调度的进程git
节点(Node)组件
提供Kubernetes运行时环境,以及维护Pod。能够在运行期间动态增长到k8s集群中,前提是这个节点已正确安装api
kubelet负责pod对应容器的建立、启停等任务,同时与master密切协做,实现集群管理的基本功能
kube-proxy 实现k8s service的通讯和负载均衡的重要组件
一个Node能够是VM或物理机。每一个Node都会运行pod的一些必要服务包括Docker、kubelet和kube-proxy,并由Master组件进行管理
–Node Status节点的状态信息包含:Addresses
Condition 描述全部Running节点的状态。被表示为一个JSON对象。
Capacity
Info
–与 pods 和 services 不一样,node不是由Kubernetes 系统建立,
目前,有三个组件与Kubernetes节点接口进行交互:节点控制器(node controller)、kubelet和kubectl。
–Node是Kubernetes REST API中的最高级别资源。
label Selector
1五、使用label和label Selector能够给对象建立多组标签,label和label Selector共同构成了k8s系统中最核心的应用模型,使得被管理对象可以被精细的分组管理,同时实现了整个集群的高可用性。网络
namespaces
kubernetes最重要的对象Pod。
Kubernetes REST API中的全部对象都用Name和UID来明确地标识。
Name在一个对象中同一时间只能拥有单个Name,删除一个namespace会自动删除全部属于该namespace的资源。命令行操做NameSpace:负载均衡
kubectl create namespace new-namespace
kubectl create -f ./my-namespace.yaml
kubectl delete namespaces new-namespace
kubectl get namespaces //列出当前群集中的namespace
1
2
3
4
volume
Kubernetes Volume具备明确的生命周期 - 与pod相同。而Docker的Volume只是磁盘中的一个目录,生命周期不受管理。
Kubernetes支持Volume类型有:emptyDir、hostPath等,只要Node上的Pod一直运行,Volume就会一直存在。
当Pod(无论任何缘由)从Node上被删除时,emptyDir也同时会删除,存储的数据也将永久删除。
在同一个pod中的多个容器可以共享pod级别的存储卷volume。工具
Annotations
Annotations就如标签同样,也是由key/value组成:
–构建、发布的镜像信息,如时间戳,发行ID,git分支,PR编号,镜像hashes和注Registry地址。
–一些日志记录、监视、分析或audit repositories。
–一些工具信息:例如,名称、版本和构建信息。
–用户或工具/系统来源信息,例如来自其余生态系统组件对象的URL。
–负责人电话/座机,或一些信息目录。spa
pod
Pod是Kubernetes建立或部署的最小/最简单的基本单位,一个Pod表明集群上正在运行的一个进程。
一个Pod封装一个应用容器(也能够有多个容器),存储资源、一个独立的网络IP以及管理控制容器运行方式的策略选项。
Pod表明部署的一个单位:Kubernetes中单个应用的实例,它可能由单个容器或多个容器共享组成的资源。有点相似serverrole
–Pod中运行一个容器。“one-container-per-Pod”模式是Kubernetes最多见的用法;
在这种状况下,你能够将Pod视为单个封装的容器,可是Kubernetes是直接管理Pod而不是容器。
–若是Pods中运行多个须要一块儿工做的容器。它们之间可以共享资源,在单个Pod中共同管理多个容器是一个相对高级的用法
–每一个Pod被分配一个独立的IP地址,Pod能够指定一组共享存储volumes。
【注意点】重启Pod中的容器跟重启Pod不是一回事。Pod只提供容器的运行环境并保持容器的运行状态,重启容器不会形成Pod重启。
kubernetes中,pod大部分场景下只是容器的载体而已,一般须要经过Deployment、RC等对象来完成一组pod的调度和自动控制功能。命令行
replicaSets
官方建议使用Deployment来管理ReplicaSets,这意味着咱们不须要操做ReplicaSet对象,而是使用Deployment管理 。
ReplicaSet(RS)副本集是Replication Controller(RC)的升级版本,用来保证pod的高可用
经过监控运行中的pod来保证集群中运行指定数量的pod副本,少于指定数目就会根据模板建立,多了就会杀死多余的pod副本。
replication理解为复制品、副本
rc实际上是定义了一个指望的场景,包含三个部分:期待的副本数(replicas),用于筛选目标pod的label selector,以及副本数量小于预期数时用于建立新pod的模板日志
deployment
你只须要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。
server