目录
- master
- Node
- Pod和Container
- Controller
- Service和Ingress
- Label
- Secret
- Volume
- ReplicationController和ReplicaSet
- Deployment
- DaemonSet
- Job
- CronJob
- StatefulSet
- Namespace
推荐k8s中文文档,里面有各种概念的具体用法http://docs.kubernetes.org.cn/437.html
一个k8s集群主要是由控制节点(master)和工作节点(node)构成,每个节点上都会安装不同的组件
master
这是集群的控制平面,负责集群的决策(管理)
- ApiServer:资源操作的唯一入口,接受用户输入的命令,提供认证、授权、API注册和发现等机制
- Scheduler:负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上
- ControllerManager:负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
- Etcd:负责存储集群中各种资源对象的信息
Node
- k8s通过将容器放入在节点(Node)上运行的Pod来执行工作负载,节点可以是一个虚拟机或者物理机器,取决于所在的集群配置。每个节点包含运行Pod所需的服务,这些节点由控制面负责管理
- Kubelet:负责维护容器的生命周期,即i通过控制docker,来创建、更新、销毁容器
- KubeProxy:负责提供集群内布的服务发现和负载均衡
- Docker:负责节点上容器的各种操作
Pod和Container
- Pod是一组并置的
Container
,这些Container
共享相同的IP地址和端口空间 Container
就是docker
中的容器
Controller
- 通过它实现对pod的管理,如启动pod、停止pod、伸缩pod的数量等
Service和Ingress
- Service是pod对外服务的统一入口,下面可以维护同一个类的多个pod
Label
- 标签,用于对pod进行分类,同一类pod会拥有相同的标签
Secret
- Secret是一种包含少量敏感信息例如密码、令牌或密钥的对象。这样的信息可能会被放在Pod规约中或者镜像中。使用Secret意味着你不需要再应用程序代码中包含机密数据
- Secret独立于Pod,所以在创建、查看和编辑Pod的过程中暴露Secret的风险较小
Volume
- 容器中的文件在磁盘上是临时存放的,这给在容器中运行重要的应用带来一些问题,当容器崩溃或停止的时候,此时容器状态未保存,因此在容器生命周期内创建或者修改的所有文件都将丢失。在崩溃期间,
kubelet
会以干净的状态重新启动容器,当多个容器在一个Pod中运行并共享文件的时候,有需要解决跨容器设置和共享文件系统的问题 - Volume这个抽象概念就是为了解决上面两个问题的
ReplicationController和ReplicaSet
- RC(ReplicationController)是一种
kubernetes
资源,可确保它的pod始终保持运行状态,如果pod因任何条件而丢失,则RC会注意到缺少了pod并创建替代pod,如果有多出来的异常容器也会自动回收 - 在新版本的
kubernetes
中建议使用ReplicaSet
来取代RC,它们之间没有什么本质的不同,只是ReplicaSet
支持集合式的selector
Deployment
- 它为
Pod
和ReplicaSet
提供了一个声明式(declarative
)定义方法,用来替代以前的ReplicationController
来方便的管理应用,典型的应用场景包括定义deployment来创建Pod和ReplicaSet(deployment借助RS来管理pod)、滚动升级和回滚应用、扩容和缩容以及暂停和继续Deployment
DaemonSet
- 确保全部或者一个Node上运行一个Pod的副本,当有Node加入集群时,也会为它们新增一个Pod,当有Node从集群移除时,这些Pod也会被回收,删除DaemonSet将会删除它创建的所有Pod。当有Node从集群移除时,这些Pod也会被回收,删除DaemonSet将会删除它创建的所有Pod
Job
- Job负责批处理任务,即仅执行一次的任务,它保证批处理任务的一个或者多个Pod成功结束
CronJob
- Cron Job管理基于时间的Job,即在给定时间点只运行一次和周期性地在给定时间点运行。原理就是在特定的事件循环创建Job
- 典型用法第一是在给定的时间点调度Job运行,第二是创建周期性运行的Job,例如:数据库备份和发送邮件
StatefulSet
- StatefulSet作为Controller为Pod提供唯一的标识,它可以保证部署和scale的顺序
- StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为了无状态服务而设计),其应用场景包括
- 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
- 稳定的网络标志,即Pod重新调度后其PodName
- 有序部署,有序扩展,也就是Pod是有顺序的,在部署或者扩展的时候都要根据定义的顺序依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init container来实现
- 有序收缩,有序删除
Namespace
- namespace一般用来隔离不同的用户,作用域为带有名字空间的对象,例如常见的
pod,service,replicationcontroller
;而一些底层资源比如node,Persistance Volume
和名字空间本身并不属于任何名字空间 - 包含两种状态
active
和terminating