zoukankan      html  css  js  c++  java
  • 《Kubernetes进阶实战》之Kubernetes概述

    摘自《Kubernetes进阶实战》

    1. Kubernetes特性

      Kubernetes是一种用于在一组主机上运行和协同容器化应用程序的系统, 旨在提供可预测性可扩展性高可用性的方法来完全管理容器化应用程序和服务的生命周期的平台。用户可以定义应用程序的运行方式,以及与其他应用程序或外部世界交互的途径,并能实现服务的扩容和缩容,执行平滑滚动更新,以及在不同版本的应用程序之间调度流量以测试功能或回滚有问题的部署。Kubernetes提供了接口和可组合的平台原语, 使得用户能够以高度的灵活性和可靠性定义及管理应用程序。简单总结起来,它具有以下几个重要性。

      (1)自动装箱

      建构于容器之上,基于资源依赖及其他约束自动完成容器部署且不影响其可用性,并通过调度机制混合关键型应用和非关键型应用的工作负载于同一节点以提升资源利率。  

      (2)自我修复(自愈)

      支持容器故障后自动重启、节点故障后重新调度容器,以及其他可用节点、健康状态检查失败后关闭容器并重新创建等自我修复机制。

      (3)水平扩展

      支持通过简单命令或UI手动水平扩展, 以及基于CPU等资源负载率的自动水平扩展机制。

      (4)服务发现和负载均衡

      Kubernetes通过其附加组件之一的KubeDNS(或CoreDNS) 为系统内置了服务发现功能, 它会为每个Service配置DNS名称, 并允许集群内的客户端直接使用此名称发出访问请求, 而Service则通过iptables或ipvs内建了负载均衡机制。

      (5)自动发布和回滚

      Kubernetes支持“灰度”更新应用程序或其配置信息, 它会监控更新过程中应用程序的健康状态,以确保它不会在同一时刻杀掉所有实例,而此过程中一旦有故障发生,就会立即自动执行回滚操作。

      (6)密钥和配置管理

      Kubernetes的ConfigMap实现了配置数据与Docker镜像解耦, 需要时, 仅对配置做出变更而无须重新构建Docker镜像, 这为应用开发部署带来了很大的灵活性。此外, 对于应Secret对象为其解耦, 既便利了应用的快速开发和交付, 又提供了一定程度上的安全保障。用所依赖的一些敏感数据, 如用户名和密码、令牌、密钥等信息, Kubernetes专门提供了Secret对象解耦,既便利了应用的快速开发和交付,又提供了一定程度上的安全保障。

      (7)存储编排

      Kubernetes支持Pod对象按需自动挂载不同类型的存储系统, 这包括节点本地存储、公有云服务商的云存储(如AWS和GCP等) , 以及网络存储系统(例如,NFS、iSCSI、GlusterFS、Ceph、Cinder和Flocker等) 。

       (8)批量处理执行

       除了服务型应用, Kubernetes还支持批处理作业及CI(持续集成) , 如果需要, 一样可以实现容器故障后恢复。

    2. Kubernetes术语

      (1) Pod
      Kubernetes并不直接运行容器, 而是使用一个抽象的资源对象来封装一个或者多个容器, 这个抽象即为Pod, 它也是Kubernetes的最小调度单元同一Pod中的容器共享网络名称空间和存储资源(利用pause容器),这些容器可经由本地回环节口lo直接通信, 但彼此之间又在Mount、User及PID等名称空间上保持了隔离。尽管Pod中可以包含多个容器, 但是作为最小调度单元,它应该尽可能地保持“小”,即通常只应该包含一个主容器, 以及必要的辅助型容器(sidecar)

     (2)资源标签
      标签(Label) 是将资源进行分类的标识符, 资源标签其实就是一个键值型(key/values)数据。标签旨在指定对象(如Pod等) 辨识性的属性, 这些属性仅对用户存在特定的意义,对Kubernetes集群来说并不直接表达核心系统语义。标签可以在对象创建时附加其上, 并能够在创建后的任意时间进行添加和修改。一个对象可以拥有多个标签,一个标签也可以附加于多个对象(通常是同一类对象)之上

     (3)标签选择器
      标签选择器(Selector) 全称为“Label Selector”, 它是一种根据Label来过滤符合条件的资源对象的机制。例如,将附有标签“role:backend”的所有Pod对象挑选出来归为一组就是标签选择器的一种应用。用户通常使用标签对资源对象进行分类,而后使用标签选择器挑选出它们, 例如将其创建为某Service的端点。

      (4) Pod控制器
      尽管Pod是Ku bernet es的最小调度单元, 但用户通常并不会直接部署及管理Pod对象,而是要借助于另一类抽象——控制器(Controller) 对其进行管理。用于工作负载的控制器是一种管理Pod生命周期的资源抽象, 它们是Ku bernet es上的一类对象, 而非单个资源对象,包括Replication Controller、ReplicaSet、DeploymentStatefulSet、Job等。以图1-9中所示的Deployment控制器为例, 它负责确保指定的Pod对象的副本数量精确符合定义, 否则“多退少补”。使用控制器之后就不再需要手动管理Pod对象了, 用户只需要声明应用的期望状态,控制器就会自动对其进行进程管理。

      (5) 服务资源(Service)
      Service是建立在一组Pod对象之上的资源抽象, 它通过标签选择器选定一组Pod对象,存储卷(Volume) 是独立于容器文件系统之外的存储空间, 常用于扩展容器的存储空名称(Name) 是Kubernetes集群中资源对象的标识符, 它们的作用域通常是名称空间并为这组Pod对象定义一个统一的固定访问入口(通常是一个IP地址) , 若Ku bernetes集群存在DNS附件, 它就会在Service创建时为其自动配置一个DNS名称以便客户端进行服务发现。到达Service IP的请求将被负载均衡至其后的端点——各个Pod对象之上, 因此Service从本质上来讲是一个四层代理服务。另外, Service还可以将集群外部流量引人到集群中来。

      (6)存储卷
      存储卷(Volume)是独立于容器文件系统之外的存储空间并为它提供持久存储能力。Ku bernet es集群上的存储卷大体可分为临时卷、本地卷和网络卷。临时卷和本地卷都位于Node本地, 一旦Pod被调度至其他Node, 此种类型的存储卷将无法访问到,因此临时卷和本地卷通常用于数据缓存,持久化的数据则需要放置于持久j卷(persistent volume) 之上。

       (7) Name和Namespace
      名称(Name)是Kubernetes集群中资源对象的标识符,他们的作用域通常是名称空间(Namespace) , 因此名称空间是名称的额外的限定机制。在同一个名称空间中, 同一类型资源对象的名称必须具有唯一性。名称空间通常用于实现租户或项目的资源隔离,从而形成逻辑分组, 如图1-10所示。创建的Pod和Service等资源对象都属于名称空间级别, 未指定时, 它们都属于默认的名称空间“default”。

      (8) Annotation
      Annotation(注解) 是另一种附加在对象之上的键值类型的数据, 但它拥有更大的数据容量。Annotation常用于将各种非标识型元数据(metadata) 附加到对象上,但它不能用于标识和选择对象,通常也不会被Kubernetes直接使用,其主要目的是方便工具或用户的阅读及查找等。
      (9) Ingress
      Kubernetes将Pod对象和外部网络环境进行了隔离,Pod和Service等对象间的通信都使用其内部专用地址进行,如若需要开放某些Pod对象提供给外部用户访问 则需要为其请求流量打开一个通往Kubernetes集群内部的通道,除了Service之外,Ingress也是这类通道的实现方式之一。

    加油,你们是最棒的!
  • 相关阅读:
    python如何使用Matplotlib的作图
    python如何使用Matplotlib的作图
    Python下载M3U8小鹅通回放视频代码
    Python下载M3U8小鹅通回放视频代码
    python自动化之JS处理滚动条
    python自动化之JS处理滚动条
    数据分析项目-数据分析岗位近况分析
    数据分析项目-数据分析岗位近况分析
    Python安装模块常用镜像源
    使用ABSL(ABAP Script Language)完成SAP Cloud for Customer里Customer Quote以及行项目的增删改查
  • 原文地址:https://www.cnblogs.com/Wshile/p/12468834.html
Copyright © 2011-2022 走看看