console.log(🍺);|

没有猫的猫奴

园龄:4年7个月粉丝:1关注:3

初识Kubernetes

一、 Kubernetes是什么及其架构

1.1. kubernetes是什么?
  Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。在Kubernetes中,我们可以创建多个容器,每个容器里面运行一个应用实例,然后通过内置的负载均衡策略,实现对这一组应用实例的管理、发现、访问,而这些细节都不需要运维人员去进行复杂的手工配置和处理。kubernetes,简称k8s,是用8代替8个字符“ubernete”而成的缩写。

官网: https://kubernetes.io/docs/home/
github: https://github.com/kubernetes/kubernetes

1.2 kubernetes的架构及各个组件介绍

kube-apiserver
API 服务器是 Kubernetes 控制面的组件, 该组件公开了 Kubernetes API。 API 服务器是 Kubernetes 控制面的前端。Kubernetes API 服务器的主要实现是 kube-apiserver。 kube-apiserver 设计上考虑了水平伸缩,也就是说,它可通过部署多个实例进行伸缩。 你可以运行 kube-apiserver 的多个实例,并在这些实例之间平衡流量。默认端口是:6443

kube-scheduler
控制平面组件,负责监视新创建的、未指定运行节点(node)的 Pods,选择节点让 Pod 在上面运行。调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。默认端口是:10251
调度步骤如下:
通过调度算法为待调度的pod列表中的每个pod从可用node上选择一个最适合的Node
Node节点上的kubelet会通过Apiserver监听到scheduler产生的pod绑定信息,然后获取pod清单,下载image并启动荣区
Node选择策略:
LeastRequestedPriority: 优先选择资源消耗最小的节点
CaculateNodeLabelPriority: 优先选择含有指定label的节点
BalancedResourceAllocation:优先从备选节点中选择资源使用率最均衡的节点
kube-controller-manager
包括一些子控制器(副本控制器,节点控制器,命名空间控制器和服务账号控制器等),作为集群内部的管理控制中心,负责集群内部的Node,Pod副本,服务端点,namespace,服务账号,资源定额的管理,当某个Node意外宕机时,controller manager会及时发现并执行自动修复流程确保集群中的pod副本数始终处于预期的状态
特点:
每隔5s检查一次节点状态
如果没有收到自节点的心跳。该节点会被标记为不可达
标记为不可达之前会等待40s
nide节点标记不可达5s之后还没有恢复,controllerManager会删除当前node节点的所有pod并在其他可用节点重建这些pod
etcd
etcd 是兼具一致性和高可用性的键值数据库,作为保存 Kubernetes 所有集群数据的后台数据库;Kubernetes 集群的 etcd 数据库通常需要高可用架构和有个备份计划。生产环境可以单独部署载独立的服务器上,节点数量一般是:357这样的奇数个数。
kubelet
一个在集群中每个节点(node)上运行的代理。 它保证容器(containers)都运行在 Pod 中。
具体功能如下:
向master(api-server)汇报node节点的状态信息
接受指令并在pod中创建docker容器
准备pod所需要的数据卷
返回pod状态
在node节点执行容日健康检查
kube-proxy
kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service)概念的一部分。kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。如果操作系统提供了数据包过滤层并可用的话,kube-proxy 会通过它来实现网络规则。否则, kube-proxy 仅转发流量本身。
不同版本支持三种工作模式:
userspace: k8s1.1版本之前使用,1.2之后淘汰
iptables: k8s1.1版本开始支持,1.2开始为默认
ipvs: k8s1.9引入,1.11成为正式版本,需要安装ipvsadm,ipset工具包加载ip_vs内核模块

1.3 pod的调度流程

1、kubelet client(或restful api等客户端等方式) 端执行kubelet create pod命令提交post kubelet apiserver请求
2、apiserver 监听接受到请求:
	2.1、对请求进行、解析、认证、授权、超时处理、审计通过
	2.2、pod请求事件进入MUX和route流程,apiserver会根据请求匹配对应pod类型的定义,apiserver会进行一个convert工作,将请求内容转换成super version对象
	2.3、apiserver会先进行admission() 准入控制,比如添加标签,添加sidecar容器等和校验个字段合法性
	2.4、apiserver将验证通过的api对象转换成用户最初提交的版本,进行序列化操作,并调用etcd api保存apiserver处理pod事件信息,apiserver把pod对象add到调度队列中
