docker-k8s理论

Kubernetes(k8s)

  • 是一个基于docker对容器进行编排的引擎,包括了安装部署,应用管理,网络,存储监控,日志管理等多个方面
  • k8s的核心功能:应用部署,访问 scale up/down(伸缩) 以及滚动更新

概念

  • 这几个组成k8s

  • Cluster

  • Cluster(集群)是计算,存储和网络资源的集合,kubernetes利用这些资源运行各种基于容器的应用

  • Cluster可以只有一台主机(这一台主机既是master也是node)

  • Master

  • master是cluster的大脑,它的主要职责就是调度(决定应用放在那里运行)

  • master运行linux操作系统,可以是物理机或者虚拟机

  • 最多为7个 和swarm相同

  • node

  • node的职责是运行容器应用

  • node是由master管理 node负责监控并汇报容器的状态,并根据master的要求管理容器的声明周期

  • 尽量控制Node的数量在两个或者两个以上

  • Pod

    • pod是kubernetes的最小工作单元
    • 每个pod包含一个或多个容器,pod中的容器会作为,一个整体被master调度到一个node中
    • 相当于swarm的service
  • controller控制器

  • k8s通常不回直接创建pod,而是通过controller来管理pod的

  • controller中定义了pod的部署特性,(几个副本,在哪一台node运行等)

  • k8s提供了多种controller,包括Deployment ReplicaSet DaemonSet StatefuleSet Job等

Deployment(部署调度)

  • deployment是最常用的 controller,比如我们可通过创建Deployment来部署应用
  • Deployment可以管理Pod的多个副本,并保证Pod按照期望的状态运行
  • 也就是当集群中的一台主机故障后,不回减少副本的数量,会调度其他的主机来运行响应的副本,保证期望值

DaemonSet

  • DaemonSet 用于每个Node最多运行一个Pod的副本场景,
  • DaemonSet通常银杏果 daemon 类似swarm集群的global模式运行service
  • 就是每台node节点上会运行一个pod ,做监控时可以用次模式

StatefuleSet

  • StatefuleSet能够保证Pod的每个副本在整个生命周期中名称是不变的,而其他controller不提供这个功能
  • 当某个Pod发生故障需要删除并且重新启动时,Pod的名称会发生变化,同时StatefuleSet会保证副本按照固定的顺序启动,更新或者删除

job

  • job用于运行结束就删除的应用,而其他Controller中的Pod通常是长期持续运行的,也可以理解为docker run –rm
  • 在对容器的备份和还原可以使用此模式

Cronjob

  • Cronjob是Kubernetes提供的定时任务功能,CronJob可以根据你指定的cron策略来完成任务。

Service

  • k8s中的pod和swarm集群中的service功能相似,但是k8s的service和swarm的service是不同的

  • 这里的service是用来被外部访问Pod时使用的(外网访问pod)

  • pod可能会频繁销毁和重启,ip会发生变化,所以不能用ip来访问

  • 但是service定义了外界访问一组特定的pod方式,service有自己的ip 和端口 service为pod提供了负载均衡,

  • k8s运行容器(pod)与访问容器分别交给了controller 和service执行

namespace

  • k8s的隔离通过 命名空间来隔离的
  • Namespace 可以将一个物理的 Cluster 逻辑上划分成多个虚拟 Cluster,每个 Cluster 就是一个 Namespace。不同 Namespace 里的资源是完全隔离的
  • k8s创建4个namespace

    default:创建资源时如果不指定,将被放到这个 Namespace 中。
    kube-system:Kubernetes 自己创建的系统资源将放到这个 Namespace 中。
    kube-pubulic:对外的公开的,放到这个Namespace中
    kube-node-lease:node节点的周期

  • 执行kubectl get namespaces可以查看namespace

k8s框架结构

  • api server

  • 提供 httpd协议,是kubernetes cluster的前端接口,各种客户端工具(CLI 或 UI)以及 Kubernetes 其他组件可以通过它管理 Cluster 的各种资源。

  • scheduler

  • Scheduler 负责决定将 Pod 放在哪个 Node 上运行。Scheduler 在调度时会充分考虑 Cluster 的拓扑结构,当前各个节点的负载,以及应用对高可用、性能、数据亲和性的需求。

  • conteroller manager

  • Controller Manager 负责管理 Cluster 各种资源,保证资源处于预期的状态。Controller Manager 由多种 controller 组成,

  • etcd

  • etcd 负责保存 Kubernetes Cluster 的配置信息和各种资源的状态信息。当数据发生变化时,etcd 会快速地通知 Kubernetes 相关组件。

  • flannel

  • k8s通过flannel来进行通讯的

  • kubelet

  • 是node中的节点

  • 当master节点中的 scheduler组件确定在哪一台node上运行pod后,会将pod的具体配置信息(image、volume 等)发送给该kubelet,kubelet 根据这些信息创建和运行容器,并向 Master 报告运行状态。

  • kube-proxy

  • proxy主要负责将service的tcp和udp数据流转发到后端的容器,如果有多个副本kube-proxy就会实现负载均衡

  • kube-porxy是完成service的任务的

  • 也就是说master通过 apiserver发送指令 交给 Controller manager 来管理资源,通过scheduler 选择在那台node节点上运行pod,决定好后,就把配置信息交给那台node ,node节点接收到任务后,通过kubelet创建副本,如果对外服务,就通过kube-proxy来提供服务


本博客所有文章是以学习为目的,如果有不对的地方可以一起交流沟通共同学习 邮箱:1248287831@qq.com!