前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >k8s创建pod的整个过程

k8s创建pod的整个过程

作者头像
怀朔
发布2022-05-29 11:46:11
5.7K0
发布2022-05-29 11:46:11
举报
文章被收录于专栏:运维入门时间

1

背景

过去几年,以 Docker、Kubernetes 为代表的容器技术已发展为一项通用技术,BAT、滴滴、京东、头条等大厂,都争相把容器和 K8S 项目作为技术重心,试图“放长线钓大鱼”。

但容器技术本身偏向运维,namespace 资源隔离、cgroups 资源限制等概念,对开发者来说,理解起来比较困难。尤其在实施 K8S 落地时,总有一些问题被反复提及,比如:

一个pod如何创建起来的?

k8s RBAC怎么管理用户权限的?

k8s 网络是怎么样的?

多套k8s是如何管理维护?

本文主要以k8s如何创建一个pod 为问题点展开,如何创建一个pod

2

pod创建启动过程 创建pod时序图

第一步:kubectl create pod

首先进行认证(RBAC方式 或者 key方式进行认证 )后获得具体的权限,然后kubectl会调用master api创建对象的接口,然后向k8s apiserver发出创建pod的命令

第二步:k8s apiserver

apiserver收到请求后,并非直接创建pod,而是先创建一个包含pod创建信息的yaml文件,并将文件信息写入到etcd中(如果此处是用yaml文件创建pod,则这两步就可以忽略)

这里用pod创建也给出具体cd 部署思路,创建pod形式有二种方案。一种是通过api直接创建生成yaml,另外一种是通过yaml直接应用。

第三步:controller manager

创建Pod的yaml信息会交给controller manager ,controller manager根据配置信息将要创建的资源对象(pod)放到等待队列中。

注意创建的资源对象是并发过程,但是放入队列是一个串行,主要目的还是为了防止1、应用资源创建的先后顺序 2、资源调度过程的优先情况 应用有无状态 3、暂时还没有其他,知道兄弟帮忙补充一下,自己理解。

第四步:scheduler

scheduler (死循环)查看k8s api ,类似于通知机制。首先判断:pod.spec.Node == null? 若为null,表示这个Pod请求是新来的,需要创建;然后进行预选调度和优选调度计算,找到最“闲”的且符合调度条件的node。最后将信息在etcd数据库中更新分配结果:pod.spec.Node = node2(设置一个具体的节点)同样上述操作的各种信息也要写到etcd数据库中。

分配过程需要两层调度:预选调度和优选调度

(1)预选调度:一般根据资源对象的配置信息进行筛选。例如NodeSelector、HostSelector和节点亲和性等。

(2)优选调度:根据资源对象需要的资源和node节点资源的使用情况,为每个节点打分,然后选出最优的节点创建资源对象(pod)。

运维小助手:调度策略在后期成本控制 资源使用 费用计算都是一个好的方案。

第四步:kubelet

节点(选中node)上的kubelet进程通过API Server,查看etcd数据库(kubelet通过API Server的WATCH接口监听Pod信息,如果监听到新的pod副本被调度绑定到本节点)监听到kube-scheduler产生的Pod绑定事件后获取对应的Pod清单,然后调用(被选中node)本机中的docker api初始化volume、分配IP、下载image镜像,创建容器并启动服务。

注意顺序 有状态和无状态创建过程中,有状态是有先后顺序的无状态是没有的

第五步:controller manager

controller manager会通过API Server提供的接口实时监控资源对象的当前状态,当发生各种故障导致系统状态发生变化时,会尝试将其状态修复到“期望状态”。

3

创建过程注意点

1、合理的设置cicd块 网络划分,注意网络隔离资源及网络冲突预留扩展性

2、在master进行高可用的冗余部署,以防止单可用区 或者 单机房宕机情况

3、注意etcd数据库容量问题

4、注意services 暴露过多导致网络调用链的问题

4

云厂商K8S对比情况

据aws同学说 最新的eks SLA 增加到了99.95% 创建过程也缩减到了9分钟

5

k8s排查故障神图

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维入门时间 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第二步:k8s apiserver
  • 第三步:controller manager
  • 第四步:scheduler
  • 第四步:kubelet
  • 第五步:controller manager
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档