docker与k8s的区别,分别适用于什么场景?
docker只负责生成容器,没有其他功能,但部署简单,方便测试等,k8s附带的有各种功能:探针、污点、资源限制、高可用等,如果生产中的服务达到一定规模且需保证全链路监控及高可用,k8s是最佳选择docker的底层实现原理?如何运行一个容器?
六种命名空间的共享与限制,镜像的写时复制原则,资源限制(参考:https://www.cnblogs.com/lijin543/p/15635844.html)容器负载相较虚机要低,如何实现?
镜像体积较小,只安装需要的依赖;Cgroup资源限制k8s都有哪些核心组件?ETCD能不能换成redis?
在微服务架构中,etcd用于服务的注册和发现,利用了其租约特性,而Redis是通用的分布式内存缓存系统,通常用于通过缓存内存中的数据和对象来加速动态数据库驱动的网站 虽然Redis和etcd都是键值存储,但是它们有不同的设计目标和适用场景。以下是一些原因,说明为什么Redis不能替代etcd: 一致性:etcd是一个强一致性的分布式键值存储,它提供了一种可靠的方式来存储需要被分布式系统或机器集群访问的数据,而Redis是一个分布式缓存系统,它的一致性模型是最终一致性,不能保证数据的强一致性 高可用性:etcd被设计为高可用性,即使其中一些节点失败,它也可以继续运行。而Redis的高可用性需要通过主从复制和哨兵机制来实现,这些机制需要额外的配置和管理 数据类型:etcd只用于存储Kubernetes对象,而Redis和其他键值存储有数据类型的灵活性,可以存储各种类型的数据 查询和索引:etcd只保证了高可用性,但并没有给你提供快速查询和索引。所有的nosql键值存储都是以快速查询和搜索为目标建立的api-server为什么不能直接生成控制器,而是由控制器管理器发出生成控制器指令?
职责不同,api-server负责与各个组件交互,提供准入控制功能(证书通过后才能访问localhost:6443/8080),集成安全机制(RBAC),而关于资源状态这一块它负责将期望的资源状态以键值对数据形式持久存储在ETCD中,一旦发生变化,控制器在api-server提供的当前状态基础上做出相应调整,以达到期望状态kubectl apply -f deployment的yaml文件背后都做了什么?
用户提交创建Pod的请求,可以通过API Server的REST API ,也可用Kubectl命令行工具,支持Json和Yaml两种格式; API Server 处理用户请求,存储Pod数据到Etcd; Scheduler通过和 API Server的watch机制,查看到新的pod,尝试为Pod绑定Node; 过滤主机:调度器用一组规则过滤掉不符合要求的主机,比如Pod指定了所需要的资源,那么就要过滤掉资源不够的主机; 主机打分:对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等; 选择主机:选择打分最高的主机,进行binding操作,结果存储到Etcd中; kubelet根据调度结果执行Pod创建操作: 绑定成功后,会启动container, docker run, scheduler会调用API Server的API在etcd中创建一个bound pod对象,描述在一个工作节点上绑定运行的所有pod信息。运行在每个工作节点上的kubelet也会定期与etcd同步bound pod信息,一旦发现应该在该工作节点上运行的bound pod对象没有更新,则调用Docker API创建并启动pod内的容器。