知识点积累系列(四)Kubernetes篇【持续更新】

news2024/11/14 21:56:43

云原生学习路线导航页(持续更新中)

本文是 知识点积累 系列文章的第四篇,记录日常学习中遇到的 Kubernetes 相关的知识点

1.Kubernetes琐碎知识点

1.1.为什么要有annotations

  • annotation中除了能够记录一些额外信息,还可以解决kubernetes的新功能特性的支持和过渡问题
    • 每当要添加新功能,不要直接去改配置的组织格式(就是yaml的编排结构)
    • 先在annotations中添加一下,让这个功能先加上,等到功能完善之后,再从annotations中取出来,设计成yaml中的结构。
  • 优缺点:
    • 实验性的新特性、尚未完善的新特性,都可以加入,升级方便
    • 啥都往annotations中放,不太美观
  • 举例:
    • kubernetes1.3中,initContainer引入,先放入的annotations,后来1.8的时候,才引入到pod的spec中

1.2.YAML中多行字符串的配置方法:|+、|、|-、>+、>、>-的区别

  • 参考博客:https://blog.csdn.net/a772304419/article/details/126141668

1.3.kubernetes内置的一些标签、注解、污点列表

  • https://kubernetes.io/zh-cn/docs/reference/labels-annotations-taints/#topologykubernetesiozone

1.4.kube-apiserver 6443端口、8080端口、443端口的区别

  • https://www.apispace.com/news/post/10771.html

1.5.kubectl explain 如何指定版本

  • 添加参数 --api-version,举例:
    kubectl explain hpa.spec.metrics --api-version=autoscaling/v2beta2
    

1.6.pod.status中的podIP和podIPs有什么区别

status:
  ...
  hostIP: 192.168.245.102
  phase: Running
  podIP: 10.244.2.74
  podIPs:
  - ip: 10.244.2.74
  • podIP

    • podIP 是一个字符串,表示 Pod 的 IP 地址。每个 Pod 在创建时都会分配一个唯一的 IP 地址,用于在集群内部进行通信。
    • 该 IP 地址是 Pod 内部网络的标识符,其他 Pod 可以使用该地址与该 Pod 进行通信。
    • 通常情况下,Pod 的 IP 地址是动态分配的,但也可以使用静态 IP 地址。
  • podIPs

    • podIPs 是一个 IP 地址列表,表示 Pod 可能具有多个 IP 地址。
    • 这种情况通常发生在 Pod 具有多个网络接口或多个网络插件配置的情况下。
    • 例如,当使用 CNI 插件时,Pod 可能会分配多个 IP 地址,每个 IP 地址对应于一个网络接口。

1.7.ingress的3个概念:Ingress / IngressController / IngressClass有什么区别

参考文章:5分钟搞懂Ingress / IngressController / IngressClass的区别

下面是一些个人理解:

  • ingress:其实就是kubernetes提供的一个资源,本身不代表什么,需要ingressController来将它解析成具体的映射规则,它才能生效
  • ingress Controller:其实就是一个角色,一个概念,表示管理ingress的控制器,负责解析ingress的声明,监听对应的service变化,生成最新的 转发规则
  • ingress Class:ingress Controller的具体实现,我们平时说安装一个ingressController,其实就是安装一个 具体的ingress Class。比如 nginx-ingress-controller

综上,我们使用ingress,需要先安装一个 ingressController的具体实现,然后再编写ingress yaml文件

1.8.ingress controller的nginx配置文件在哪里

  • k8s的nginx配置文件在哪里

