草庐IT

【K8S系列】深入解析 k8s:入门指南(二)

颜淡慕潇 2023-04-22 原文

目录

序言

前情提要:

4.K8S架构

4.1 声明式系统VS命令式系统

4.2 k8s-声明式系统

 4.2.1 声明方式-yaml

4.3 Kubernetes的基本概念

1.集群

2.节点

3.容器

4.Pod

5.Service

6.Deployment

问题:

4.4 K8S核心组件

4.4.1  kube-apiserver

4.4.2  kube-scheduler

4.4.3  kube-controller-manager

4.4.4  etcd

4.4.5 kubelet

4.4.6 kube-proxy

4.4.7 docker/Container Runtime

总结一下:

 4.5 k8s能力展示

4.5.1 资源调度

4.5.2 水平伸缩

 4.5.3 故障恢复

 5.总结

6.投票

序言

任何一件事情,只要坚持六个月以上,你都可以看到质的飞跃。

今天学习一下K8s入门相关内容,希望此文,能帮助读者对K8s有一个初步的了解

文章标记颜色说明:

  • 黄色:重要标题
  • 红色:用来标记结论
  • 绿色:用来标记一级论点
  • 蓝色:用来标记二级论点

前情提要:

本篇是接着上一篇写的,阅读此文之前,建议先阅读一下这篇文章: 

上一篇地址:http://t.csdn.cn/ayZXg

4.K8S架构

4.1 声明式系统VS命令式系统

先来看下声明式系统和命令式系统的对比

 

看一下上面的图片

左边空调遥控器,它是属于声明式系统,

例如:我们把目标温度设置好,不管他过程怎么调节,最终结果达到25度就好

右边这个是电视遥控器,它属于命令式,它有很多按钮,

例如:我们点了1频道,电视要立刻切换到1频道,

总结一下:

声明式系统:关注目标-“做什么”

在软件工程领域,声明式系统指程序代码描述系统应 该做什么而不是怎么做。

仅限于描述要达到什么目的, 如何达到目的交给系统。

命令式系统:关注过程- “如何做”

在软件工程领域,命令式系统是写出解决某个问 题,完成某个任务,或者达到某个目标的的明确步 骤。

此方法明确写出系统应该执行某指令,并且期待系统返回期望结果。

4.2 k8s-声明式系统

Kubernetes 的所有管理能力构建在对象抽象的基础上

核心对象包括:

Node:计算节点的抽象,用来描述计算节点的资源抽象,健康状态

Namespace:资源隔离的基本单位,可以简单理解为文件系统中的目录结构

Ingress:是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP

Service:服务如何将应用发布成服务,本质上是负载均衡和域名服务的声明

Pod:用来描述应用实例,包括镜像地址,资源需求等。 Kubernetes 中最核心的对象,也是打通应用和基础架构的秘密武器

 4.2.1 声明方式-yaml

k8s是声明式系统,那他是如何做到的呢?他是通过自定义yaml,实现声明。简单看下yaml中字段的一些解释。

 Apiversion:定义api版本标签

 Kind:定义资源的类型、角色,其中有常用的这几种(deployment、service、Ingress、Job、Map)

 Metadata:定义资源的元数据信息,比如资源名称,namespace,标签等

 Spec:定义资源需要的参数属性,比如副本数量,标签选择器,业务版本,是否需要容器,容器镜像版本,容器启动名称,启动策略,硬件资源限制,等等,都是通过spec的子项进行定义

4.3 Kubernetes的基本概念

1.集群

Kubernetes集群是由多个节点组成的集合,这些节点可以在同一物理机器上,也可以在不同的物理机器上。

集群由Master节点和Worker节点组成。Master节点用于管理整个集群,而Worker节点用于托管应用程序的容器。

集群中的每个节点都有一个代理程序(kubelet),它与Master节点进行通信,以管理容器。

2.节点

Kubernetes节点是集群中的计算机,可以是物理计算机或虚拟机。节点可以是Master节点或Worker节点。

Master节点负责管理整个集群,而Worker节点负责托管应用程序的容器。

3.容器

Kubernetes容器是一种轻量级的虚拟化技术,它可以将应用程序及其依赖项打包到一个可移植的镜像中,并在运行时在任何地方运行。

