RuntimeClass
构成Kubernetes 的 Components (组件) 主要有三类,Master 组件, Node 组件,Addons (辅助类插件) 。分别承担不同的工作,共同构建了kubernetes。
Master 节点
Master 组件提供群集的控制平面。主组件对集群做出全局决策(例如,调度),并且它们检测并响应集群事件(例如,当复制控制器的replicas
字段未满足时启动新的pod )。主组件可以在群集中的任何计算机上运行。但是,为简单起见,设置脚本通常会在同一台计算机上启动所有主组件,并且不在此计算机上运行用户容器。
***上述说明来自官方解释,我理解就是一个控制台,在现有IT 架构中很多硬件或者软件采用这种方式,Master 和node 的方式。Master 负载策略下发,管理node 运行的生命周期。相当于Kubernetes 的大脑,负责整个集群的管理和控制。那么通常不会在这台机器上部署node 不会运行容器(container )的功能。
Master 节点上运行了以下一组关键进程:
Kubectl是一个命令行界面,用于运行针对Kubernetes集群的命令
kube-apiserver :提供了 HTTP Rest ful 风格的接口的关键服务进程,是Kubernetes 里所有资源的增,删,改,查等操作的唯一入口,也是Kubernetes 集群的管理的入口进程。
kube-controller-manager :Kunernetes 里所有资源的自动化控制中心,
这些控制器包括:
- 节点控制器:负责在节点出现故障时注意和响应。
- 复制控制器:负责为系统中的每个复制控制器对象维护正确数量的pod。
- 端点控制器:填充端点对象(即,连接服务和pods)。
- 服务帐户和令牌控制器:为新的命名空间创建默认帐户和API访问令牌。
kube-scheduler : 负责 pod 调度的进程,调度决策所考虑的因素包括个人和集体资源需求,硬件/软件/策略约束,亲和力和反亲和性规范,数据位置,工作负载间干扰和最后期限
etcd :负责Kubernetes 所有资源存储的进程。
Node 节点
除了Master Kubernetes 中其他节点都称为Node 节点,Node 可以是物理机也可以是虚拟机,Node 节点是Kubernetes 中的工作负载节点,每个Node 都会由Master 调度承担运行
容器(Docker )的工作。
*****注意Node 节点可以在Kubernetes 集群动态运行时加入,前提是这个Node 完成可初始化配置,默认情况下Kublete 模块向Master 申请注册,一旦Node 申请被接受,Kublete 会
定时向master 节点提交自己的状态,软件和硬件资源信息。由 master 评估后进行资源调度,如果超时不上报。就会被标记为不可用,Master 会进行故障转移的调度。
每个节点都运行一组关键进程:
Kubelet :负责Pod 对应容器的创建,启停等任务,同时与master 协同工作,实现Kubernetes 运行的基本组件。
Kube-proxy :是在群集中的每个节点上运行的网络代理。它通过维护主机上的网络规则并执行连接转发来实现Kubernetes服务抽象。kube-proxy
负责请求转发。kube-proxy
允许通过一组后端功能进行TCP和UDP流转发或循环TCP和UDP转发。实现kubernetes service 的通信和与负载工作
Container Runtime:负责容器运行,容器创建和管理。
Addons
插件是实现集群功能的pod和服务工具,可以是第三方工具。
DNS:虽然其他插件并非严格要求,但所有Kubernetes集群都应具有集群DNS,因为许多示例都依赖于它。群集DNS是DNS服务器,除了您环境中的其他DNS服务器之外,它还为Kubernetes服务提供DNS记录。
Kubernetes启动的容器会在DNS搜索中自动包含此DNS服务器
Web UI:Kubernetes 集群可视化管理工具和图表工具
Container Resource Monitoring:容器资源监视工具。‘
Cluster-level Logging: 集群运行日志分析工具。
’
Containers
Images : 镜像仓库,Kubernetes 对容器的管理依赖于选择的容器管理工具,比如 Docker
Container Environment Variables:
- 文件系统,是iamge 和一个或多个卷的组合。
- 有关Container本身的信息。
- 有关群集中其他对象的信息
RuntimeClass: RuntimeClass是用于选择容器运行时配置的功能。容器运行时配置用于运行Pod的容器
Container Lifecycle Hooks: 类似于许多具有组件生命周期hooks的编程语言框架,例如Angular,Kubernetes为Containers提供了生命周期hooks。hooks使Container能够了解其管理生命周期中的事件,并在执行相应的生命周期hooks时运行在处理程序中实现的代码。
Workloads
1.Pods
pod 是一组一个或一个以上的 容器(例如Docker容器),具有共享存储/网络,以及如何运行容器的规范。Pod的内容始终位于同一位置并共同调度,并在共享上下文中运行。Pod模拟特定于应用程序的“逻辑主机” - 它包含一个或多个相对紧密耦合的应用程序容器 - 在预容器世界中,在同一物理或虚拟机上执行意味着在同一逻辑主机上执行。就Docker构造而言,Pod被建模为一组具有共享命名空间和共享文件系统卷的Docker容器.
Pod是多个合作过程模式的模型,形成了一个有凝聚力的服务单元。它们通过提供比其组成应用程序集更高级别的抽象来简化应用程序部署和管理。Pod用作部署,水平扩展和复制的单元。对Pod中的容器自动处理共置(共同调度),共享命运(例如终止),协调复制,资源共享和依赖关系管理。
2.pod controllers ReplicaSet
ReplicaSet使用字段定义,包括指定如何识别它可以获取的Pod的选择器,指示它应该维护多少Pod的多个副本,以及指定它应该创建的新Pod的数据的pod模板以满足该数量复制品标准。然后,ReplicaSet通过根据需要创建和删除Pod来达到其目的,以达到所需的数量。当ReplicaSet需要创建新Pod时,它使用其Pod模板。
ReplicaSet与其Pods的链接是通过Pods的metadata.ownerReferences 字段,该字段指定当前对象所拥有的资源。ReplicaSet获取的所有Pod在其ownerReferences字段中拥有其拥有的ReplicaSet标识信息。通过此链接,ReplicaSet知道它正在维护的Pod的状态并相应地进行计划。
ReplicaSet使用其选择器标识要获取的新Pod。如果Pod没有OwnerReference或者OwnerReference不是控制器并且它与ReplicaSet的选择器匹配,则它将立即由所述ReplicaSet获取。
Services, Load Balancing, and Networking
Service : 一种抽象的方式暴露在一组运行的应用程序pod作为网络服务。无需修改应用程序即可使用不熟悉的服务发现机制。Kubernetes为pod提供了自己的IP地址和一组pod的单个DNS名称,并且可以在它们之间进行负载平衡。为pod 提供了对外业务的入口。
DNS for Services and Pods :Kubernetes DNS在群集上安排DNS Pod和服务,并配置kubelet以告知各个容器使用DNS服务的IP来解析DNS名称
Connecting Applications with Services:默认情况下,Docker使用主机 - 专用网络,因此只有当容器位于同一台计算机上时,容器才能与其他容器通信。为了使Docker容器跨节点进行通信,必须在计算机自己的IP地址上分配端口,然后将其转发或代理到容器。这显然意味着容器必须非常小心地协调它们使用的端口,或者必须动态分配端口。跨多个开发人员协调端口非常难以大规模地进行,并使用户暴露在他们无法控制的集群级别问题之外。Kubernetes假设豆荚可以与其他豆荚通信,无论它们落在哪个主机上。我们为每个pod提供了自己的集群专用IP地址,因此您无需在pod之间显式创建链接或将容器端口映射到主机端口。这意味着Pod中的容器可以在localhost上到达彼此的端口,并且群集中的所有pod都可以在没有NAT的情况下看到彼此。本文档的其余部分将详细说明如何在这种网络模型上运行可靠的服务
Ingress: 管理群集中服务的外部访问的API对象,通常是HTTP。Ingress可以提供负载平衡,SSL终止和基于名称的虚拟主机。
Ingress Controllers:
为了使Ingress资源正常工作,群集必须运行入口控制器。
与作为kube-controller-manager
二进制文件一部分运行的其他类型的控制器不同,Ingress控制器不会自动与集群一起启动。使用此页面选择最适合您的群集的入口控制器实施。Kubernetes作为一个项目目前支持和维护GCE和 nginx控制器。
kubeadm 概述:
Kubeadm 是一个工具,它提供了 kubeadm init
以及 kubeadm join
这两个命令作为快速创建 kubernetes 集群的最佳实践。