00:00 / 04:37
连播
清屏
智能
倍速
点赞48
00:00 / 20:27
连播
清屏
智能
倍速
点赞275
00:00 / 04:03
连播
清屏
智能
倍速
点赞154
k8s首选容器运行时containerd 再见了docker kubernetes首选容器运行时containerD来了 在kubernetes 1.20版本之前 首选容器运行时一直是docker 但从1.20版本开始 就不建议使用docker作为容器运行时了 并在1.24版本正式弃用docker 随之containerD成为了首选容器运行时 🔴集成docker有什么问题? kubernetes制定了CRI(Container Runtime Interface)接口 来标准化管理容器运行时 任何实现了CRI接口的容器运行时 都可以与 k8s 集成 即kubelet通过CRI接口调用容器运行时 而k8s与docker集成时 由于docker一直没有实现CRI接口 所以kubelet不能直接调用docker 导致k8s加了一个实现了CRI接口的中间层docker shim 垫片程序 由kubelet先调用dockershim 再由dockershim来调用docker以管理容器 dockershim 维护费时费力 并且多了一个中间层调用还损耗了性能 还有另外一个重要原因是 由于Docker 是一个完整的容器管理工具 包含了CLI,镜像推送和一些高级功能 如镜像构建,健康检查,卷管理 而Kubernetes只需要基础的容器管理功能 这使得Docker在与Kubernetes集成时 出现了不对称的复杂性 🔴如何解决docker集成问题? docker本身依赖containerD containerD随着迭代演进 已经实现了CRI接口 所以 k8s 选择了 直接把containerD作为默认容器运行时 并且移除了dockershim垫片程序 直接由kubelet调用containerD的CRI接口实现 既简化了 k8s 代码 又消除了 Docker 中的多余组件 减少了资源开销 还使得containerD可专注于容器管理本身 在高并发场景下更加稳定 🔴containerD简介 containerD是一个开源的容器运行时 专注于容器的核心生命周期管理 如:创建容器,启动容器,停止容器,删除容器等 最初由 Docker 公司于2015年开始开发 2016年宣布开源 2017年捐赠给云原生计算基金会(CNCF) 并于2019年从CNCF毕业 #每天学习一点点 #程序员 #知识分享 #干货分享 #编程
00:00 / 02:26
连播
清屏
智能
倍速
点赞1886
必须知道的k8s webhook 序员都知道kubernetes功能很强大 webhook机制就是其中之一 你是一名程序员 你们团队开发了商品,订单,用户等k8s服务 为了方便日志查看 现在要实现日志集中式收集功能 我们很容易想到往pod中新增一个容器 专门用于pod日志采集并发往日志聚合服务 日志聚合服务再将日志发往日志检索服务 这样就能很方便地查找各个服务的日志了 但现在有一个问题 你会发现各个pod要新增的日志采集容器是一样的 但各个pod却都要将其定义一遍 明显是浪费劳动力啊! 有没有办法能在开发的时候无需定义日志采集容器 而pod在创建后又包含该容器定义呢? 当然有,没有什么问题是加一个中间层解决不了的 有的话那就再加一层 这次要加的中间层是webhook server k8s webhook 是 k8s 的一种重要的扩展机制 k8s api server会在资源进行指定操作的时候 将资源清单通过HTTP请求发送给webhook server webhook server可以根据自己的需求 校验并修改资源清单 然后把修改后的资源清单返回给api server api server继续执行后续操作 利用k8s webhook机制 我们要做的是新建一个webhook server服务 并将上述修改资源清单逻辑替换为新增日志采集容器 这样虽然我们在pod中只定义了一个容器 但是最终创建的pod会自动注入一个日志采集容器 简直是完美! 不过api server怎么知道webhook server在哪里呢 这就要说说webhook如何配置了 通过MutatingWebhookConfiguration资源 我们可以指定什么资源在进行什么操作的时候 调用哪一个namespace下的哪个服务 出于安全考虑,webhook server须使用HTTPS协议 所以客户端还需要指定CA证书 Webhook 还有另一种类型 叫做Validating Webhook 用于校验资源的合法性,而不修改资源清单 在这种情况下 Webhook Server会在 HTTP 响应中 明确指定校验是否通过 如果校验失败 API Server 会拒绝本次资源操作 并将错误信息返回给客户端 #程序员 #软件开发 #每天学习一点点 #编程 #云原生
00:00 / 02:20
连播
清屏
智能
倍速
点赞358
00:00 / 04:07
连播
清屏
智能
倍速
点赞67
k8s(kubernetes)是什么?架构是怎样的? k8s(kubernetes)是一个谷歌开源的容器编排引擎 实现容器化应用程序的 自动化部署、扩展和管理 🔴k8s总体架构 总的来说 k8s(kubernetes)由控制平面和数据平面组成 控制平面由一组主节点组成 用于管理集群状态 数据平面由一组工作节点组成 用于运行工作负载 各个主节点上的 API server 组成一个高可用服务 用于控制平面与数据平面之间通信 🔴API Server Api server可以说是k8s(kubernetes)中最关键的组件 它管理着k8s的所有API 不仅仅是连接控制平面和数据平面的桥梁 还是集群对外通信的唯一入口 🔴调度器 调度器会根据 CPU,内存,磁盘,节点选择条件等信息 为新创建出来的pod 绑定一个最合适的工作节点 然后相应的工作节点会读取pod信息 以创建容器 🔴控制器管理器 API声明了用户对该资源的期望状态 而资源的实际状态会因为某些原因而偏离期望状态 而控制器会持续监控这些资源的状态 当资源的实际状态与期望状态不一致时 采取相应的措施让资源重新回到用户的期望状态 常见的控制器有 Node Deployment StatefulSet Job 等 而控制器管理器负责启动这些控制器 并监控其状态 如果某控制器崩溃 控制器管理器会将其重启 确保集群稳定运行 🔴云控制器管理器 当k8s(kubernetes)运行在云环境上时 有些信息只有云提供商才知道 例如 节点信息,路由信息 负载均衡配置等 所以k8s需要一个组件与云提供商对接 将云提供商的特定信息初始化到集群中 这就是云控制器管理器 🔴ETCD 是一个高可用的key value数据库 用于存储集群所有的数据 ETCD与Api server相连 供Api server对集群数据进行增删查改操作 🔴kubelet Kubelet运行在集群的每一个节点上 它会监听集群内的所有pod 一旦调度器把某个pod调度到了本节点 kubelet则会调用本节点容器运行时创建容器 并确保容器健康运行 #程序员 #kubernetes #每天学习一点点 #干货分享 #编程
00:00 / 04:14
连播
清屏
智能
倍速
点赞1652
00:00 / 07:36
连播
清屏
智能
倍速
点赞8
00:00 / 01:56
连播
清屏
智能
倍速
点赞3
00:00 / 13:35
连播
清屏
智能
倍速
点赞33
00:00 / 15:02
连播
清屏
智能
倍速
点赞6
00:00 / 04:06
连播
清屏
智能
倍速
点赞33