• 原生技术基础学习(基础概念)


    云原生技术基础学习

    基础

    • 容器基本概念:

      • namespace 资源视图隔离
      • cgroup 控制资源使用率
      • chroot 独立的文件系统
      • 容器是一个视图隔离,资源可限制、独立文件系统的进程集合。
      • 容器镜像: 运行容器所需要的所有文件集合
        • Dockerfile 来描述镜像构建步骤。
        • 构建步骤所产生出文件系统的变化叫做 changeset
        • disk snapshot, 提高分发效率,减少磁盘压力。
    • Kubernetes 的概念:

      • Kubernetes 是自动化的容器编排平台, 包括部署、弹性、管理
      • 核心功能: (kubernetes 的水平伸缩, 自动恢复, 调度)
        • 服务发现与负载均衡
        • 容器自动装箱
        • 存储编排
        • 自动容器恢复
        • 自动发布与回滚
        • 批量执行
        • 水平伸缩
      • 架构简介:
        • Kubernetes 架构是一个比较典型的二层架构 和 server-client 架构。master 作为作为中央的控制节点会与Node 进行一个连接。
        • 所有 UI,client 这些user侧组件只会和 Master 进行连接,把希望的状态或像执行的命令下发给master, master 会把这些命令或者状态下发给相应的节点,进行最终的执行。
        • Kubernetes 的 master 包含四个主要的组件: API Server, Contronller, Scheduler 以及 etcd。
          • API Server: Kubernetes 中的所有组件都会和 API Server 进行连接, 组件与组件之间不进行独立的连接,都依赖于 API Server 进行消息的传送。
            • 部署结构上,API Server 是一个可以水平扩展的一个部署组件
          • Controller: 是控制器,它用来完成对集群状态的一些管理。自动对容器进行修复和自动进行水平扩张,都是由 Kubernetes 的 Controller 来进行完成的。
            • Controller 是一个可以进行热备的部署组件,它只有一个active。
          • Scheduler: 是调度器,是完成调度的操作,把用于提交的 Container 依据它对CPU/Mem请求的大小,找到一台合适的节点,进行放置。
            • 调度器也是一个 active 的部署组件,可以进行热备。
          • etcd: 是一个分布式的存储系统,API Server 中所需的原信息都被放置在 etcd 中,etcd 本身是一个高可用系统,通过 etcd 保证整个 Kubernetes 的 Master 组件的高可用性。
        • Kubernetes 的 Node 架构:
          • Kubernetes 的 Node 是真正运行业务负载的,每个业务负载会以 Pod 的形式运行。
          • 一个 Pod 中运行的一个或者多个容器,真正去运行这些 Pod 的组件是被叫做 kubelet (Node上最为关键的组件),kubelet会把 从API Server 接收到需要Pod运行的状态,然后提交到 Container Runtime 组件中。
          • 在 OS 上去创建容器所需要运行的环境,最终将容器或者Pod运行起来,需要对存储和网络进行管理,kubernetes 并不会直接进行网络存储的操作,他们会靠 Storage Plugin 或者 网络的 Plugin 来操作。
          • Kube-proxy 是真正完成 service 组网的组件,它利用 iptable 的能力来进行组建 Kubernetes 的 Networks, 也就是 cluster network。
        • Pod 是 Kubernetes 的一个最小调度以及资源单元, Pod 中也可以包含一些其他所需要的资源: 比如 Volume 卷的存储资源, 在 Pod 里买呢可以去定义容器所需要运行的方式,运行容器的 Command,以及运行容器的环境变量等。
        • Pod 这个抽象是给里面的容器提供一个共享的运行环境,他们会共享同一个网络环境,这些容器可以用 localhost 来进行直接的连接。而 Pod 与 Pod 之间,是互相有 isolation 隔离的。
        • Volume 卷的概念,它用来管理 Kubernetes 存储的,是用来声明在 Pod 中的容器可以访问文件目录的,一个卷可以被挂载在 Pod 中一个或多个容器的指定路径下。
        • Volume 本身是一个抽象的概念,一个 Volume 可以去支持多种的后端的存储。
          • 比如 Kubernetes 的 Volume 就支持了很多存储插件,可以支持本地存储,可以支持分布式存储(ceph, GlusterFS),也可以支持云存储(云盘等)。
        • Deployment 是在 Pod 这个抽象上更为上层的一个抽象,它可以定义一组 Pod 的副本数目、 以及这个 Pod 的版本。
          • 一般用 Deployment 这个抽象来做应用真正的管理,而 Pod 是 组成 Deployment 的最小单元。
          • Kubernetes 是通过 Controller(控制器) 去维护 Deployment 中 Pod 的数目,它也会去帮助 Deployment 自动恢复失败的 Pod。
        • Service 提供了一个或者多个 Pod 实例的稳定访问地址。
          • 一个 Deployment 可能有 两个甚至更多个完全相同的 Pod, 但对于一个外部用户来讲,访问那个其实都一样,所以希望做一次负载均衡,在做负载均衡的同时,希望只访问某一个固定的 VIP(Virtual IP), Kubernetes 对网路IP地址的抽象就叫做 Service.
          • Service 有多种实现方式,Kubernetes 支持 Cluster IP, kuber-proxy 的组网也支持 nodePort,LoadBalancer.
        • Namespace 是用来做一个集群内部的逻辑隔离的,它包括鉴权、资源管理等。
          • Kubernetes 的每个资源,比如 Pod, Deployment, Service都属于一个 Namespace, 同一个 Namespace 中的资源需要命名的唯一性,不同的 Namespace 中的资源可以重名。
        • Kubernetes 的 API:
          • 从 high-level上看, Kubernetes API 是 HTTP + JSON 组成的,用户访问的方式是 HTTP,访问 API 中的 content 是 JSON 格式的。
          • Kubernetes 的 kuberctl 是 command tool, Kubernetes UI, 或者有时候用 curl 直接与 Kubernetes 进行通信, 都是 HTTP + JSON。
          • 对 Pod 类型的资源, 它 HTTP 访问路径,就是 API, 然后是 aipVersion: V1, 之后是相应的 Namespaces,以及 Pods 资源, 最终是 Podname(Pod的名字)。
    • Pod 的概念:

      • pod是一个逻辑单位,多个容器的组合,
      • kubernetes的原子调度单位
      • Pod = “进程组”, 在 kubernetes 里面,Pod 实际上正是 kubernetes 项目为你抽象出来的一个可以类比为进程组的概念
      • 由于容器实际上是一个“单进程”模型
        • Linux 容器的“单进程”模型,指的是容器的生命周期等同于 PID=1 的进程(容器应用进程)的生命周期,而不是说容器里不能创建多进程。
        • 一般情况下,容器应用进程并不具备进程管理能力,所以你通过 exec 或者 ssh 在容器里创建的其他进程,一旦异常退出(比如 ssh 终止)是很容易变成孤儿进程的。
      • 容器是进程级别的隔离, 使用独立的文件系统
      • task co-schedulering
        • 资源囤积 (resource hoarding)
        • 乐观调度处理冲突, 乐观锁的实现更加复杂
        • kubernetes pod
      • 容器之间原本是被 Linux Namespace 和 cgroups 隔离开的,Pod 之间共享网络是通过 Infra Container 方式共享同一个 Natwork Namespace
        • k8s.gcr.io/pause 镜像,汇编语言编写的,永远处于于暂停。
        • 一个Pod只有一个IP地址,也就是这个Pod的NetWork Namespace 对应的IP地址
          • 所有网络资源,都是一个Pod一份,并且被该Pod中的所有容器共享
        • 整个Pod的生命周期跟Infra容器一致,与其他容器无关
        • shared-data 对应在宿主机上的目录会被同时绑定挂载进除Infra以外的容器中
      • 容器设计模式:
        • Sidecar: 应用与日志收集,代理容器,适配器容器
      • Pod 是Kubernetes 项目里实现 "容器设计模式" 的核心机制
      • 容器设计模式 是google Borg 的大规模容器集群管理最佳实践之一
        • 容器设计模式 进行复杂应用编排的基础依赖之一
      • 所有 "设计模式" 的本质都是: 解耦和重用
  • 相关阅读:
    botzone Tetris2
    NOIP2017游记
    城乡联谊胡策会糊厕R3
    SRM 20
    AtCoder Regular Contest 082
    AtCoder Grand Contest 019
    复数模版
    SRM13
    NOI2017&&codeM2017游记
    java多线程编程
  • 原文地址:https://www.cnblogs.com/longjiang-uestc/p/12005448.html
Copyright © 2020-2023  润新知