1.9.kubernetes的运行时:docker和containerd的关系

  • 参考了博客:https://cloud.tencent.com/developer/article/2154031、https://www.51cto.com/article/765823.html,我 梳理了下过程。
  • 早期,docker一家独大,kubernetes直接支持docker。后来为了防止docker一家独大,docker被拆分出了几个标准化的模块,为的就是更方便地替换某个模块。
    • docker-client
    • dockerd
    • containerd:纯粹、轻量的容器运行时
    • docker-shim
    • runc
  • K8s社区认可了containerd的优势,将其作为K8s生态系统的标配容器运行时,让containerd在宿主机负责以下功能:
    • 管理容器的生命周期(从创建容器到销毁容器)
    • 拉取/推送容器镜像
    • 存储管理(管理镜像及容器数据的存储)
    • 调用 runC 运行容器(与 runC 等容器运行时交互)
    • 管理容器网络接口及网络
  • 就在docker刚拆出来containerd不久,kubernetes 1.5版本 引入了CRI(container runtime interface)的概念,作为kubelet和容器运行时交互的统一接口规范。至此,kubelet与容器运行时交互就使用CRI,底层可以使用任意符合CRI规范的运行时。
  • 不过,docker发展的早,并不支持CRI,为此,kubernetes团队专门为docker开发了一个dockershim(shim:临时的)。通过dockershim适配docker,让docker支持CRI
    在这里插入图片描述
  • dockershim由kubernetes维护,当docker发布新的版本时,kubernetes也需要维护dockershim适配docker新版本,这很耗费精力。
  • docker中真正工作的高级运行时是Containerd,kubernetes使用dockershim对接docker,还不如直接对接containerd,所以后来对containerd做了CRI的支持(CRI-Containerd),让kubelet直接对接符合规范的CRI-containerd,这样更加标准,调用的链路也更短
  • 所以kubernetes1.24时,kubernetes宣布正式删除和弃用dockershim。因此1.24大家都说不再支持docker,本质上是废弃了内置的 dockershim 功能,而是直接去对接containerd。并不是说以后不能使用docker了
  • 发展过程图如下:参考自博客
    在这里插入图片描述
  • 上图中,可以看出containerd后来做了插件化处理,为CRI规范开发了一个插件适配,这样以后如果有其他规范,只需要再开发相应的插件即可。

1.10.如何修改kube-scheduler的调度策略

  • 官方文档有详细介绍:https://kubernetes.io/zh-cn/docs/reference/scheduling/config/

1.11.kubernetes API 完整列表

  • 1.24版本:
    • https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.24/
  • 1.29版本:
    • https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/

1.12.kubernetes中的内存单位Mi/M、Gi/G的区别

  • 结论:
    • Mi表示(1Mi=1024x1024B)
    • M表示(1M=1000x1000B)
    • 其它单位类推, 如Ki/K Gi/G
  • 详细+测试:https://www.jianshu.com/p/f798b02363e8

1.13.kubernetes如何根据Pod找到所属的控制器?

  • pod yaml的元数据里,有一个ownerReferences,写了它属于谁
  • kubectl get pods podName -n ns -oyaml,就可以看到
    在这里插入图片描述
    在这里插入图片描述

1.14.如何在Pod和本地之间复制文件

  • pod中文件 复制到 本地。如果pod有多个容器,就指定 -c
    kubectl cp <pod_name>:<container_path> <local_file_path> -c <container_name>
    // 举例
    kubectl cp nginx-6ddbbc47fb-sfdcv:/etc/fstab /tmp
    kubectl cp nginx-6ddbbc47fb-sfdcv:/etc/fstab /tmp -c nginx1
    
  • 本地文件 复制到 pod中。如果pod有多个容器,就指定 -c
    kubectl cp <local_file_path> <pod_name>:<container_path> -c <container_name>
    kubectl cp /tmp nginx-6ddbbc47fb-sfdcv:/etc/fstab 
    kubectl cp /tmp nginx-6ddbbc47fb-sfdcv:/etc/fstab  -c nginx1
    

2.Kubernetes进阶内容【TODO】

这部分。是在学习过程中发现的一些扩展点,可以深入学习,或者作为一个专门的方向深入研究

2.1.ReadinessProbe的扩展:Readiness Gate

  • 学习博客:https://cloud.tencent.com/developer/article/1661689?pos=comment
  • 自定义RG controller:https://github.com/du2016/readnessgate-controller
  • TODO:将是很好的扩展方式

2.2.开发并使用自定义调度器完成pod调度

  • 学习博客:https://www.qikqiak.com/post/custom-kube-scheduler/

2.3.利用Prometheus+hpa自定义监控指标

2.4.使用headless service实现自定义负载均衡策略

2.5.service的LoadBalancer类型、vpc等

2.6.service和kube-proxy的关系

https://www.cnblogs.com/chadiandianwenrou/p/13860520.html

2.7.自定义一个IngressController,实现转发规则的自动更新

3.待学习的开源项目【TODO】

这里主要是学习过程中发现的一些比较好的开源项目,以后有时间了会深入学习,也会出文章

3.1.CoreDNS

  • 地址:https://github.com/coredns/coredns
  • CoreDNS 是一个用于 Kubernetes 集群中 DNS 解析的开源项目,是一个轻量级的 DNS 服务器。
  • 截至目前(2023年),CoreDNS 的代码库中包含了大约 12,000 行左右的代码。
  • CoreDNS 是一个功能强大、可靠且广泛使用的 DNS 解析器,适用于 Kubernetes 集群中的服务发现和网络通信。