Docker是一种常用的容器技术,Kubernetes也支持其他容器技术。

4.Pod

Kubernetes Pod是一个或多个紧密耦合的容器的最小部署单元。

Pod包含一个或多个应用程序容器,这些容器共享相同的网络和存储资源,并可以通过本地进程间通信(IPC)和共享文件系统进行通信。

Pod还可以包含一个或多个初始化容器,这些容器在应用程序容器之前运行,以准备Pod的运行环境。

通俗一点解释:

在一个真正的操作系统里,进程并不是“孤苦伶仃”地独自运行的,而是以进程组的方式,“有原则地”组织在一起,如下图:

前面我们已经知道容器的本质是进程,k8s就是操作系统

而k8s所做的,其实就是将“进程组”的概念映射到了容器技术中,就产生了pod

所以说,pod是一个逻辑概念他是一组共享了某些资源的容器

具体的说:Pod 里的所有容器,共享的是同一个 Network Namespace,并且可以声明共享同一个 Volume。

这些共享容器,通过 Join Network Namespace 的方式,与 Infra 容器关联在一起。

这样的组织关系整体,叫做pod

也可以理解为,Pod 扮演的是传统部署环境里“虚拟机”的角色

这样的设计,是为了使用户从传统环境(虚拟机环境)向 Kubernetes(容器环境)的迁移,更加平滑。

5.Service

Kubernetes Service是一种抽象,用于定义Pod的逻辑集合,这些Pod可以作为单个单位进行访问。Service提供了一个稳定的网络终结点,以便其他应用程序可以通过它来访问Pod。Service还可以定义负载均衡规则,以将流量分配到多个Pod之间。

举个简单的例子

比如 前端Web 应用与后端服务之间的访问关系,像这样的两个应用,往往故意不部署在同一台机器上,这样即使 Web 应用所在的机器宕机了,后端服务也完全不受影响。

我们知道,对于一个容器来说,它的 IP 地址等信息不是固定的,后端每次发布ip都会改变,那么 Web 应用又怎么找到后端服务容器的 Pod 呢?

所以,Kubernetes 项目的做法是给 Pod 绑定一个 Service 服务,而 Service 服务声明的 IP 地址等信息是“终生不变”的。

因此:这个 Service 服务的主要作用,就是作为 Pod 的代理入口,从而代替 Pod 对外暴露一个固定的网络地址。这样,对于 Web 应用的 Pod 来说,它需要关心的就是后端服务 Pod 的 Service 信息。

6.Deployment

Kubernetes Deployment是一种控制器,它可以自动化容器的部署和更新。Deployment使用Pod模板定义应用程序容器的规范,然后创建和管理Pod的副本。如果Pod失败或被删除,Deployment将自动创建一个新的Pod以替换它。

问题:

通过上面对象的介绍,现在我们应该已经稍微理解了一下这几个对象,那现在来思考下这个问题,“K8S如何通过对象组合完成业务描述?”他们之间是怎么做的呢?

在 k8s项目中,所推崇的使用方法是:

首先,通过一个“编排对象”,比如 Pod、Job、 等,来描述你试图管理的应用;

然后,再为它定义一些“服务对象”,比如 Service、Secret、ingress。这些对象,会负责具体的平台级功能。

这种使用方法,就是所谓的“声明式 API”。

这种 API 对应的“编排对象”和“服务对象”,都是 k8s项目中的 API 对象(API Object)

4.4 K8S核心组件

k8s项目的架构,由 Master 和 Node 两种节点组成,这两种角色分别对应着控制节点和计算节点

4.4.1  kube-apiserver

kube-apiserver:kube-apiserver是k8s集群的控制面板,提供了RESTful API来管理集群状态和配置。它是k8s中的核心组件之一,所有其他组件都与kube-apiserver进行通信。kube-apiserver是k8s的面向用户的接口,可以使用kubectl等工具与其进行交互。

4.4.2  kube-scheduler

kube-scheduler:kube-scheduler是k8s的调度器,负责将Pods分配到可用的节点上。kube-scheduler使用节点资源和Pods的需求来进行调度决策。kube-scheduler还支持自定义调度策略,以满足特定的业务需求。