3schedule相关情况:
	3.1schedule调度器会通过监听apiserver add到pod对象队列,
	3.2、调度器开始尝试调度,筛选出适合调度的节点,并打分选出一个最高分的节点
	3.3、调度器会将pod对象与node绑定,调度器将信息同步apiserver保存到etcd中完成调度
4、工作节点上的相关情况:
	4.1、节点kubelet通过watch监听机制,监听与自己相关的pod对象,kubelet会把相关pod信息podcache缓存到节点内存
	4.2、kubelet通过检查该pod对象在kubelet内存状态,kubelet就能够判断出是一个新调度pod对象
	4.3、kubelet会启动 pod update worker、单独goroutine处理pod对象生成对应的pod status,检查pod所生命的volume、网络是否准备好
	4.4、kubelet调用docker api 容器运行时CRI,发起插件pod所定义容器Container Runtime Interface, CRI请求
	4.5、docker 容器运行时比如docker响应请求,然后开始创建对应容器
总结:
	1. 用户提交创建Pod的请求,可以通过API Server的REST API ,也可用Kubectl命令行工具,支持Json和Yaml两种格式;
	2. API Server 处理用户请求,存储Pod数据到Etcd;
	3. Schedule通过和 API Server的watch机制,查看到新的pod,尝试为Pod绑定Node;
	4. 过滤主机:调度器用一组规则过滤掉不符合要求的主机,比如Pod指定了所需要的资源,那么就要过滤掉资源不够的主机;
	5. 主机打分:对第一步筛选出的符合要求的主机进行打分,在主机打分阶段,调度器会考虑一些整体优化策略,比如把一个Replication Controller的副本分布到不同的主机上,使用最低负载的主机等;
	6. 选择主机:选择打分最高的主机,进行binding操作,结果存储到Etcd中;
	7. kubelet根据调度结果执行Pod创建操作: 绑定成功后,会启动container, docker run, scheduler会调用API Server的API在etcd中创建一个bound pod对象,描述在一个工作节点上绑定运行的所有pod信息。运行在每个工作节点上的kubelet也会定期与etcd同步bound pod信息,一旦发现应该在该工作节点上运行的bound pod对象没有更新,则调用Docker API创建并启动pod内的容器。

本文作者:没有猫的猫奴

本文链接:https://www.cnblogs.com/cat1/p/15890588.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   没有猫的猫奴  阅读(5)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.

作曲 : Reol

作词 : Reol

fade away...do over again...

fade away...do over again...

歌い始めの一文字目 いつも迷ってる

歌い始めの一文字目 いつも迷ってる

どうせとりとめのないことだけど

伝わらなきゃもっと意味がない

どうしたってこんなに複雑なのに

どうしたってこんなに複雑なのに

噛み砕いてやらなきゃ伝わらない

ほら結局歌詞なんかどうだっていい

僕の音楽なんかこの世になくたっていいんだよ

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.

目の前 広がる現実世界がまた歪んだ

目の前 広がる現実世界がまた歪んだ

何度リセットしても

僕は僕以外の誰かには生まれ変われない

「そんなの知ってるよ」

気になるあの子の噂話も

シニカル標的は次の速報

麻痺しちゃってるこっからエスケープ

麻痺しちゃってるこっからエスケープ

遠く遠くまで行けるよ

安定なんてない 不安定な世界

安定なんてない 不安定な世界

安定なんてない きっと明日には忘れるよ

fade away...do over again...

fade away...do over again...

そうだ世界はどこかがいつも嘘くさい

そうだ世界はどこかがいつも嘘くさい

綺麗事だけじゃ大事な人たちすら守れない

くだらない 僕らみんなどこか狂ってるみたい

本当のことなんか全部神様も知らない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

僕は気にしない 君は気付かない

何処にももういないいない

Everybody don't know why.

Everybody don't know why.

Everybody don't know much.

忘れていく 忘れられていく

We don't know,We don't know.