k8s知识
共享网络
每个Pod 里,额外起一个Infra container小容器来共享整个Pod的Network Namespace Infra container 是一个非常小的镜像,大概 100~200KB 左右,是一个汇编语言写的、永远处于“暂停”状态的容器。由于有了这样一个Infra container之后,其他所有容器都会通过Join Namespace的方式加入到Infra container的Network Namespace中 整个 Pod 里面,必然是 Infra container 第一个启动
共享存储
Pod来给容器共享存储可以通过挂载同一个Volume(EmptyDir)来解决
容器设计模式
Sidecar边车模式,执行主业务容器所需要的一些辅助工作 (1)需要在主业务容器启动前做一些前置准备可使用Init Conainer来解决 (2)日志收集,转发到ELK集群,打包进Pod里做收集工作(Fluentd) (3)监控业务,将监控组件或者监控脚本装进Sidecar容器与主容器进行协作 (4)Proxy代理:代理容器能够实现对业务容器屏蔽被代理的服务集群,简化业务代码实现的逻辑 (5)适配器容器:将业务容器暴露出来的接口转换成另一种模式,比如业务容器暴露接口/metrics,监控系统升级需要访问/health才能够访问,这时候Sidecar容器就可以起到转发请求的作用,且由于Pod之间是Localhost直接通信,不存在性能损耗。
管理模式
Deployment只负责管理不同版本的ReplicaSet,由ReplicaSet来管理Pod副本数,每个RS对应了Deployment template的一个版本,一个RS下的Pod的都是同一版本,Template Hash都是一样的 Deployment负责创建ReplicaSet,ReplicaSet负责创建Pod Deployment 发布部署的根本原理是调整不同版本的ReplicaSet的终态副本数,回滚也是通过回滚到不同版本的ReplicaSet
Deployment控制器
控制器都是通过 Informer 中的 List-Watch机制 对订阅到的事件 通过注册的Event Handler 进行处理 Deployment 控制器会将 DP 和 RS 的Event加入到队列,Deployment Controller从队列中取出事件后会判断Paused是否为True来决定是更新ReplicaSet 注意:Deployment Controller主要负责管理Deployment对象,创建和管理ReplicaSet,并不会直接对Pod资源变更做出反应,而是监控和管理ReplicaSet
ReplicaSet控制器
ReplicaSet controller只管理副本数,Deployment 控制器负责ReplicaSet版本管理
Spec字段解析
(1)inReadySeconds:Deployment 就一定会等到 Pod ready 超过MinReadySeconds才会认为是Available的,Available的前提是Pod ready (2)revisionHistoryLimit:保留历史 revision,即保留历史 ReplicaSet 的数量,默认值为 10 个 (3)paused:paused 是标识,Deployment 只做数量维持,不做新的发布 (4)progressDeadlineSeconds:当 Deployment 处于扩容或者发布状态时,如果超过DeadlineSeconds还处于 processing,那么 controller 将认为这个 Pod 会进入 failed 的状态
Deployment更新升级策略字段解析
MaxUnavailable:滚动过程中最多有多少个 Pod 不可用 MaxSurge:滚动过程中最多存在多少个 Pod 超过预期 replicas 数量 在生产环境中,如果资源足够,注重服务可用性,MaxUnavailable 可设置25%以下、MaxSurge可设置50%以上
DaemonSet控制器
(1)保证集群内的每一个节点都运行一组相同的Pod (2)保证新加入集群节点自动创建相应DaemonSet的Pod (3)在节点移除集群时自动删除对应Pod (4)监控Pod状态,如Deployment一样保持DaemonSet Pod的数量 适用于:(1)日志Fluentd(2)持久化存储NFS(3)性能Metricbeat
配置管理
可变配置就用 ConfigMap 敏感信息是用 Secret 身份认证是用 ServiceAccount 这几个独立的资源来实现的 资源配置是用 Resources 安全管控是用 SecurityContext 前置校验是用 InitContainers 这几个在 spec 里面加的字段,来实现的这些配置管理
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库