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 还没参与进来。

  • 相关阅读:
    开发思路总结
    电脑蓝屏代码丢失,Eclipse这个功能帮我找回了代码
    书籍
    向日葵无法在控制端用键盘输入的原因
    js 多submit 不使其执行其他submit form
    js获取url参数值
    C# 正则表达式 去除HTML标签 C#后台
    读取txt文件 循环操作每行数据 添加到数据库
    Ubuntu中安装XAMPP出错的解决方法(转发,备查)
    常用正则表达式
  • 原文地址:https://www.cnblogs.com/s686zhou/p/12367754.html
Copyright © 2011-2022 走看看