k8s的一些基本概念

推荐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

  • 它为PodReplicaSet提供了一个声明式(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是为了无状态服务而设计),其应用场景包括
  1. 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
  2. 稳定的网络标志,即Pod重新调度后其PodName
  3. 有序部署,有序扩展,也就是Pod是有顺序的,在部署或者扩展的时候都要根据定义的顺序依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init container来实现
  4. 有序收缩,有序删除

Namespace

  • namespace一般用来隔离不同的用户,作用域为带有名字空间的对象,例如常见的pod,service,replicationcontroller;而一些底层资源比如node,Persistance Volume和名字空间本身并不属于任何名字空间
  • 包含两种状态activeterminating
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clarence Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值