一. Kubernetes是什么

官方文档:

尚硅谷视频: 
    https://www.bilibili.com/video/BV1w4411y7Go?from=search&seid=39492260801736356
    https://www.bilibili.com/video/BV1GT4y1A756?spm_id_from=333.788.b_765f64657363.1
Kubernetes 是谷歌严格保密十几年的密码武器---Borg的一个开源版本,提供以下功能
  • 服务发现和负载均衡
    • Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果到容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
  • 存储编排
    • Kubernetes 允许您自动挂载您选择的存储系统,例如本地存储、公共云提供商等。
  • 自动部署和回滚
    • 您可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为所需状态。例如,您可以自动化 Kubernetes 来为您的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。
  • 自动二进制打包
    • Kubernetes 允许您指定每个容器所需 CPU 和内存(RAM)
  • 自我修复
    • Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。
  • 密钥与配置管理
    • Kubernetes 允许您存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。您可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥

二. 架构组件

1. Master主控节点

    Master指控制集群的节点,在每个K8S集群都需要有一个Master来负责整个集群的管理和控制。主要负责存储集群的状态并为 Kubernetes 对象分配和调度资源。
  • etcd: 是一个分布式键值对存储库,ETCD 采用raft一致性算法,保存了整个集群的状态
  • kube-apiserver: 负责处理来自用户的请求,主要提供了HTTP接口,是K8S里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程,也是唯一与etcd集群通信的组件
  • kube-controller-manager: 集群内部的管理控制中心
    1. 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。
    2. 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod。
    3. 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)。
    4. 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌
  • kube-scheduler: 节点调度,创建Pod时根据算法选择Pod部署的节点

2. Node工作节点

    Node是K8S集群中工作负载节点,每个Node会被Master分配Docker容器
  • kubelet: 负责Pod对应的容器创建,启停等任务,还会向Master节点发送宿主机的健康状况
  • kube proxy: 实现K8S Service的通信与负载均衡机制的重要组件,当访问某个service时,流量转发到运行中的pod实例上
  • ontainer runtime: 负责运行容器的软件,一般使用Docker负责本机容器的创建和管理工作

三. 核心概念

1. 架构图

    Pod,ReplicaSet,Deployment,Service之间关系: https://blog.csdn.net/ucsheep/article/details/81781509
    Deploy控制RS,RS控制Pod,Service通过Label关联Pod向外提供稳定的服务

2. Pod

    K8s Pod以及pause容器: https://zhuanlan.zhihu.com/p/104637613
1. 什么是Pod
    k8s的最小工作单元,每个Pod包含一个或多个容器。Pod中的容器会作为一个整体被Master调度到一个Node上运行
    • 容器是使用了Linux内核中的两个特性命名空间和cgroups来执行的普通进程
2. Pause容器
    每个Pod里运行着一个特殊被称之为Pause的容器,其他容器则为业务容器
    这些业务容器共享Pause容器的网络栈和Volume挂载卷,因此他们之间通信和数据交换更为高效,在设计时可以充分利用这一特性将一组密切相关的服务进程放入同一个Pod中
    同一个Pod里的容器之间仅需通过localhost就能互相通信
    Pause容器主要为每个业务容器提供以下功能:
    • PID命名空间: Pod中的不同应用程序可以看到其他应用程序的进程ID
    • 网络命名空间: Pod中的多个容器能够访问同一个IP和端口范围
    • IPC命名空间: Pod中的多个容器能够使用SystemV IPC或POSIX消息队列进行通信
    • UTS命名空间: Pod中的多个容器共享一个主机名Volumes(共享存储卷)
    • Pod中的各个容器可以访问在Pod级别定义的Volumes

3. Controller

    用来控制Pod的具体状态和行为。在控制器的生命周期里,始终维持Pod的副本数量
  • ReplicationController和ReplicaSet
    • ReplicationController在新版本中被ReplicaSet取代,ReplicaSet用来确保容器应用的副本始终保持在用户的定义的副本数,即如果有Pod异常退出,会创建新的Pod代替,异常多出来的容器也会回收。并且ReplicaSet支持集合式的selector
    • ReplicaSet(副本集)实现了Pod的多副本管理。使用Deployment时会自动创建ReplicaSet,也就是说Deployment是通过ReplicaSet来管理 Pod的多个副本,我们通常不需要直接使用 ReplicaSet
  • Deployment
    • 最常用的Controller,Deployment可以通过ReplicaSet管理Pod的多个副本,并确保Pod按照期望的状态运行
  • StatefulSet
    • 有状态应用的部署。固定的ID,有序的启动。例如Consul集群部署
      • 稳定的持久化存储,基于PVC实现
      • 稳定的网络标示
      • 有序部署,有序扩展
      • 有序收缩,有序删除
  • DaemonSet
    • DaemonSet (守护进程)确保全部(或者某些)节点上运行一个 Pod 的副本。当有Node加入集群时,会为他们新增一个Pod。当有Node从集群移除时也会回收。例如: 监控agent,filebeat等
  • Job
    • Job用于运行结束就删除的应用,仅执行一次的任务
  • CronJob 定时任务
    • 在给定的时间点只运行一次
    • 周期性的在给定的时间点运行

4. Service

    Service是Pod的路由代理抽象,由于Pod的运行状态是动态变化的。Service的引入旨在保证pod的动态变化对访问端透明,访问端只需要知道service的地址,由service来提供服务。通过Label关联Pod

posted on 2020-10-29 21:53  愤怒格鲁特  阅读(73)  评论(0)    收藏  举报