k8s一、基本概念
Kubernetes的设计架构
Master管理Node,Node管理容器。
Master
Kubernetes集群中的Master节点主要负责管理整个集群,包括集群的健康检查、扩容缩容等。
集群控制节点,所有控制命令都发给Master,Master负责具体的执行过程
- 关键进程:
- API Server:提供HTTP Rest接口的主要组件,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口
- Scheduler:Pod资源的调度器
- etcd:保存所有资源对象的数据
- Controller Manager:所有资源对象的自动化控制中心

Node
除了Master,Kubernetes集群中的其他机器被称为Node
Node主要由3个部分组成,分别是kubelet、kube-proxy和容器运行时(container runtime)。
每个Node都会被Master分配一些工作负载,当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上。
- 关键进程:
- kubelet:负责Pod对应的容器的创建、启停等任务
- kube-proxy:实现Kubernetes Service的通信与负载均衡机制
- Docker/containerd:负责本节点的容器运行
一旦Node被纳入集群管理范围,kubelet进程就会定时向Master汇报自身的情报

组件简的基本交互流程

kubectl命令将转换为对API Server的调用。
API Server验证请求并将其保存到etcd中。
etcd通知API Server。
API Server调用调度器。
调度器决定在哪个节点运行Pod,并将其返回给API Server。
API Server将对应节点保存到etcd中。
etcd通知API Server。
API Server在相应的节点中调用kubelet。
kubelet与容器运行时API发生交互,与容器守护进程通信以创建容器。
kubelet将Pod状态更新到API Server中。
API Server把最新的状态保存到etcd中。
Kubernetes的核心对象

Pod
Pod是由N个容器组成的,每个 Pod 都包含一个特殊的Pause容器
以Pause的状态代表整个容器组的状态
Pod里的多个业务容器共享Pause容器的IP,共享Pause容器挂接的Volume
Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,这通常采用虚拟二层网络技术来实现
- 普通pod
- 普通的Pod一旦被创建,就被放入etcd中存储,随后会被Kubernetes Master调度到某个具体的Node上并进行绑定(Binding),随后该Pod被对应的Node上的kubelet进程实例化成一组相关的容器并启动
- 当Pod里的某个容器停止时,Kubernetes会自动检测到这个问题并且重新启动这个Pod(重启Pod里的所有容器),
- 如果Pod所在的Node宕机,就会将这个Node上的所有Pod重新调度到其他节点上。
- 静态Pod
- 存放在某个具体的Node上的一个具体文件中,并且只在此Node上启动、运行,并且不会被Kubernetes Master管理
在Kubernetes里,一个计算资源进行配额限定时需要设定以下两个参数。
- Requests:该资源的最小申请量,系统必须满足要求。
- Limits:该资源最大允许使用的量,不能被突破,当容器试图使用超过这个量的资源时,可能会被Kubernetes“杀掉”并重启
控制器
一般来说,用户不会直接创建Pod,而是创建控制器,让控制器来管理Pod。
控制器中定义了Pod的部署方式,如有多少个副本、需要在哪种Node上运行等。
Replication Controller 和 ReplicaSet
RC可定义Pod模板,并可以设置相应控制参数以实现水平伸缩,以调节正在运行的相同的Pod数。
ReplicaSet逐渐取代RC,但ReplicaSet无法实现滚动更新,无法像RC那样在后端轮流切换到最新版本。
Deployment
Deployment控制器以ReplicaSet控制器为基础

StatefulSet
提供了排序和唯一性保证的特殊Pod控制器。
StatefulSet控制器通常与面向数据的应用程序(比如数据库)相关联
分布式存储系统适合使用StatefulSet控制器
Pod转移到其他节点时,StatefulSet控制器会保证Pod的唯一性[稳定的网络标识、持久化存储绑定和有序的生命周期管理。]
当需要重新调度时,可以通过Pod转移持久性数据卷。即使删除了Pod,这些卷也依然存在,以防止数据意外丢失。
Deployment控制器下的每一个Pod都毫无区别地提供服务
StatefulSet控制器下的Pod。虽然各个Pod的定义是一样的,但是因为其数据的不同,所以提供的服务是有差异的。
DaemonSet
DaemonSet控制器是另一种特殊的Pod控制器,它会在集群的各个节点上运行单一的Pod副本。
日志收集和转发、监控以及运行以增加节点本身功能为目的的服务,常设置为DaemonSet控制器
DaemonSet控制器可以越过基于Pod的限制,确保基础服务的运行
Job和CronJob
Job:用于执行一次性任务
CronJob:用于周期性执行任务
服务与存储
Service组件和Ingress
Pod只是一个运行的应用示例,随时可能在一个节点上停止,并在另一个节点使用新的IP地址启动新的Pod,因此Pod根本无法以固定的IP地址和端口号提供服务。
通过Service组件可以发布服务,可以跟踪并路由到所有指定类型的后端容器。内部使用者只需要知道Service组件提供的稳定端点即可进行访问
Service是内部负载均衡器中的一种组件,会将相同功能的Pod在逻辑上组合到一起,让它们表现得如同一个单一的实体

