• Kubernetes笔记 (1)


    Kubernetes概述

    Kubernetes由google开源,它的开发和设计都深受Google内部久负盛名的系统Borg的影响,而且,它的许多顶级贡献者之前也是Borg系统的开发者。Borg是Google内部使用的大规模集群管理系统。

    Kubernetes吸取了Borg在过去十数年间积累的经验和教训,刚刚面世就立即广受关注和青睐,目前已经成为容器编排领域事实上的标准。很多人将Kubernetes视为Borg系统的一个开源实现版本。

    Kubernetes使用共享网络将多个物理机或虚拟机汇集到一个集群中,在各服务器之间进行通信,该集群是配置Kubernetes的所有组件、功能和工作负载的物理平台。集群包含Master和Node。
    Master
    Master是集群的网关和中枢,负责诸如为用户和客户端暴露API、跟踪其他服务器的健康状态、以最优方式调度工作负载,以及编排其他组件之间的通信等任务,它是用户或客户端与集群之间的核心联络点,并负责Kubernetes系统的大多数集中式管控逻辑。

    Node
    Node是Kubernetes集群的工作节点,负责接收来自Master的工作指令并根据指令相应地创建或销毁Pod对象,以及调整网络规则以合理地路由和转发流量等。

    Kubernetes集群组件

    一个典型的Kubernetes集群由一个或一组Master和多个Node、一个集群状态存储系统(etcd)和add-ons组成。
    Kubernetes的系统架构:

    Master节点主要由apiserver、controller-manager和scheduler三个组件,以及一个用于集群状态存储的etcd存储服务组成,而每个Node节点则主要包含kubelet、kube-proxy及容器引擎等组件。

    Master组件

    API Server

    API Server负责输出RESTful风格的KubernetesAPI,它是发往集群的所有REST操作命令的接入点,并负责接收、校验并响应所有的REST请求,结果状态被持久存储于etcd中。

    Controller Manager

    Kubernetes中,集群级别的大多数功能都是由几个被称为控制器的进程执行实现的,这几个进程被集成于kube-controller-manager守护进程中。由控制器完成的功能主要包括生命周期功能和API业务逻辑.

    • 生命周期功能:包括Namespace创建和生命周期、Event垃圾回收、Pod终止相关的垃圾回收、级联垃圾回收及Node垃圾回收等。
    • API业务逻辑:例如,由ReplicaSet执行的Pod扩展等
    Scheduler

    在API Server确认Pod对象的创建请求之后,Scheduler就会根据集群内各节点的可用资源状态,以及要运行的容器的资源需求做出调度决策。

    Cluster State Store

    etcd被用作Kubernetes集群状态的存储,etcd是独立的服务组件,并不隶属于Kubernetes集群自身。生产环境中应该以etcd集群的方式运行以确保其服务可用性。

    Node组件

    kubelet

    kubelet是Node的核心代理程序,它是运行于工作节点之上的守护进程,从API Server接收关于Pod对象的配置信息并确保它们处于期望的状态(desired state)。kubelet会在API Server上注册当前工作节点,定期向Master汇报节点资源使用情况,并通过cAdvisor监控容器和节点的资源占用状况。

    容器运行时环境

    每个Node都需要容器运行时(ContainerRuntime)环境,才能下载镜像、启动容器。kubelet以插件的方式载入配置的容器环境,目前支持Docker、RKT、cri-o和Fraki等容器环境。

    kube-proxy

    每个Node都需要运行一个kube-proxy守护进程,它能够按需为Service资源对象生成iptables或ipvs规则,从而捕获访问当前Service的ClusterIP的流量并将其转发至正确的后端Pod对象。

    Addons

    Kubernetes集群还依赖于一系列add-ons以提供完整的功能,它们通常是由第三方提供的特定应用程序,且托管运行于Kubernetes集群之上,比如

    • KubeDNS:在Kubernetes集群中调度运行提供DNS服务的Pod,同一集群中的其他Pod可使用此DNS服务解析主机名。
    • Kubernetes Dashboard:可以通过Dashboard来管理集群中的应用甚至是集群自身。
    • Heapster:容器和节点的性能监控与分析系统,其功能会逐渐由Prometheus结合其他组件所取代。
    • Ingress Controller:与负载均衡相关。

    Kubernetes网络模型基础

    云计算的核心是虚拟化技术,网络虚拟化技术又是其最重要的组成部分,用于在物理网络上虚拟多个相互隔离的虚拟网络,实现网络资源切片,提高网络资源利用率,实现弹性化网络。

    为了提供更灵活的解决方式,Kubernetes的网络模型需要借助于外部插件实现,它要求任何实现机制都必须满足以下需求:

    • 所有Pod间均可不经NAT(网络地址转换)机制而直接通信
    • 所有节点均可不经NAT机制而直接与所有容器通信
    • 容器自己使用的IP也是其他容器或节点直接看到的地址,所有Pod对象都位于同一平面网络中,而且可以使用Pod自身的地址直接通信。

    Kubernetes集群包含三种网络:

    • 各主机(Master、Node和etcd等)自身所属的网络,用于各主机之间的通信,其地址配置于主机的网络接口,且在Kubernetes集群构建之前就已配置好,它并不能由Kubernetes管理。
    • 专用于Pod资源对象的网络,它是一个虚拟网络,用于为各Pod对象设定IP地址等网络参数,其地址配置于Pod中容器的网络接口之上。Pod网络需要借助kubenet插件或CNI插件实现,插件可独立部署于Kubernetes集群之外,也可托管于Kubernetes之上,在创建Pod对象时由其自动完成各网络参数(Pod IP)的动态配置。
    • 专用于Service资源对象的网络,也是虚拟网络,用于为Kubernetes集群之中的Service配置IP地址,但此地址并不配置于任何主机或容器的网络接口之上,而是通过Node之上的kube-proxy配置为iptables或ipvs规则,从而将发往此地址的所有流量调度至其后端的各Pod对象之上。Service网络在Kubernetes集群创建时予以指定,而各Service的地址(Cluster IP)则在用户创建Service时予以动态配置。

    综上,Kubernetes为Pod和Service资源对象分别使用了各自的专用网络,Pod网络由Kubernetes的网络插件配置实现,而Service的网络则由Kubernetes集群予以指定。

    学习资料

    《Kubernetes实战进阶》 马永亮著

  • 相关阅读:
    [QT][待解决问题]对话框ui载入卡顿问题
    [QT] Tab键切换焦点顺序
    [QT][问题记录]发布软件时遇到的问题
    [QT][转载] Qt信号和槽
    [QT][转载]Qt:使用C++还是QML
    [qt][问题记录] 无法定位程序输入点 _ZdaPvj 于动态链接库 libstdc++-6.dll
    [QT]安装中出现的问题(安装qt5.8,出现Could not start:"{0,3010,1603,5100} msiexec ...")
    [转载]Lwip之IP/MAC地址冲突检测
    转载:TCP连接的状态详解以及故障排查
    git push (第一次) (转)
  • 原文地址:https://www.cnblogs.com/zhixin9001/p/14562294.html
Copyright © 2020-2023  润新知