家资是何物,积帙列梁梠。这篇文章主要讲述Kubernetes——基础概念相关的知识,希望能为你提供帮助。
Kubernetes介绍
什么是Kubernetes
- 用于自动部署、扩展和管理“容器化( containerized) 应用程序”的开源系统
- 可以理解成K8S是负责自动化运维管理多个容器化程序(比如Docker)的集群,是–个生态极其丰富的容器编排框架工具
2.可以理解成K8S是负责自动化运维管理多个容器化程序(比如Docker)的集群,是–个生态极其丰富的容器编排框架工具
Kubernetes由来
- k8S由google的Borg系统(博格系统,google内部使用的大规模容器编排工具)作为原型,后经G0语言延用Borg的思路重写并捐献给CNCF基金会开源
- 词根源于希腊语的舵手、飞行员
GitHub: https://github.com/kubernetes/kubernetes
中文网站http://docs.kubernetes.org.cn/92.html
为什么用K8S
- 试想下传统的后端部署办法:把程序包(包括可执行二进制文件、配置文件等)放到服务器上,接着运行启动脚本把程序跑起来,同时启动守护脚本定期检查程序运行状态、必要的话重新拉起程序
- 设想一下,如果服务的请求量上来,已部署的服务响应不过来怎么办?传统的做法往往是,如果请求量、内存、CPU超过阈值做了告警,运维人员马上再加几台服务器,部署好服务之后,接入负载均衡来分担已有服务的压力
- 这样问题就出现了:从监控告警到部署服务,中间需要人力介入! 那么,有没有办法自动完成服务的部署、更新、卸载和扩容、缩容呢?
- 而这就是K8S要做的事情: 自动化运维管理容器(Docker) 程序。K8s的目标是让部署容器化应用简单高效
- K8S解决了裸跑Docker的若干痛点:
- 单机使用,无法有效集群
- 随着容器数量的上升,管理成本攀升
- 没有有效的容灾、自愈机制
- 没有预设编排模板,无法实现快速、大规模容器调度
- 没有统一的配置管理中心工具
- 没有容器生命周期的管理工具
- 没有图形化运维管理工具
- K8S提供了容器编排,资源调度,弹性伸缩,部署管理,服务发现等一系列功能。
使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性:业务低峰时回收资源,以最小成本运行服务
2.自我修复
在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量; 杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断
3.服务发现和负载均衡
K8s为多个容器提供一-个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题
4.自动发布(默认滚动发布模式)和回滚
K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不受影响业务
5.集中化配置管理和密钥管理
管理机密数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用
6.存储编排,支持外挂存储并对外挂存储资源进行编排
挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、Glusterfs、Ceph) 都作为集群资源的一部分使用, 极大提高存储使用灵活性
7.任务批处理运行
提供一次性任务,定时任务; 满足批量数据处理和分析的场景
k8s集群架构与组件
文章图片
文章图片
Master和Worker Node节点
- K8S是属于主从设备模型(Master-Slave 架构),即有Master节点负责集群的调度、管理和运维,Slave节点是集群中的运算工作负载节点
- 在K8S中,主节点一般被称为Master节点,而从节点则被称为Worker Node节点,每个Node都会被Master分配一些工作负载
- Master组件可以在群集中的任何计算机上运行,但建议Master节点占据一个独立的服务器。因为Master是整个集群的大脑,如果Master所在节点宕机或不可用,那么所有的控制命令都将失效。除了Master,在K8s集群中的其他机器被称为Worker Node节点,当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上去
文章图片
1. Kube-apiserver
2. Kube-controller-manager
- 控制器类型
- k8s工作流程
文章图片
Worker Node节点核心组件
文章图片
Node节点的工作流程:
- Node节点可动态增加到kubernetes集群中,前提是这个节点已经正确安装、配置和启动了上述的关键进程,默认情况下,kubelet会向Master注册自己,这也kubernetes推荐的Node管理方式。
- 一旦Node被纳入集群管理范围,kubelet会定时向Master汇报自身的情况,以及之前有哪些Pod在运行等,这样Master可以获知每个Node的资源使用情况,并实现高效均衡的资源调度策略。
- 如果Node没有按时上报信息,则会被Master判断为失联,Node状态会被标记为Not Ready,随后Master会触发工作负载转移流程。
2. Kube-Proxy
3. docker engine(docker或rocket)
文章图片
master节点的请求处理过程:
1)首页用户通过证书认证后使用kubectl命令行工具向API Server发送请求,API Server接收到请求后会写入到etcd中,API Server会让Controller-manager按照所预设的模板(多少实例、生命周期等)去创建Pod,Controller-manager通过 API Server读取etcd中用户的预设信息,再通过API Server去找 Scheduler可以为新创建的Pod选择最适合的Node节点。scheduler会通过API Server在Etcd存储中心中找到node节点存储的元信息、剩余资源等,通过预算策略和优选策略在所有Node节点中挑选最优的
2)scheduler确定node节点后通过API Server交给这个Node节点上的kubelet进行pod资源的创建,kubelet同时也会对所在node的资源信息和pod状态进行监控与API server进行交互将pod状态信息存储到etcd中
3)node节点上的kube-proxy是service资源的载体,负责pod的代理和负载均衡等功能,如果需要将pod发布出去,需要通过kube-proxy创建网络规则承载使用service作为负载均衡的访问入口,负载均衡所关联的pod节点,实现服务发布
组件总结k8s核心概念
- Kubernetes包含多种类型的资源对象: Pod、 Label、 Service、 Replication Controller等
- 所有的资源对象都可以通过Kubernetes提供的kubectl工具进行增、删、改、查等操作,并将其保存在etcd中持久化存储
- Kubernets其实是一个高度自动化的资源控制系统,通过跟踪对比etcd存储里保存的资源期望状态与当前环境中的实际资源状态的差异,来实现自动控制和自动纠错等高级功能
文章图片
Pod控制器
- Pod控制器是Pod启动的一种模版,用来保证在K8S里启动的Pod应始终按照用户的预期运行(副本数、生命周期、健康状态检查等)
- K8S内提供了众多的Pod控制器,常用的有以下几种:
文章图片
无状态应用和有状态应用 ?
LabelLabel选择器(Label selector)Service【Kubernetes——基础概念】
文章图片
IngressNameNamespace
推荐阅读
- 中序与后序遍历构建二叉树
- #yyds干货盘点#Flink的DataSource三部曲之一(直接API)
- 仅在Windows Server上运行的命令diskshadow
- 使用net use UserAccount 查询UserAccount 的详细信息
- 文件管理命令
- 从简单代码入手,分析线程池原理
- Flink的DataSource三部曲之二:内置connector
- JVM自定义类加载器在代码扩展性的实践
- OpenHarmony3.0环境搭建-基于Ubuntu20.04