CNCF x Alibaba云原生技术公开课 第三章 kubernetes核心概念

news2024/10/2 1:41:21

1、Kubernetes概念

核心功能

  • 服务的发现与负载的均衡
  • 容器的自动装箱,我们也会把它叫做 scheduling,就是“调度”,把一个容器放到一个集群的某一个机器上
  • Kubernetes 会帮助我们去做存储的编排,让存储的声明周期与容器的生命周期能有一个连接
  • Kubernetes 会帮助我们去做自动化的容器的恢复。在一个集群中,经常会出现宿主机的问题或者说是 OS 的问题,导致容器本身的不可用,Kubernetes 会自动地对这些不可用的容器进行恢复
  • Kubernetes 会帮助我们去做应用的自动发布与应用的回滚
  • 与应用相关的配置密文的管理;
  • 对于 job 类型任务,Kubernetes 可以去做批量的执行
  • 为了让这个集群、这个应用更富有弹性,Kubernetes 支持水平的伸缩

K8s架构组件

  • API Server:顾名思义是用来处理 API 操作的,Kubernetes 中所有的组件都会和 API Server 进行连接,组件与组件之间一般不进行独立的连接,都依赖于 API Server 进行消息的传送;
    • 内部部署的API Server是可以水平扩展的!
  • Controller:是控制器,它用来完成对集群状态的一些管理。自动对容器进行修复、容器数量的水平扩张,都是由 Kubernetes 中的 Controller 来完成的;
    • 可以进行热备的部署组件,只有一个active;对应一个调度组件
  • Scheduler:是调度器,“调度器”顾名思义就是完成调度的操作,对一个用户提交的 Container,依据它对 CPU、对 memory 请求大小,找一台合适的节点,进行放置;
  • etcd:是一个分布式的一个存储系统,API Server 中所需要的这些原信息都被放置在 etcd 中,etcd 本身是一个高可用系统,通过 etcd 保证整个 Kubernetes 的 Master 组件的高可用性。

Node节点
在这里插入图片描述

  • 一个 Pod 中运行的一个或者多个容器,真正去运行这些 Pod 的组件的是叫做 kubelet,也就是 Node 上最为关键的组件,它通过 API Server 接收到所需要 Pod 运行的状态,然后提交到 Container Runtime 组件中。
  • 在 OS 上去创建容器所需要运行的环境,最终把容器或者 Pod 运行起来,也需要对存储跟网络进行管理。Kubernetes 并不会直接进行网络存储的操作,他们会靠 Storage Plugin 或者是网络的 Plugin 来进行操作。
  • 在 Kubernetes 自己的环境中,也会有 Kubernetes 的 Network,它是为了提供 Service network 来进行搭网组网的。)真正完成 service 组网的组件的是 Kube-proxy,它是利用了 iptables 的能力来进行组建 Kubernetes 的 Network,就是 cluster network。

pod的调度过程
在这里插入图片描述

  • 用户可以通过 UI 或者 CLI 提交一个 Pod 给 Kubernetes 进行部署,这个 Pod 请求首先会通过 CLI 或者 UI 提交给 Kubernetes API Server,下一步 API Server 会把这个信息写入到它的存储系统 etcd,之后 Scheduler 会通过 API Server 的 watch 或者叫做 notification 机制得到这个信息:有一个 Pod 需要被调度。
  • Scheduler 会根据它的内存状态进行一次调度决策,在完成这次调度之后,它会向 API Server report 说:“这个 Pod 需要被调度到某一个节点上。
  • API Server 接收到这次操作之后,会把这次的结果再次写到 etcd 中,然后 API Server 会通知相应的节点进行这次 Pod 真正的执行启动。相应节点的 kubelet 会得到这个通知,kubelet 就会去调 Container runtime来真正去启动配置这个容器和这个容器的运行环境,去调度 Storage Plugin 来去配置存储,network Plugin 去配置网络。

resources:
requests:
memory: “64Mi”
cpu: “100m”
limits:
memory: “128Mi” # Mi/Gi
cpu: “200m” # 500毫核== 0.5个cpu

