网站首页 > 技术文章 正文
大家好,我是小白。下面由我给白白们讲解一下云计算火热的容器编排之王Kubernetes...
上文咱们讲解了Linux容器技术docker,有些基础后理解Kubernetes后就更好理解啦~
简言之呢,docker虽然帮助我们实现了容器化,但仅仅是个使用工具,而我们并不仅仅只需要运行一个容器就能满足我们的需求,我们需要自动化部署,弹性伸缩,负载均衡,服务自动发现等等云原生的一整套的生态化需求,而这就是kubernetes能帮我们做到的。
一、何为Kubernetes
Kubernetes 是谷歌开源的容器集群管理系统,是 Google 多年大规模容器管理技术 Borg 的开源版本,主要功能包括:
基于容器的应用部署、维护和滚动升级
负载均衡和服务发现
跨机器和跨地区的集群调度
自动伸缩
无状态服务和有状态服务
广泛的 Volume 支持
插件机制保证扩展性
Kubernetes 发展非常迅速,已经成为容器编排领域的领导者。
二、Kubernetes架构
Kubernetes 主要由以下几个核心组件组成:
1.etcd 集群持久化数据存储, 保存了整个集群的状态信息等;
2.apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;
3.controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
4.scheduler 负责资源的调度,按照预定的调度策略将 Pod 调度到相应的机器上;
5.kubelet 负责维护容器的生命周期,同时也负责 Volume(CVI)和网络(CNI)的管理;
6.Container runtime 负责镜像管理以及 Pod 和容器的真正运行(CRI);
7.kube-proxy 负责为 Service 提供 cluster 内部的服务发现和负载均衡
除了核心组件,还有一些推荐的 Add-ons:
*kube-dns 负责为整个集群提供 DNS 服务
*Ingress Controller 为服务提供外网入口
*Heapster 提供资源监控
*Dashboard 提供 GUI
*Federation 提供跨可用区的集群
*Fluentd-elasticsearch 提供集群日志采集、存储与查询
三、Kubernetes 设计理念
1.API设计
*所有API应该是声明式的。
*API对象是彼此互补而且可组合的。
*高层API以操作意图为基础设计
*低层API根据高层API的控制需要设计
*尽量避免简单封装,不要有在外部API无法显式知道的内部隐藏的机制
*API操作复杂度与对象数量成正比
*API对象状态不能依赖于网络连接状态
*尽量避免让操作机制依赖于全局状态,因为在分布式系统中要保证全局状态的同步是非常困难的。
2.控制机制设计
*控制逻辑应该只依赖于当前状态。
*尽量避免复杂状态机,控制逻辑不要依赖无法监控的内部状态。
*假设任何错误的可能,并做容错处理。
*假设任何操作都可能被任何操作对象拒绝,甚至被错误解析。
*每个模块都可以在出错后自动恢复。
*每个模块都可以在必要时优雅地降级服务。
3. 架构设计
*只有apiserver可以直接访问etcd存储,其他服务必须通过Kubernetes API来访问集群状态
*单节点故障不应该影响集群的状态
*在没有新请求的情况下,所有组件应该在故障恢复后继续执行上次最后收到的请求(比如网络分区或服务重启等)
*所有组件都应该在内存中保持所需要的状态,apiserver将状态写入etcd存储,而其他组件则通过apiserver更新并监听所有的变化
*优先使用事件监听而不是轮询
四、Kubernetes核心概念
pod: 一组容器集合,k8s最小调度部署单元
*k8s不能直接控制容器,通过控制pod来间接管理容器
*pod是由pod templates创建而来的,pod template包含于控制器中
*不同控制器对模板的处理方式方式不同,比如,有的会立即删除旧pod,依据新模板创建新pod来保持最新
*一个pod包含一个或多个容器
*一个pod的所有容器共享共享 PID、IPC、Network 和 UTS namespace
*重启一个pod中的容器不会重启pod,因为pod不是进程而是一个容器运行环境,pod会一直存在除非它被删除
pod生命周期中的状态/阶段
*pending:k8s已经知道pod的存在,此时pod还没完全准备好,比如容器还没创建完成、正在下载镜像等,即在做前期的准备工作
*running:pod已经分配到一个节点上了,并且至少有一个容器在运行
*succeeded:终止在pod上的所有容器,全部成功终止,且不重启
*unknown:由于出现了一些错误而使非上边提到的任何一种状态
*failed:终止pod上所有rq,有的容器关闭失败
pod的生命和人类一样,只有一次,从出生到死亡,不可重活
控制器controller:控制器,控制pod(启动、停止、删除……)
*ReplicaSet:确保预期pod副本数,保证任何时候都是固定pod数量在工作(动态地根据需求增删pod),通过Deployment来设置ReplicaSet
*ReplicationController:自动增删pod,同ReplicaSet功能相同,ReplicaSet是它的升级版
*Deployment:无状态应用部署,是比ReplicationController更高一层的api,还可以更新回滚ReplicaSet
*StatefulSet:有状态应用部署
*DaemonSet:确保所有node运行同一个pod
*Job:一次性任务,
*Cronjob:定时任务
服务service:将一组相关pod关联起来,对外提供服务,提供统一入口,使得pod地址改变不影响服务
*提供负载均衡
*服务的自动发现
*内部DNS域名服务
*定义相关pod访问策略
标签label:标记pod,node等资源
*便于识别pod,node
*亲和反亲和等策略
命名空间namespace:提供逻辑隔,类似租户隔离
*对象组分类、筛选和管理
猜你喜欢
- 2024-10-10 K8S集群metrics-server组件安装 k8s集群包含哪些组件
- 2024-10-10 第6课 Kubernetes之深入掌握Pod机制及应用
- 2024-10-10 万字长文 | 使用 RBAC 限制对 Kubernetes 资源的访问
- 2024-10-10 Kubernetes:监控指南 kubernetes 监控
- 2024-10-10 《蹲坑学K8S》之21-1:Metrics-Server监控
- 2024-10-10 K8S架构设计及工作流程分析 k8s 结构图
- 2024-10-10 Metrics Server 快速安装 melsoft安装教程
- 2024-10-10 K8S系统的监控及HPA控制器 k8s dashboard 监控
- 2024-10-10 如何通过在多个Vagrant管理的虚拟机上部署多节点Kubernetes集群
- 2024-10-10 Kubernetes集群的自动水平伸缩 kubernetes 自动伸缩
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)