4.4.3  kube-controller-manager

kube-controller-manager:kube-controller-manager是k8s的控制器,负责监视集群状态,并确保集群中的对象处于所需的状态。kube-controller-manager包括多个控制器,如Replication Controller和Endpoint Controller,它们负责管理ReplicaSets和Endpoints等对象。

4.4.4  etcd

etcd:etcd是一个高可用性的键值存储系统,用于存储k8s集群的所有数据。etcd可以存储集群配置、Pods和Services等对象的状态。etcd是一个分布式系统,可以通过多个节点实现高可用性

4.4.5 kubelet

kubelet:kubelet是k8s节点上的代理,负责管理节点上的Pods。kubelet与kube-apiserver通信,获取需要在节点上运行的Pods的信息,并确保Pods处于运行状态。kubelet还负责监视Pods的健康状况,并在必要时重新启动它们。

4.4.6 kube-proxy

kube-proxy:kube-proxy是k8s的网络代理,负责在集群内部进行负载均衡和服务发现。kube-proxy可以将Pods暴露为Kubernetes Services,并使用IPVS或iptables等机制进行负载均衡。

4.4.7 docker/Container Runtime

docker/Container Runtime:Worker Node的运行环境,负责镜像管理以及 Pod 和容器的真正运行

总结一下:

其中,控制节点,即 Master 节点,由4个紧密协作的独立组件组合而成,它们分别是:

负责 API 服务的 kube-apiserver、负责调度的 kube-scheduler、负责容器编排的 kube-controller-manager。整个集群的持久化数据,则由 kube-apiserver 处理后保存在 Etcd 中。

而计算节点上最核心的部分,则是一个叫作 kubelet 的组件。

在 k8s项目中,kubelet 主要负责同容器运行时(比如 Docker 项目)打交道。而这个交互所依赖的,是一个称作 CRI(Container Runtime Interface)的远程调用接口,这个接口定义了容器运行时的各项核心操作比如:启动一个容器需要的所有参数。

这也是为什么,Kubernetes 项目并不关心你部署的是什么容器运行时、使用的什么技术实现,只要你的这个容器运行时能够运行标准的容器镜像,它就可以通过实现 CRI 接入到 Kubernetes 项目当中。

 4.5 k8s能力展示

4.5.1 资源调度

一句话描述就是把pod放到合适的node上,但是这个合适,需要满足这四个方面:

  1. 首先要满足 pod 的资源要求
  2. 其次要满足 pod 的一些特殊关系的要求
  3. 再次要满足 node 的一些限制条件的要求
  4. 最后还要做到整个集群资源的合理利用

当然,这些判断都是k8s自己去控制的,我们只需要用声明的方式,把目标pod描述清楚就可以了。下面是简单的动画演示:

4.5.2 水平伸缩

Kubernetes具备HPA自动扩容的能力,目前支持按照CPU指标和用户自定义(比如TPS或QPS)达到某个数量级触发自动扩容,当请求高峰过去之后,pod可以恢复到原来的水平。如下图所示检测到白色节点负载过高,自动把服务复制两份,分发到其它节点运行:

 4.5.3 故障恢复

Controller-Manager组件,会时刻检测,当然也包括故障检测,当他检测到某一个节点不可用了,他会自动把pod放到正常节点上去运行。就像下图这样

  

 5.总结

在使用Kubernetes时,需要熟悉Kubernetes的核心概念和机制,并学习如何使用API和CLI工具进行操作。

同时,还需要掌握Docker等容器技术,以便将应用程序打包成容器镜像,并部署Kubernetes集群中。

Kubernetes是一种强大的容器编排平台,它可以帮助开发者更轻松地管理容器化应用程序。

学习之路也是任重而道远,大家一起加油吧!!

6.投票