2、Kubernetes核心概念和API

pod

  • Pod 是 Kubernetes 的一个最小调度以及资源单元。用户可以通过 Kubernetes 的 Pod API 生产一个 Pod,让 Kubernetes 对这个 Pod 进行调度,也就是把它放在某一个 Kubernetes 管理的节点上运行起来。一个 Pod 简单来说是对一组容器的抽象,它里面会包含一个或多个容器。
  • 可以指定资源(Volume、CPU、内存等)
  • 定义容器的运行方式(运行容器的command以及环境变量)
  • 可以共享运行环境(网络为例:pod内部,可以用localhost直接连接;pod之间是有网络隔离的)

volume

  • 卷,管理k8s的存储,声明pod的容器可以访问文件目录,一个卷可以被挂载在 Pod 中一个或者多个容器的指定路径下面。
  • 一个 Volume 可以去支持多种的后端的存储。比如说 Kubernetes 的 Volume 就支持了很多存储插件,它可以支持本地的存储,可以支持分布式的存储,比如说像 ceph,GlusterFS ;它也可以支持云存储,比如说阿里云上的云盘、AWS 上的云盘、Google 上的云盘等等。

Deployment

  • Deployment 是在 Pod 这个抽象上更为上层的一个抽象,它可以定义一组 Pod 的副本数目、以及这个 Pod 的版本。Deployment 这个抽象来做应用的真正的管理,而 Pod 是组成 Deployment 最小的单元。
  • Kubernetes 是通过 Controller维护 Deployment 中 Pod 的数目,也会帮助 Deployment 自动恢复失败的 Pod。
    • 比如:可以定义一个 Deployment,这个 Deployment 里面需要两个 Pod,当一个 Pod 失败的时候,控制器就会监测到,它重新把 Deployment 中的 Pod 数目从一个恢复到两个,通过再去新生成一个 Pod。
    • 通过控制器,可以实现发布策略。比如说进行滚动升级,进行重新生成的升级,或者进行版本的回滚。

Service

  • Service 提供了一个或者多个 Pod 实例的稳定访问地址。
  • 一个 Deployment 可能有两个甚至更多个完全相同的 Pod。对于一个外部的用户来讲,访问哪个 Pod 其实都是一样的,所以它希望做一次负载均衡,在做 负载均衡 的同时,我只想访问某一个固定的 VIP,也就是 Virtual IP 地址,而不希望得知每一个具体的 Pod 的 IP 地址。把所有 Pod 的访问能力抽象成一个第三方的一个 IP 地址,实现这个的 Kubernetes 的抽象就叫 Service。

Namesapce

  • Namespace 是用来做一个集群内部的逻辑隔离的,它包括鉴权、资源管理等。Kubernetes 的每个资源,Pod、Deployment、Service 都属于一个 Namespace,同一个 Namespace 中的资源需要命名的唯一性,不同的 Namespace 中的资源可以重名。

Ingress

  • ingress七层负载和反向代理资源。 service 提供pod的负载均衡的能力,但只在4层有负载,而没有功能,只能到IP层面
    通俗来讲,ingress和之前提到的Service、Deployment,也是一个k8s的资源类型,ingress用于实现用域名的方式访问k8s内部应用。

  • Ingress为Kubernetes集群中的服务提供了入口,可以提供负载均衡、SSL终止和基于名称的虚拟主机,在生产环境中常用的Ingress有Treafik、Nginx、HAProxy、Istio等。

  • 流量从Internet到Ingress再到Services最后到Pod上,通常情况下,Ingress部署在所有的Node节点上。

  • Ingress可以配置提供服务外部访问的URL、负载均衡、终止SSL,并提供基于域名的虚拟主机。但Ingress不会暴露任意端口或协议。
    https://blog.csdn.net/L2111533547/article/details/126248597

 
在这里插入图片描述