存储卷和持久卷
允许Pod中的所有容器共享数据

持久性数据可预防节点级的故障
资源划分
命名空间(namespace)的主要作用是对Kubernetes集群资源进行划分。实现多租户的资源隔离。

标签和注解:
标签:键值对
注解:将任意键值信息附加到某一对象中,注解更灵活,可以包含少量结构化数据。
k8s一、基本概念的更多相关文章
- 为什么k8s引入pod概念?
为什么k8s引入pod概念? 1.可管理性 有些容器天生需要紧密关联,以pod为最小单位进行调度 扩展 共享资源 管理生命周期 例如: 一个容器写日志,一个容器读取日志进行相关内容的展示 2.通信和资 ...
- k8s弹性伸缩概念以及测试用例
k8s弹性伸缩概念以及测试用例 本文原文出处:https://juejin.im/post/5c82367ff265da2d85330d4f 弹性伸缩式k8s中的一大亮点功能,当负载大的时候,你可以对 ...
- 5分钟让你理解K8S必备架构概念,以及网络模型(上)
写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...
- K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)
K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace) Kubernetes 是目前发展最 ...
- Kubernetes(K8s)基础概念 —— 凿壁偷光
Kubernetes(K8s)基础概念 -- 凿壁偷光 K8s是什么:全称 kubernetes (k12345678s) 作用:用于自动部署,扩展和管理"容器化应用程序"的 ...
- 【k8s】基础概念 + 工作原理
工作原理: 原理图 工作原理描述: 1>用户通过kubectl或者API server的REST API接口,提交需要运行的docker容器(创建pod请求): 2>api server将 ...
- 从零开始入门 K8s | Kubernetes 网络概念及策略控制
作者 | 阿里巴巴高级技术专家 叶磊 一.Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法.大家知道 Kubernetes 对于网络具体实现方案,没有什 ...
- 7. 丈母娘嫌我不懂K8s的Service概念,让我去面壁
文章目录 怎么跟你说 Service的出现,就是 解决ip不固定的问题 ,怎么解决呢 ? 听小刘慢慢道来 当Pod宕机后重新生成时,其IP等状态信息可能会变动,Service会根据Pod的Label对 ...
- 5分钟让你理解K8S必备架构概念,以及网络模型(中)
写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...
- 5分钟让你理解K8S必备架构概念,以及网络模型(下)
写在前面 在这用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料,欢迎关注我的公众号:阿风的架构笔记 后台发送[导图]拿下载链接, 已经完善更新): ...
随机推荐
- c-primer-plus深入解读系列-从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
前言 小提示:阅读本篇内容,至少需要了解double和float的二进制表示规则. 书中的代码示例如下: #include <stdio.h> int main(void) { float ...
- k8s集群创建之后coredns一直处于pending状态
按照官网教程 master节点kubectl init, 每个从节点kubectl join之后, 在master节点执行 kubectl get pods -n kube-system,发现core ...
- Code First 初始化数据时发生异常
问题重现 用Entity Framework的Code First默认生成的数据库文件被我直接删除了, 然后不管怎么重新编译等等, 运行后总是会报错如下: 解决方案同下 Cannot attach t ...
- 学习Kotlin语法(一)
简介 Kotlin是一种现代.简洁且功能强大的编程语言,特别适合Android开发.本文将从基础语法开始,逐步掌握Kotlin的核心特性. 目录 变量 基本类型 数字 无符号对应项 布尔值 字符和字符 ...
- 云备份技术解析:云容灾 CT-CDR 关键技术介绍
本文分享自天翼云开发者社区<云备份技术解析:云容灾 CT-CDR 关键技术介绍>,作者:沈****军 1.CDP+存储快照,实现秒级RPO (1)CDP技术:云容灾CT-CDR(Cloud ...
- springAPI对事物支持之注解式配置
一.无Spring核心配置文件:applicationContext.xml下开启注解式事物 @Configuration @EnableTransactionManagement public cl ...
- VSCode输出框中文乱码问题
vscode输出中文的时候,总是出现乱码.找了一个一劳永逸解决问题的方法,转载的,原教程地址:https://blog.csdn.net/a19990412/article/details/90270 ...
- 【完结】【一本通提高】KMP做题记录
题目编号 标题 估分 正确 提交 Y 2076 Problem A [一本通提高篇KMP]剪花布条 --- 156 293 Y 2077 Problem B [一本通提高篇KMP]Radio Tr ...
- Ubuntu修改密码及密码复杂度策略设置方法
版本查看 cat /etc/issue cat /proc/version 内核查看 uname -a Ubuntu修改密码及密码复杂度策略设置方法 一.修改密码 1.修改普通用户密码 passwd ...
- C 语言实现抽象数据类型(ADT)之链表
C 语言实现抽象数据类型(ADT)之链表 1 什么是链表?(懂跳) C 语言本身自带了很多基本数据类型,每种基本数据类型的变量总是代表着某个数据,比如:我们通常用整型变量来计数,用浮点型变量来保存价格 ...