有关【K8S系列】深入解析 k8s:入门指南(二)的更多相关文章

  1. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  2. 微信小程序开发入门与实战(Behaviors使用) - 2

    @作者:SYFStrive @博客首页:HomePage📜:微信小程序📌:个人社区(欢迎大佬们加入)👉:社区链接🔗📌:觉得文章不错可以点点关注👉:专栏连接🔗💃:感谢支持,学累了可以先看小段由小胖给大家带来的街舞👉微信小程序(🔥)目录自定义组件-behaviors    1、什么是behaviors    2、behaviors的工作方式    3、创建behavior    4、导入并使用behavior    5、behavior中所有可用的节点    6、同名字段的覆盖和组合规则总结最后自定义组件-behaviors    1、什么是behaviorsbehaviors是小程序中,用于实现

  3. 【Java入门】使用Java实现文件夹的遍历 - 2

    遍历文件夹我们通常是使用递归进行操作,这种方式比较简单,也比较容易理解。本文为大家介绍另一种不使用递归的方式,由于没有使用递归,只用到了循环和集合,所以效率更高一些!一、使用递归遍历文件夹整体思路1、使用File封装初始目录,2、打印这个目录3、获取这个目录下所有的子文件和子目录的数组。4、遍历这个数组,取出每个File对象4-1、如果File是否是一个文件,打印4-2、否则就是一个目录,递归调用代码实现publicclassSearchFile{publicstaticvoidmain(String[]args){//初始目录Filedir=newFile("d:/Dev");Datebeg

  4. ES基础入门 - 2

    ES一、简介1、ElasticStackES技术栈:ElasticSearch:存数据+搜索;QL;Kibana:Web可视化平台,分析。LogStash:日志收集,Log4j:产生日志;log.info(xxx)。。。。使用场景:metrics:指标监控…2、基本概念Index(索引)动词:保存(插入)名词:类似MySQL数据库,给数据Type(类型)已废弃,以前类似MySQL的表现在用索引对数据分类Document(文档)真正要保存的一个JSON数据{name:"tcx"}二、入门实战{"name":"DESKTOP-1TSVGKG","cluster_name":"elasticsear

  5. Ruby 和指南针路径与 yeoman 项目 - 2

    我安装了ruby​​、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom

  6. 区块链入门教程(6)--WeBASE-Front节点前置服务安装 - 2

    文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定

  7. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  8. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法 - 2

    文章目录一、项目场景二、基本模块原理与调试方法分析——信源部分:三、信号处理部分和显示部分:四、基本的通信链路搭建:四、特殊模块:interpretedMATLABfunction:五、总结和坑点提醒一、项目场景  最近一个任务是使用simulink搭建一个MIMO串扰消除的链路,并用实际收到的数据进行测试,在搭建的过程中也遇到了不少的问题(当然这比vivado里面的debug好不知道多少倍)。准备趁着这个机会,先以一个很基本的通信链路对simulink基础和相关的debug方法进行总结。  在本篇中,主要记录simulink的基本原理和基本的SISO通信传输链路(QPSK方式),计划在下篇记

  9. ruby - Ruby gems 的问题(损坏?)试图让指南针在 npm 中工作 - 2

    我不是Ruby专家,但想弄清楚发生了什么,因为我试图让指南针在节点应用程序中工作,但我的Ruby似乎坏了。打字:ruby--version让我:ruby2.1.1p76(2014-02-24revision45161)[x86_64-darwin13.0]我安装了Homebrew,之前遇到过Ruby版本的问题,但它似乎已安装并且可以正常工作。但是,当我使用gem输入请求时,出现此错误:$gem-hErrorloadingRubyGemsplugin"/Users/user_dir/.rvm/gems/ruby-2.1.1@global/gems/executable-hooks-1.3

  10. ESP32学习入门:WiFi连接网络 - 2

    目录一、ESP32简单介绍二、ESP32Wi-Fi模块介绍三、ESP32Wi-Fi编程模型四、ESP32Wi-Fi事件处理流程 五、ESP32Wi-Fi开发环境六、ESP32Wi-Fi具体代码七、ESP32Wi-Fi代码解读6.1主程序app_main7.2自定义代码wifi_init_sta()八、ESP32Wi-Fi连接验证8.1测试方法8.2服务器模拟工具sscom58.3测试代码8.4测试结果前言为了开发一款亚马逊物联网产品,开始入手ESP32模块。为了能够记录自己的学习过程,特记录如下操作过程。一、ESP32简单介绍ESP32是一套Wi-Fi(2.4GHz)和蓝牙(4.2)双模解决方

随机推荐