Edehuag

导航

kubernetes-k8s

本篇文章帮助理解什么是k8s,只为构建对k8s最基础的认识,k8s也是kubernetes的单词从k到s隔了8个字母简化得来的。

kubernetes简介

Kubernetes是Google公司在2014年6月开源的一个容器集群管理系统,使用Go语言开发。
它介于应用服务和服务器之间,能够通过策略协调和管理多个应用服务。只需要一个yaml定义应用的部署顺序等信息就能自动部署到各个服务器上能够让他们自动扩缩容。
而且还能做到挂掉之后自动在其他服务器上自动部署应用。

那他是咋实现的呢?!
这就要说一k8s下的架构原理了。
k8s会将我们的服务器划分为两部分,一部分叫控制平面control plane,另一部分是工作节点Node。它们之间的关系可以理解为老板和打工人。
控制平面负责管理各个Node,Node则实际负责运行各个应用服务。

控制平面内部组件

也许以前我们需要登陆到服务器上手动执行各种命令,有了它我们只需要调用K8S提供的API接口就能操作这些服务资源了。这些接口都是由API Server提供。

  • schedule
    以前我们需要登录各个服务去看每台服务器的CPU和内存情况然后在进行部署应用 =》 现在只需要用调度器(schedule)来完成。
  • Controller manager
    以前我们需要手动创建和关闭服务,现在这部分功能由Controller manager =》 现在这部分功能Controller manager来完成。
  • etcd
    这些操作都会产生相应的数据,而这部分的数据则需要保留在存储层,所以还需要etcd。

Node内部组件

Node是实际的工作节点,它既可以是裸机的服务器也可以是虚拟机,它负责实际运行各个服务器、多个应用服务共享一台Node上的内存和cpu等计算资源。
以前我们需要上传代码到服务器,而用了k8s我们只需要将服务代码打包成container image容器镜像,就可以用一行命令将它部署。
(容器镜像可以理解为将代码和依赖环境打了个压缩包,这个压缩包就是镜像,它只要在目标机器上解压然后就能正常就能正常运行服务了)

  • Container runtime
    负责下载和部署镜像相当于容器运行时组件。

  • Pod
    每个应用服务都可以认为是一个Container。一般会为应用服务搭配一个日志收集器Container或监控采集器Container,这些Container组成一个一个pod。
    它运行在Node上,k8s可以将Pod从某个Node调度到另一个Node的上,还能以Pod为单位去做重启和动态扩容缩容的操作。所以大家常说pod是k8s中最小的调度单位。

  • Kubelt
    在控制平面中提到的Controller manager可以创建和关闭服务,就是通过Node中的Kubelt组件来完成,Kubelt主要负责管理和监控Pod。

  • Kube Proxy
    它负责Node的网络通信功能,有了它外部的的请求才能转发到Pod中。

Cluster-集群

Cluster是由控制平面和Node共同组件的。
一般公司会构建多个集群,比如测试环境、正式环境。为了将集群的入口暴露给外部用户使用还要部署一个入口控制器。如:Ingress控制器。

Kuberctl

之前提到我们可以使用k8s提供的API去创建服务,那么我们需要调用代码来实现吗?
答:不需要,k8s为我们准备了一个命令行工具-Kuberctl,我们只需要执行命令它内部就会调用k8s的API。

怎么部署服务

先编写YAML文件,定义pod使用了哪些镜像占用多少内存和CPU等信息。
然后使用Kuberctl命令行工具,执行Kuberctl apply yaml文件,此时Kuberctl会解析yaml文件,将解析后的对象通过API请求发送给k8s的API Server。
API Server会根据要求趋势Scheduler通过ETCD寻找合适的Node,再让Controller manager控制Node创建服务。
Node内部的Kubelet在收到命令后会开始基于container runtime组件去拉取镜像创建容器,最终完成Pod创建,至此服务完成创建。

kubectl apply -f xx.yaml

发现了吗,整个过程我们只需要写一遍yaml文件和执行一次Kuberctl命令。 省心、省力、省时

怎么调用服务

有k8s之前:在浏览器上发送http请求达到服务器的nginx,然后转发到部署的服务内。
有k8s之后:外部请求先到达K8S集群的Ingress控制器,然后请求会被转发到K8S内某个NOde的Kube proxy上,再找到对应的Pod后,然后才转发到容器内部服务中(处理结果原路返回)。

总结:
k8s的本质就是应用服务和服务器之间的中间层,它通过暴露一系列API的能力让我们简化部署和运维的流程。

posted on 2024-10-18 14:29  饿得慌~  阅读(5)  评论(0编辑  收藏  举报