zoukankan      html  css  js  c++  java
  • K8S架构分析

    K8S集群简介

    K8S的集群由master和node组成,节点上运行着若干K8S服务。 如下图

     Master节点

    master节点上运行着的后台服务有kube-apiserver,  kube-scheduler, kube-controller-manager, etcd 和pod 网络.(flannel)。如下图所示

     1.API Server (kube-apiserver)

    API Server是k8s的前端接口,各种客户端工具以及k8s其他组件可以通过它管理集群的各种资源。

    2.Scheduler (kube-scheduler)

    scheduler负责决定将pod放在哪个node上运行。另外scheduler在调度时会充分考虑集群的架构,当前各个节点的负载,以及应用对高可用,性能

    数据亲和性的需求。

    3.Controller Manager (kube-controller-manager)

    负责管理集群的各种资源(创建Pod之类的),保证资源处于预期的状态

    4.etcd

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

    5.pod网络

    pod要能够互相通信,k8s集群必须掌握pod网络,flannel是其中一个可选方案。

    node节点

    node是Pod运行的地方。node上运行的k8s组件有kublet,kube-proxy 和 Pod网络(flannel),如下图所示:

     1.kubelet

    是node的agent(代理),当scheduler去确定在某个node上运行pod后,会将pod的具体配置信息发送给该节点的kubelet,kubelet会根据遮羞信息

    创建和运行容器,并向Master报告运行状态。

    2.kube-proxy

    每个node都会运行kube-proxy服务,外界通过service访问pod, kube-proxy负责将降访问service的TCP/UDP数据流转发到后端的容器/

    如果有多个副本,Kube-proxy会实现负载均衡。

    3.pod网络

    pod能能够互相通信,k8s集群必须部署pod网络,flannel是其中一个可以选择的方案

    部署过程图:

    ① kubectl 发送部署请求到 API Server。

    ② API Server 通知 Controller Manager 创建一个 deployment 资源。

    ③ Scheduler 执行调度任务,将两个副本 Pod 分发到 k8s-node1 和 k8s-node2。

    ④ k8s-node1 和 k8s-node2 上的 kubectl 在各自的节点上创建并运行 Pod。

    补充两点:

    1. 应用的配置和当前状态信息保存在 etcd 中,执行kubectl get pod 时 API Server 会从 etcd 中读取这些数据。

    2. flannel 会为每个 Pod 都分配 IP。因为没有创建 service,目前 kube-proxy 还没参与进来。

  • 相关阅读:
    对我影响最大的老师
    秋季学习总结
    介绍自己
    搭建新环境的准备工作
    我的技术博客开通啦!!
    java数组及数组的插入,删除,冒泡算法
    包(package)以及面向对象三个基本特征(继承)的介绍
    常用的Arrays类和二维数组以及二分法的介绍
    构造方法、封装、关键字(this、static)和代码块的介绍
    类和对象的介绍
  • 原文地址:https://www.cnblogs.com/s686zhou/p/12367754.html
Copyright © 2011-2022 走看看