初步了解Kubernetes(k8s)及其工作原理

k8s是介于应用服务服务器之间的中间层,通过策略,协调和管理多个应用服务,只需要一个yaml文件配置,定义应用的部署顺序等信息,就能自动部署应用到各个服务器上,还可以实现服务器的自动重启,自动扩缩容

k8s架构原理

为了实现以上功能,k8s将服务器划分为两部分,控制平面(control plane)、工作结点(Node)

字面意思,控制平面控制工作结点,工作节点负责运行各个应用服务

控制平面内部组件
  • API Server
    通过k8s提供的API接口,就可以快捷地操作服务器资源
  • Scheduler
    调度器,负责找到cpu和内存资源充足的服务器,在该服务器上部署应用
  • Controller Mannager
    控制管理器,负责找到服务器后控制和关闭服务
  • 存储层
    保存上述功能产生的数据,目前使用的是etcd
Node内部组件

使用了k8s之后,只需要将服务代码打包成Container Image(容器镜像),就能一行命令将它部署。而容器镜像简单理解就是应用代码和系统环境的压缩包。
为了下载和部署容器镜像,Node中有一个Container runtime组件
每一个应用服务都可以认为是一个Container(容器),服务器通常情况下还有日志收集器Container或者监控收集器Container,多个Container共同组成一个Pod,Pod运行在Node上
k8s可以将Pod从一个Node调度到另一个Node,还可以以Pod为单位去重启和动态扩缩容。所以,**Pod是k8s中最小的调度单位

kubelet主要通过从Controller Manager接受命令来管理和监控Pod
Kube Proxy负责Node的网络通信功能,有了它,外部请求才能被转发到Pod内

Cluster

控制平面和Node共同组成了一个Cluster,也就是集群,同时,为了将集群内部的服务暴露给外部用户使用,我们一般还会部署一个入口控制器,比如 Ingress 控制器(比如 Nginx),它可以提供一个入口让外部用户访问集群内部服务

kubectl

kubectl是一个命令行工具,只要我们执行命令,kubectl内部就会调用k8s的API,而不需要我们自己写代码去调用k8s提供的API

k8s部署服务的过程
  • 首先编写YAML文件,在里面定义Pod里用到了哪些镜像容器,占用了多少内存和CPU等信息
  • 再使用kubectl命令行工具执行
    kubectl apply -f xx.yaml,kubectl就会读取和解析YAML文件,将解析后的对象通过API请求发送给Kubenetes控制平面内的API Server。
  • API Server会根据要求,去世Scheduler通过etcd提供的数据寻找合适的Node。
  • Controller Manager会通过API Server控制Node创建服务,Node内部的kubelet在收到命令后会开始基于Container runtime 组件去拉去镜像创建容器,最终完成Pod的创建
如何调用服务?

外部请求会先到达k8s集群的ingress控制器,然后请求会被转发到k8s内部的某个Node的Kube Proxy上,再找到对应的Pod,然后才是转发到内部容器中,处理结果原路返回。到此完成一次服务调用

参考:小白debug

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值