Kubernetes(K8S)

1、介绍

Kubernetes, also known as K8s, is an open-source system for automating deployment, scaling, and management of containerized applications.

以下给出几个定义:

1.官网:它是一个用来【自动化】[部署、扩展和管理]'容器化'应用的开源系统


2.Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着


3.Kubernetes(通常称为K8s,K8s是将8个字母“ubernete”替换为“8”的缩写)是一个以容器为中心的基础架构,可以实现在物理集群或虚拟机集群上调度和运行容器,提供容器自动部署、扩展和管理的开源平台

2、为什么要用K8S

简单理由:国内大型云厂商都是支持K8S管理、自动、扩展集群容器化部署应用(无论是阿里云、腾讯云、华为云等等),而且它也是目前最流行容器编排的方式!

下面说明优点:

,该文章总结的比较好的,我就概括一下它的优点比较,如下:
kubernetes是一个容器编排工具,可以高效、批量的去管理容器;docker有自带的docker-compose(单机编排)和docker-Swarm(多机编排),为什么还要用k8s,Docker-Compose的运用可以充分地把单物理服务器的性能充分利用起来,并且可以快速地进行持续交付,那如何高效地进行监控各个容器的健康运行情况以及崩溃后如何迁移服务呢?也就是常见的集群管理问题,此时的docker Swarm技术解决了这个问题,但是如何更加高效、智能的管理容器集群呢?

快速部署功能(helm):定义对应的charts,可以方便把大型的应用部署上去。
智能的缩扩容机制:部署时候会自动去考虑容器应该部署在哪个服务器上,以及副本的数量可以自定义。
自愈功能:某个节点的服务崩溃了,可以自动迁移到另外一个服务器节点来恢复来实现高可用。
智能的负载均衡:利用Ingress,可以实现流量通过域名访问进来时候,进行流量的分流到不同服务器上。
智能的滚动升降级:升级或者降级时候,会逐个替换,当自定义数量的服务升级OK后,才会进行其他的升级以及真正销毁旧的服务

总结:更加高效、自动化,智能化管理容器化集群

k8s上运行python k8s openebs_容器

3、K8S的架构:

3.1、组件简述

前提:你要知道pod是一组并置的容器(就是多个或一个紧密的容器),其它的组件无法就是围绕着管理pod、使用pod、暴露pod等工作进行的。而且pod是k8s调度的最小资源单位

K8S集群分为两部分:

  • Kubernetes控制平面
  • (工作)节点

k8s上运行python k8s openebs_kubelet_02

3.1.1、控制平面组件

控制平面负责控制并使得整个集群正常运转。这些组件用来存储、管理集群状态,但是它们不是运行应用的容器。

  1. etcd分布式持久化存储
    etcd作为pod、ReplicationController、服务和私密凭据等持久化存储的地方,也是k8s集群状态和元数据唯一存储地方。它是一个响应快、分布式、一致的key-value存储。
    唯一能直接和etcd通信的是API服务器,其它组件都是通过API服务器间接读写数据到etcd的
  2. API服务器(中心组件):
    它是K8S的中心组件,其它组件或客户端都要调用它完成通信,同时它也负责对接etcd的读写工作。其次它也对客户端存储对象到etcd提供校验工作
  3. k8s上运行python k8s openebs_kubelet_03

  4. API服务器通知客户端资源变更
  5. k8s上运行python k8s openebs_容器_04

  6. 调度器
    调度器主要负责的工作就是指定pod的工作节点,其次借助API服务器去通知更新pod的定义,然后api服务器通知Kubelet运行或更新pod
  7. 控制器管理器(实现自主控制重点):
    控制器管理器负责使得所有活跃的组件确保系统真实状态朝API服务器定义的期望的状态收敛(靠近)。控制器管理器中的控制器包括:Replication管理器(控制pod资源数量)、Deployment控制器(控制deployment资源期望值),replicaSet控制器(控制副本数量)等
  8. k8s上运行python k8s openebs_云原生_05

3.1.2、工作节点上的组件
  1. Kubelet
    Kubelet负责所有运行在工作节点上内容的组件,启动pod容器(配置好的容器运行时从特定容器镜像运行容器)、监控容器状态、向API服务器报告它们的状态、事件和资源消耗等
  2. Kubelet服务代理(Kube-proxy)
    负责网络服务代理,用于确保客户端可以通过k8sAPI连接到你定义的服务
  3. 容器运行时
    它负责运行容器的软件,支持的容器类型: containerd 、CRI-O等(docker新版本中已经放弃维护了)
3.1.3、附加组件【暂不讨论】
3.2、简单的流程调度图

自己理解的创建pod与访问服务流程图(仅代表自己理解,有误解请指正):

k8s上运行python k8s openebs_kubelet_06

参考文章:

https://zhuanlan.zhihu.com/p/68476641

https://kubernetes.io/

《Kubernete in Action 中文版》