• k8s基础


    1.kubernetes架构与组件

    Kubernetes集群是由一组节点,也就是node节点组成,可以是物理服务器,也可以是虚拟机。
    每个node节点上都安装了kubelet和kube-proxy这两个node组件。
    而安装了master组件的节点称为master node。
    node组件通过kubelet组件与master组件进行交互,维护着该node上的pod的生命周期。
    一个典型的master集群是由一个master node和若干个承载工作负荷的node组成。
    kubernetes通过etcd存储着集群中的所有对象和状态。
    kubernetes还提供了集群维护的超级命令行工具kubectl。

    (1)master

    master组件主要包括:Apiserver、Scheduler、Controller Manager和etcd。
    Api Server是master组件的中枢,其余的master组件都是通过调用Api的接口,实现各自的功能。
    API server是整个集群控制的前端,是唯一可以修改集群状态和数据库的组件

    master组件是Kubernetes集群的大脑。
    所有集群的控制命令都传递给Master组件并在其上执行。
    每个Kubernetes集群至少有一套Master组件。来负责控制和管理整个集群,才能保证集群的正常运转。
    它协调集群中的所有活动,包括集群中应用的调度、状态维护、应用升级和伸缩,以及对外的API接口。

    API Server:
      集群控制的唯一入口,是提供Kubernetes集群控制Restful API的核心组件。封装了核心对象的增删改查等操作。
      提供集群控制的安全机制(身份认证、授权以及admission control)。

    Scheduler:
      通过API Server的Watch接口监听新建Pod副本信息,并通过调度算法为该Pod选择一个最合适的Node。
      支持自定义调度算法provider。
      默认调度算法内置预选策略和优选策略,决策考量资源需求、服务质量、软硬件约束、亲缘性、数据局部性等指标参数。

    ControllerManager:
      集群内各种资源controller的核心管理者。
      针对每一种具体的资源,都有对应的Controller。
      保证其下管理的每个Controller所对应的资源始终”处于期望状态“。

      

    Etcd:
      Kubernetes集群的主数据库,存储着所有资源对象以及状态。
      默认与Master组件部署在一个Node上。
      Etcd的数据变更都是通过API Server进行的。

    (2)Node组件

    Kubernetes集群中真正的工作负载均衡节点。
    Kubernetes集群由多个Node共同承担工作负载,Pod被分配到某个具体的Node上执行。
    Kubernetes通过node controller对资源进行管理。支持动态在集群中添加或刪除Node。
    每个集群Node1上都会部署Kubelet和Kube-proxy两个组件。

    Kubelet:
      位于集群中每个Node上的非容器形式的服务进程组件,Master和node之间的桥梁。
      处理master下发到本Node上的Pod创建、启停等管理任务,向APIServer注册Node信息。
      监控本Node上容器和节点资源情况,并定期向master汇报资源占用情况。

    Kube-proxy:
      Service抽象概念的实现,将到Service的请求按策略(负载均衡)算法分发到后端Pod上。
      默认使用iptables mode实现。
      支持nodeport模式,实现从外部访问集群内的service。

    2.Kubernetes基本概念

    (1)kubernetes对象和对象模型

    Kubernetes对象是一种持久化的、用于表示集群状态的实体。
    一种声明式的意图的记录,一般使用yaml文件描述对象。
    Kubernetes集群使用Kubernetes对象来表示集群的状态。
    通过API/kubectl管理Kubernetes对象。

    (2)常用的metadata属性

    Name和UID:
      Kubernetes集群中所有对象都通过name和UID明确标识。
      在Kubernetes集群的整个生命周期内创建的每个对象实例都具有不同的UID。

    Namespace:
      不仅仅是一个属性,本身也是一个object。
      用于将物理集群划分为多个虚拟集群。
      常用来隔离不同的用户及权限。
      内置三个Namespaces:default、kube-system和kube-public、Node和PersistentVolume不属于任何namespace。

    Label:
      用于建立集群对象之间的灵活的、松耦合的多维关联关系。
      一个label是一个键值对,其中key、value均由用户自己定义。
      label可以附着在任何对象上,每个对象也可以有任意个标签。
      标签可在对象定义时附加上,也可以通过命令动态管理标签。
      Label可以将有组织目的的结构映射到集群对象上,从而形成一个与现实世界管理结构同步对应松耦合的、多维的对象管理结构。
      通过label select查询和刷选建立对象间的关系。

      

    Annotations(注解):
      可以将任意非标识性元数据附加到对象上。也是以键值对形式呈现。
      工具和库可以检索到并使用这些Annotation元数据。
      将数据作为Annotation附着在对象上,有利于创建一些用于部署、管理和做内部检查的共享工具或客户端。

    (3)kubernetes对象分类

    Kubernetes中的对象有很多,主要可以分为以下:

    Pod:
      一个有特定关系的容器集合。
      Pod是集群中可以创建和部署的最小且最简的Kubernetes对象单元。
      Pod也是一种封装。它封装了应用容器,存储资源,独立的网络以及决定容器如何运行的策略选项。
      每个Pod中预置一个Pause容器,其名字空间、IPC资源、网络和存储资源被Pod内其它容器共享。
      Pod中所有容器紧密协作并且作为一个整体被管理、调度和运行。
      Pod是一个非持久性实体,在调度失败、节点故障、缺少资源等情况下都可以被终止掉。
      即使只有一个Pod,也不应该手动创建。

      Pod的生命周期图如下:

      

    Service:
      与云原生应用中”微服务“概念对应。
      Kubernetes集群为每个Service分配一个集群唯一的IP地址。
      在service的生命周期内,该IP地址不变;在内部DNS的支持下,轻松实现服务发现机制。
      Service通过label selector关联到实际支撑业务运行的Pod上,
      并通过集群内置的负载均衡将服务请求分发到后端Pod。
      通过nodeport或设置loadbalancer机制实现集群外部对service的访问。

    Controllers:
      Controller是Kubernetes核心对象之一。
      Controller用于保证集群内一组Pod能始终按照某种期望的状态正常运行。
      状态包括:Pod副本数量、节点选择、资源约束、持久化数据维持等。
      Kubernetes支持多种Controller,常用的Deployment、replicaset、statefulset、daemonset等。
      ReplicaSet:
        确保健康Pod的副本数始终满足用户定义的数量。
        前身是ReplicationController(rc),相比rc,增加集合式label selector的支持。
        支持单独使用,但更多隐藏在Deployment控制器后面,由deployment自动管理。

      deployment
        为Pod和ReplicaSet提供了声明式的定义(declarative)。
        用户在deployment文件中描述期望状态,Deployment controller就会自动将Pod和Reploca Set的实际状态变更到期望状态。
        Deployment支持Pod的RollingUpdate,并自动管理背后的Replicaset。
        Deployment支持将pod Rollback到之前的任意revision。

      StatefulSet
        StatefulSet提供对有状态的应用的部署和控制的支持。
        使用场景:稳定的持久化存储、稳定的网络标志、有序部署有序扩展、有序收缩有序刪除、有序自动滚动升级等。
        Pod的存储必须由PersistentVolume Provisioner根据请求的Storage Class进行配置,或由管理员预先配置好。
        考虑数据安全性,伸缩或刪除StatefulSet不会刪除关联的存储;
        另外StatefulSet目前要求Headless Service负责Pod的网络身份,用户有责任创建此服务。

      DaemonSet
        保证每个Node上都运行一个Pod副本。
        适用场景:系统Daemon程序、监控跟踪、日志收集等。
        可指定Node:nodeSelector、nodeAffinity、podAffinity

      ConfigMap
        常用来向Pod提供非敏感的配置信息。
        ConfigMap用于保存配置数据的键值对,可以用来保存单个属性,也可以用来保存配置文件。
        ConfigMap可以适用命令行基于字面值、文件或目录来创建或通过configmap对象定义文件创建。
        ConfigMap可以通过三种方式在Pod中使用:环境变量、命令行参数或以文件形式通过数据卷插件挂载到Pod中。

      Secret
        解决的是集群内密码、token、密钥等敏感的数据的配置问题。
        常用于与ServiceAccount股那里,存储在tmpfs文件系统中,刪除后Secret文件也会对应的刪除。
        支持Opaque、kubernetes.io/Service Account,kubernetes.io/dockerconfigjson三种类型。
        Secret可以以Volume或者环境变量配合使用。  

  • 相关阅读:
    “xmlns:d="http://schemas.microsoft.com/expression/blend/2008"” 命名空间不能被解析
    mysql 连接命令 表管理 ,克隆表,临时表,字符串属性,设定语句间的分隔符
    视图
    NULL值比较,两个列的合并,列值按条件替换。
    词性和 句子成份
    设置用户帐号只能一个地方登录
    数字的格式化,异常处理
    接口,构造器与垃圾回收机制,对像的生命周期。非静态方法与静态方法。
    继承,多态..
    JavaScript —— 常用数据类型隐式转换
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/12547335.html
Copyright © 2020-2023  润新知