Yaml文件

  • API 的 version。比如 V1,描述在操作哪个资源;
  • kind 如果是 pod,在 Metadata 中,就写上这个 Pod 的名字;比如说 nginx,可以打一些 label。
  • Metadata
    • annotation,也就是对资源的额外的一些用户层次的描述。
    • label 是一组 KeyValuePair。通过label,API 层就可以对这些资源进行一个筛选。
      • label 比如是一个 color 等于 red,即它的颜色是红颜色。也可以加其他 label,比如说 size: big 就是大小,定义为大的,它可以是一组 label。这些 label 是可以被 selector。这实际上跟sql 类型的 select 语句非常相似。
      • Deployment,它可能是代表一组的 Pod,它是一组 Pod 的抽象,一组 Pod 就是通过 label selector 来表达的。
      • 一个 service 要对应一个或者多个的 Pod,来对它们进行统一的访问,这个描述也是通过 label selector 来选取的一组 Pod。
  • Spec:希望 Pod 达到的一个预期的状态。
    • 比如:内部需要有哪些 container 被运行
    • image 是什么?
    • 它暴露的 port 是什么?
    • 当我们从 Kubernetes API 中去获取这个资源的时候,一般来讲在 Spec 下会有一个项目叫 status,它表达了这个资源当前的状态;比如说一个 Pod 的状态可能是正在被调度、或者是已经 running、或者是已经被 terminates,就是被执行完毕了。(kubectl get pods)

3、K8s指令

https://kubernetes.io/zh-cn/docs/reference/kubectl/cheatsheet/
http://docs.kubernetes.org.cn/623.html

kubectl get pods --show-labels
kubectl label pods nginx1 env=test —overwrite (覆盖标签)
kubectl label pods nginx1 env=test(添加标签)
kubectl label pods nginx env- (删除标签)
kubectl get pods —show-labels -l env=test (selector通过-l来指定)
kubectl get pods —show-labels -l env=test,env=dev (与关系)
kubectl get pods —show-labels -l ’env in (dev,test)’ (集合)
kubectl annotate pods nginx1 my-annotate=‘my annotate,ok’ (增加注解)
kubectl get pods nging1 -o yaml | less (通过less分页显示)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/397856.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud-高级篇(一)