3.2.etcd

  • etcd(读作 et-see-dee)是一种开源的分布式统一键值存储,用于分布式系统或计算机集群的共享配置、服务发现和的调度协调。
  • 为了更深入的掌握kubernetes,有必要学习一下etcd
  • github地址:https://github.com/etcd-io/etcd
  • 官网地址:https://etcd.io/
  • RedHat 为ETCD 开发了一个Operator,可以作为学习Operator的资料
    • https://www.redhat.com/zh/topics/containers/what-is-etcd

3.3.go-delve

  • go-delve 是一个开源项目,为go语言提供debug能力,简单易用,github地址:https://github.com/go-delve/delve
  • go-delve 属于golang语言基础设施的一部分,像vscode的go语言插件、goland调试功能等,底层都是使用了delve。

3.4.cobra

  • Cobra 是一款非常流行的命令行生成工具,由 Go 语言实现,比如说著名的博客工具 Hugo , GitHub 命令行等都是用它实现的。kubernetes也大量使用了它。
  • github地址:https://github.com/spf13/cobra

3.5.gen-go

  • gengo 是 kubernetes 项目中常用的代码生成工具,kubernetes 项目中大量使用了这个工具用于代码生成。
  • gengo 更多的设计为一个比较通用的代码生成工具,完成代码表达树解析,生成的工作。
  • github地址:https://github.com/kubernetes/gengo
  • 学习博客:https://cloud.tencent.com/developer/article/1635822

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

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

相关文章

3d模型上的材质怎么删除---模大狮模型网

在大多数3D软件中&#xff0c;可以通过以下步骤来删除3D模型上的材质&#xff1a; 选择要删除材质的模型&#xff1a;首先&#xff0c;从场景中选择包含目标材质的模型。可以使用选择工具或按名称查找模型。 进入编辑模式&#xff1a;将模型切换到编辑模式。这通常需要选择相应…

【Docker】WSL(Windows Subsystem for Linux)常见命令解释说明以及简单使用

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

设计模式学习笔记02(小滴课堂)

江湖传言里的设计模式-单例设计模式 单例设计模式中的懒汉方式实战 这种方式是线程不安全的&#xff0c;多个线程同时调用会创建多个对象。 所以我们就要给它加锁: 我们去测试一下&#xff1a; 因为构造函数已经私有化&#xff0c;所以不能直接用new的方式去创建对象。 现在我…

多线程事务如何回滚?

背景介绍 1&#xff0c;最近有一个大数据量插入的操作入库的业务场景&#xff0c;需要先做一些其他修改操作&#xff0c;然后在执行插入操作&#xff0c;由于插入数据可能会很多&#xff0c;用到多线程去拆分数据并行处理来提高响应时间&#xff0c;如果有一个线程执行失败&am…

Stable Diffusion web UI 安装、启动脚本、常见问题、插件(linux)

Stable Diffusion本身是一个模型&#xff0c;对于大多数想试试的人来说&#xff0c;使用这个web ui版本最合适 建议先看完再动手&#xff0c;虽然不难但是有门槛&#xff08;主要要解决网络问题&#xff09;&#xff0c;如果深入需要会python 如果只是想试试的&#xff0c;建议…

市面上的小型办公室都是哪些人在租?

市面上的小型办公室&#xff0c;又称服务式办公室&#xff0c;是一种将传统的写字楼进行精装修&#xff0c;分割成若干个独立的小型办公空间&#xff0c;提供给不同的租户的新型办公模式。那么&#xff0c;市面上的小型办公室都是哪些人在租&#xff1f;本文将从租户的特点和需…

Linux服务器配置与管理(第四次实验)

实验目的及具体要求 目的 1.了解网络配置之文件 2.掌握网络常用命令 3.掌握ssh远程连接 任务 1.修改主机名为TX 2.查看系统的网络接口信息 3.在路由表中添加一条路由 4.删除上一步添加的路由 5.查看网络中所有的TCP端口连接信息 6.X SHELL远程链接Centos系统 7.在X …

35岁老兵,从金山被裁员到创业

35岁&#xff0c;对于许多人而言&#xff0c;是事业中一个重要的节点。对我而言&#xff0c;这一年成为了我生命中的转折点。2023年8月份的一个上午&#xff0c;突然被领导叫到小黑屋&#xff0c;告知我被裁员了。起初&#xff0c;这个决定对我来说是一个巨大的打击&#xff0c…

榜单!AR-HUD进入高增速周期,TOP10本土供应商争夺市场

高工智能汽车研究院数据显示&#xff0c;2023年1-9月&#xff0c;中国市场&#xff08;不含进出口&#xff09;乘用车前装标配W/AR HUD交付149.54万辆&#xff0c;同比增长45.86%。 其中&#xff0c;W-HUD仍是主流。而同期&#xff0c;AR-HUD的前装标配搭载量超过10万辆&#x…

