Kubernetes(一)

发布于:2023-01-22 ⋅ 阅读:(4) ⋅ 点赞:(0) ⋅ 评论:(0)

是什么

Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态,其服务、支持和工具的使用范围相当广泛。

 可以做什么

  • 服务发现和负载均衡

  • 存储编排

  • 自动部署和回滚

  • 自动完成装箱计算

  • 自我修复

  • 密钥与配置管理

内部架构

 在这这个架构中,我们可以看到很多的Kubernetes的各个组件,每个组件之间独立工作,但又相互联系,这样的架构,使得Kubernetes拥有更好的操作性和可扩展性。

在我们的Docker容器里,我们说镜像是创建 Docker 容器的基础,容器是从镜像创建的应用运行实例。没有镜像就不会有容器的运行。而在Kubernetes里,把一个容器作为一个“单位”,一个或多个容器会被放在叫Pod的组件中, Pod 就是作为应用负载的组件。要保证容器正常运行在Pod中,需要kubelet 接收一组通过各类机制提供给它的 PodSpecs, 确保这些 PodSpecs 中描述的容器处于运行状态且健康。

kube-proxy,是集群中每个节点所上运行的网络代理, 实现 Kubernetes服务概念的一部分。

kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。如果操作系统提供了可用的数据包过滤层,则 kube-proxy 会通过它来实现网络规则。 否则,kube-proxy 仅做流量转发

kube-proxykubelet共同运行在一个Node节点中,节点会托管所谓的 Pods, 为集群提供故障转移和高可用性, 这些控制平面一般跨多主机运行,而集群也会跨多个节点运行。

那么,节点是怎样与高效工作呢?此时,就需要一个“管理层”——Control Plane,它里面包含了对各服务组件,保障整个服务的运行。

kube-apiserver 

该组件负责公开了 Kubernetes API,负责处理接受请求的工作。 API 服务器是 Kubernetes 控制平面的前端。

 kube-apiserver 设计上考虑了水平扩缩,也就是说,它可通过部署多个实例来进行扩缩。 你可以运行 kube-apiserver 的多个实例,并在这些实例之间平衡流量。

etcd

etcd是兼顾一致性与高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库

kube-scheduler

负责监视新创建的、未指定运行节点的 Pods, 并选择节点来让 Pod 在上面运行。

kube-controller-manager

 负责运行控制器进程。

从逻辑上讲, 每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在同一个进程中运行。

控制器包括:

  • 节点控制器(Node Controller):负责在节点出现故障时进行通知和响应
  • 任务控制器(Job Controller):监测代表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
  • 端点控制器(Endpoints Controller):填充端点(Endpoints)对象(即加入 Service 与 Pod)
  • 服务帐户和令牌控制器(Service Account & Token Controllers):为新的命名空间创建默认帐户和 API 访问令牌