目录: (1)初识Sentinel-雪崩问题的解决方案 (2)服务保护Sentinel和Hystrix对比 (3)Sentinel初始-安转控制台 (4)整合微服务和Sentinel 微服务高级篇 (1&…

unity开发知识点小结04

混合动画 在动画器控制器中创建从新混合树,也就是创建混合动画 然后进入混合动画,选择混合类型为1D(表示传递参数只有一个),并且为此混合状态添加两个动画,并且设定混合状态参数为何值得时候启用相应动画…

Python中函数的分类、创建和调用,你真的懂了吗

文章目录前言一、函数分类二、创建函数三、调用函数前言 在前面的博客中,所有编写的代码都是从上到下依次执行的,如果某段代码需要多次使用,那么需要将该段代码复制多次,这种做法势必会影响开发效率,在实际项目开发中是…

特权级那些事儿-实模式下分段机制首次出现的原因

前言: 操作系统的特权级模块在整个操作系统的学习中应该算的上是最难啃的了,提到特权级就要绕不开保护模式下的分段机制;如果想要彻底弄明白就要对比实模式下的分段机制有什么缺陷。这就衍生出很多问题如:什么是实模式&#xff1f…

Nacos 注册中心核心能力以及现实原理解析

Nacos注册中心主要分两方面解析:动态服务发现和Nacos实现动态服务发现的原理; 动态服务发现 服务发现是指使用一个注册中心来记录分布式系统中的全部服务的信息,以便其他服务能够快速的找到这些已注册的服务。 在单体应用中,DNS…

MINE: Towards Continuous Depth MPI with NeRF for Novel View Synthesis

MINE: Towards Continuous Depth MPI with NeRF for Novel View Synthesis:利用NeRF实现新视图合成的连续深度MPI 摘要:在论文中,提出了MINE,通过从单个图像进行密集3D重建来执行新的视图合成和深度估计。通过引入神经辐射场&…

05-Oracle中的对象(视图,索引,同义词,系列)

本章主要内容: 1.视图管理:视图新增,修改,删除; 2.索引管理:索引目的,创建,修改,删除; 3.同义词管理:同义词的作用,创建&#xff0…

如何通过websoket实现即时通讯+断线重连?

本篇博客只是一个demo,具体应用还要结合项目实际情况,以下是目录结构: 1.首先通过express搭建一个本地服务器 npm install express 2.在serve.js中自定义测试数据 const express require(express); const app express(); const http req…

详细stm32驱动SDRAM的注意事项以及在keil中的使用

SDRAM的主要参数: 容量:SDRAM的容量是指其可以存储的数据量,通常以兆字节(MB)或千兆字节(GB)为单位。 时钟频率:SDRAM的时钟频率指的是其内部时钟的速度,通常以兆赫&…

94. 二叉树的中序遍历

94. 二叉树的中序遍历 给定一个二叉树的根节点 root ,返回 它的 中序 遍历 (左根右)。 首先我们需要了解什么是二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历…

MQTT协议-订阅主题和订阅确认

MQTT协议-订阅主题和订阅确认 SUBSCRIBE——订阅主题 订阅是客户端向服务端订阅 订阅报文 订阅报文与CONNECT报文类似,都是由固定报头可变报头有效载荷组成 固定报头比较简单,也是由两个字节组成,第一个字节为82,第二个字节是…

像素密度提升33%,Quest Pro动态注视点渲染原理详解

在Connect 2022上,Meta发布了Quest Pro,并首次在VR中引入动态注视点渲染(ETFR)功能,这是一种新型图形优化技术,特点是以用户注视点为中心,动态调节VR屏幕的清晰度(注视点中心最清晰、…

Oracle VM VirtualBox6.1.36导入ova虚拟机文件报错,代码: E_INVALIDARG (0x80070057)

问题 运维人员去客户现场部署应用服务,客户是windows server 服务器(客户不想买新机器),我们程序是在linux系统里运行(其实windows也可以,主要是为了保持各地环境一致方便更新和排查问题)我们使…

吐血整理学习方法,2年多功能测试成功进阶自动化测试,月薪23k+......

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 测试进阶方向 测试进…

[Gin]框架底层实现理解(三)

1.engine.Run(port string) 这个就是gin框架的启动语句,看看就好了,下面我们解析一下那个engine.Handler() listenandserve 用于启动http包进行监听,获取链接conn // ListenAndServe listens on the TCP network address addr and then ca…

【SOP 】配电网故障重构方法研究【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Java中wait和sleep区别

文章目录1. Java中wait和sleep区别2. wait和sleep所属方法的不同3. wait的Demo3.1 没有synchronized同步代码块异常3.2 wait使用Demo4. sleep的Demo1. Java中wait和sleep区别 sleep属于Thread类中的static方法;wait属于Object类的方法sleep时线程状态进入TIMED_WAI…

java 如何实现在线日志

如何采集springboot日志至web页面查看 实现方案 基于Filter方式,在日志输出至控制台前,LoggerFitler 拦截日志通过websocket推送至前台页面 实现逻辑: LoggerFilter采集日志添加至LoggerQueue队列, LoggerConsumer 从LoggerQueue中采集推送至前台页面 #mermaid-s…

LearnOpenGL-光照-3.材质

本人刚学OpenGL不久且自学,文中定有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/LearnOpenGLProject 文章目录材质例子1代码相关光照太强了例子2例子3: 不同的光源颜色材质 引出材质 如果我们想要在OpenGL中模拟…

TTS | 语音合成常见数据集及数据格式详情

linkLJSpeech网址 : The LJ Speech Dataset (keithito.com)数据集描述:数据集大小:2.6GB这是一个公共领域的语音数据集,由 13,100 个简短的音频剪辑组成 一位演讲者阅读 7 本非小说类书籍的段落。为每个剪辑提供转录。…