Mysql-ReadView + MVCC-RR 与 RC

实验准备 创建脚本 CREATE TABLE user (id int(11) NOT NULL AUTO_INCREMENT,name varchar(16) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,age int(11) NULL DEFAULT NULL,addr varchar(256) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,PRIMARY …

希尔伯特变换的在信号解调时的示例

1.希尔伯特变换的应用场景 希尔伯特变换&#xff0c;在数学上的含义是清晰的。它是一个数字移相器&#xff0c;可以把通过它的任何一个信号相移-90度。这个数学工具在信号解调时&#xff0c;会有非常有用的特性出现。可以看示例&#xff1a; 解释一下&#xff1a; 1.最上面的…

transformer | transformer的输入部分input coding

文章目录 transformer的输入部分input codingBPEBPE所解决的问题——OOV PE&#xff08;Position Encoding&#xff09;位置编码 transformer的输入部分input coding transformer的输入部分input codingBPEPE BPE BPE是指一种词分类算法。 起初&#xff0c;会将每个单词都拆分…

旧物回收小程序开发:创新与可持续发展的交汇点

随着社会的发展和人们生活水平的提高&#xff0c;物品的更新换代速度越来越快&#xff0c;这导致了大量的旧物被闲置或丢弃。为了解决这个问题&#xff0c;旧物回收成为了重要的环保行动。而随着移动互联网的普及&#xff0c;旧物回收小程序的开发也成为了新的趋势。本文将探讨…

本次安装Visual Studio 所用的安装程序不完整。请重新运行VisualStudio安装程序以解决此问题

今天点开VS的时候遇到了这个问题 因为昨天升级到一半电脑关机了&#xff0c;今天打开软件遇到如下错误&#xff0c; 解决办法很简单&#xff0c;找到安装目录进入Installer文件夹 我的目录在C:\Program Files (x86)\Microsoft Visual Studio\Installer 找到vs_installer.exe…

《HTML 简易速速上手小册》第8章:HTML 表单高级技术(2024 最新版)

文章目录 8.1 数据收集与处理8.1.1 基础知识8.1.2 案例 1&#xff1a;创建一个注册表单8.1.3 案例 2&#xff1a;创建一个调查问卷表单8.1.4 案例 3&#xff1a;创建一个动态添加输入字段的表单 8.2 定制化表单元素8.2.1 基础知识8.2.2 案例 1&#xff1a;创建一个带有定制选择…

打击者H5小游戏

欢迎来到程序小院 打击者 玩法&#xff1a;点击飞机上下左右移动躲过子弹射击&#xff0c;打掉上方敌人飞机&#xff0c; 遇到药包会增加能量&#xff0c;弹药包会升级武器&#xff0c;快去射击吧^^。开始游戏https://www.ormcc.com/play/gameStart/262 html <div id"…

点击查看 Milvus 社区十大关键词(下)

在昨天的文章《点击查看 Milvus 社区十大关键词&#xff08;上&#xff09;》中&#xff0c;我们提到将 2023 年所有 Milvus 技术交流群的聊天历史做了整理分析&#xff0c;得到了如下的一张词云图&#xff1a; 按照热度&#xff0c;排名前十的关键词依次为&#xff1a;版本、查…

游戏缺失d3dcompiler_47.dll怎么办,这五种方法可以帮你解决

d3dcompiler_47.dll文件的缺失可能会导致一系列显著且影响用户体验的问题。作为DirectX 3D编译器的重要组件&#xff0c;该动态链接库文件在许多依赖于高级图形处理的应用程序和游戏运行过程中起着至关重要的作用。当系统中缺少这个特定的dll文件时&#xff0c;可能会出现诸如应…

会话技术复习笔记

一.登录校验的需求 什么是登录校验&#xff1f; 所谓登录校验&#xff0c;指的是我们在服务器端接收到浏览器发送过来的请求之后&#xff0c;首先我们要对请求进行校验。先要校验一下用户登录了没有&#xff0c;如果用户已经登录了&#xff0c;就直接执行对应的业务操作就可以…

H264 编码标准配置档次 Profile 详解

H264 中 Profile 定义&#xff1a; H264 标准中规定了 多种档次Profile&#xff0c; 每种 Profile 都规定了一个算法特征和限制的子集&#xff0c;任何遵守某个 Profile 的解码器都应该支持与其相应的子集。维基百科中解释&#xff1a; The standard defines several sets of …