Kubernetes常见问题解答

news2025/2/6 8:57:29

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

  • 快捷链接
    • Kubernetes架构原则和对象设计

本文对Kubernetes学习中常见的一些问题,进行解答

1.什么时候使用公有云,什么时候使用自建k8s

  • 看公司规模,规模小使用公有云,规模足够大使用自建云

2.什么是Job

  • 如果你的一个应用24h都在跑,那就是一个Long Time Running的一个作业
  • 而Job是一个短时作业,运行完就退出,而且不会重启
  • CronJob也是一个短时作业,运行完就退出,而且不会重启

3.Job和Pod的区别

4.一个集群应该设计为多大规模?

一个集群应该设计为多大规模,需要从很多个维度去考虑

  • 一个集群应该设计为多大规模,首先应该考虑一个集群的控制面能管理多大规模的集群,比如kubernetes号称能管理5,000节点
    • 有的公司进行了优化后,将控制面管理node数量扩大到了10000
    • 有的公司觉的 一个集群过大都不一定好。
    • 实际上,集群规模过大过小都不好
      • 故障域的控制。一个集群规模过大,如果控制面坏了造成的影响将会更大,集群内所有机器的故障转移、扩缩容等都会失效
      • 如果集群规模过小,那么可能面临过多的集群,意味着你的维护成本就上去了。
  • 因此,需要平衡自己公司的业务情况,决定一个集群的大小

5.有状态应用和无状态应用

  • 无状态应用
    • 假设一个Web应用,只有一个war包,没有任何本地数据,所有的数据都存在云端数据库中,即数据的存储和应用本身分离了,那么这个应用就是一个无状态应用了
    • 无状态应用实例坏了,可以直接启动一个替换它,没有任何本地的依赖
    • 还有一些应用,本地会记录一些Session信息,现在也不推荐了,鼓励应用内部无状态,这样能够更好的和Kubernetes等云平台融合
    • 目前大多数应用都是无状态应用,之前讲过12 factor的原则,就是鼓励无状态
      • https://www.huweihuang.com/kubernetes-notes/paas/12-factor.html
    • 有人说90%应用都是无状态的,不知道怎么统计的
  • 有状态应用
    • 一般来说,有本地数据存储的应用都是有状态的,实例坏了后,依赖本地数据,无法直接启动一个新的实例替代它
    • statefulset为什么有时无法满足需求?因为statefulset它本身也比较简单,对于太复杂的应用,它做不了。另一方面,statefulset也有一些故障转移等能力,如果这个能力会破坏你的应用,那就不能用了
    • 比如mysql集群,不同实例还需要区分身份,配置和启动脚本也可能有所不同,所以mysql就是没有办法简单描述的,一般都需要单独定制Operator

6.Operator SDK 和 Kubebuilder 怎么选?

  • Kubebuilder本身就是operator SDK的封装
  • 目前Kubebuilder是作为一个更核心的项目维护的,所以更推荐Kubebuilder

7.什么是云原生

  • 应用设计之初就考虑了上云的各种事情
  • 以前叫 Cloud Ready,现在统一叫 Cloud Native

8.Aggregated APIServer的使用案例

  • 比如 要给pod做 HPA 自动扩缩容,肯定是需要一些cpu、memory等指标数据的,这些指标要在APIServer中取
  • 在原生APIServer中是不包含这些指标的,因此可以自己写一个 Metrics APIServer,以 Aggregated APIServer的方式嵌入到APIServer中去,HPA的一些Controller就可以在APIServer中获取这些metrics指标数据了
  • 目前kubernetes社区已经有了开源的 metrics APIServer:即 metrics-server
    • https://github.com/kubernetes-sigs/metrics-server
    • 官方文档
  • 安装之后,可以使用kubectl top命令,查看指标
    • 比如 kubectl top node 就可以展示node的cpu、memory等使用情况

9.Kubernetes的扩展方式

  • 扩展方式有很多种,比如:
    • Aggregated APIServer:扩展自己的APIServer
    • CRD:扩展Operator控制器

10.Kubernetes源码应该阅读哪个版本。

  • 生产需要:就看自己需要的版本
  • 非生产需要:直接看master最新代码即可

11.什么时候用kubectl apply 和 kubectl create

  • 可以优先用kubectl apply,但是有些极端场景下apply会失败
  • kubectl create语义更明确,不过不适用于patch

12.中型互联网上云时间大约多久

  • 一家中型互联网公司,要从 传统虚拟机应用部署架构 转到 容器微服务架构,一般要以年为计算单位。
  • 假设一个公司有 100多个集群,10w 物理计算node ,100w pod数量,一般需要数年才能完全上云,周期很长

13.CRI使用Docker的情况下,为什么还使用CNI,而不用Docker的网络管理CNM?

  • CNM太厚重了

14.怎么用Deployment+Service实现生产级高可用?

  • Deployment实现冗余部署、故障转移、滚动发布
    • .spec.raplicas 值>1,即 冗余部署
    • Deployment 会负责故障转移,pod被删除后会自动重建
    • Deployment 的 .spec.strategy 可以设置滚动更新配置
      在这里插入图片描述
  • Service提供多pod的负载均衡,外部访问的时候就有统一的ip+port,不依赖于具体的podIp,当pod重建后Podip改变,也不会影响外部的访问
  • 冗余部署 + 负载均衡,其实就实现了一个生产级的高可用。

15.怎么观察Deployment的滚动更新

  • kubectl describe,在event中可以看出,滚动更新是启动一个新的ReplicaSet,然后新的+1,旧的-1,不断滚动
    在这里插入图片描述

16.kubectl 和 kubeconfig 是怎么运作的

在这里插入图片描述

  • 执行kubectl命令的时候,添加 -v 9,即可开启debug日志,可以看到kubectl到底干了什么
    • 可以看到,kubectl命令首先加载了 /root/.kube/config 文件,获取到了当前要连接的集群信息,及user认证信息cert、key
    • 然后向apiserver发送get请求
      在这里插入图片描述
  • kubeconfig内容
    • kubectl从其中获取当前正在使用的上下文,并使用 该上下文中 指定的user 连接 指定的cluster
    • kubeconfig 默认路径:/root/.kube/config,当然你可以通过设置 KUBECONFIG 环境变量或者设置 --kubeconfig参数来指定其他 kubeconfig 文件
    • 官方文档:https://kubernetes.io/zh-cn/docs/concepts/configuration/organize-cluster-access-kubeconfig/
      在这里插入图片描述

17.Deployment为什么不直接管理pod

  • 就像微服务设计思想,我们更希望让 多个组件各自做自己关心的事情,而不是所有的逻辑都放在一个组件中做
  • Deployment直接管理pod当然可以,但是会使得Deployment的逻辑变得很复杂
  • 相反,Deployment直接管理ReplicaSet,可以让Deployment直接获得pod的伸缩等基本能力,Deployment可以更专注于 滚动升级 等更高层次的功能

18.Controller的Informer和Lister两个接口的区别

  • 一个Kubernetes的Controller,一般都会包括两个接口Informer和Lister
  • Lister负责将 所关心资源 全部List过俩
  • Informer负责Watch变化,获得增量

19.Deployment的滚动更新maxunavailable有没有经验值?

  • 不太有通用的经验值,和你的应用特性、部署时资源预留量 都有关系。
  • 假设 部署的时候预留20%资源,即本来需要10个就够了,但是部署的时候启动了12个pod
  • 那么maxunavailable就可以设置为20%,当有20%的pod不可用时,暂停升级,且不会影响业务

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

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

相关文章

基于C#+SQLite开发数据库应用的示例

SQLite数据库,小巧但功能强大;并且是基于文件型的数据库,驱动库就是一个dll文件,有些开发工具 甚至不需要带这个dll,比如用Delphi开发,用一些三方组件;数据库也是一个文件,虽然是个文…

C++高阶算法[汇总]

(一)高精度算法概述 高精度算法是指能够处理超出常规数据类型表示范围的数值的算法。在 C 中,标准数据类型通常有固定的位数和精度限制,而高精度算法可以解决大数运算、金融计算和科学计算等领域的问题。 (二&#x…

JS API事件监听(绑定)

事件监听 语法 元素对象.addEventListener(事件监听,要执行的函数) 事件监听三要素 事件源:那个dom元素被事件触发了,要获取dom元素 事件类型:用说明方式触发,比如鼠标单击click、鼠标经过mouseover等 事件调用的函数&#x…

【C语言】二叉树(BinaryTree)的创建、3种递归遍历、3种非递归遍历、结点度的实现

代码主要实现了以下功能: 二叉树相关数据结构定义 定义了二叉树节点结构体 BiTNode,包含节点数据值(字符类型)以及指向左右子树的指针。 定义了顺序栈结构体 SqStack,用于存储二叉树节点指针,实现非递归遍历…

Three.js 和其他 WebGL 库 对比

在WebGL开发中,Three.js是一个非常流行的库,它简化了3D图形的创建和渲染过程。然而,市场上还有许多其他的WebGL库,如 Babylon.js、PlayCanvas、PIXI.js 和 Cesium,它们也有各自的特点和优势。本文将对Three.js 与这些常…

[pdf,epub]228页《分析模式》漫谈合集01-45提供下载

《分析模式》漫谈合集01-45的pdf、epub文件提供下载。已上传至本号的CSDN资源。 如果CSDN资源下载有问题,可到umlchina.com/url/ap.html。 已排版成适合手机阅读,pdf的排版更好一些。 ★UMLChina为什么叒要翻译《分析模式》? ★[缝合故事]…

CAD深度清理工具-AVappsDrawingPurge9.0.0(2024.8.27版本) 支持版本CAD2022-2025-供大家学习研究参考

图形文件DWG体积很大:通常没有明显的数据。同时,还其他症状包括: (1)无法复制和粘贴图元。 (2)悬挂较长时间选择文本与 “特性”选项板上打开。 (3)图形文件需要很长时间…

kafka数据在服务端时怎么写入的

学习背景 接着上篇,我们来聊聊kafka数据在服务端怎么写入的 服务端写入 在介绍服务端的写流程之前,我们先要理解服务端的几个角色之间的关系。 假设我们有一个由3个broker组成的kafka集群,我们在这个集群上创建一个topic叫做shitu-topic&…

Rook入门:打造云原生Ceph存储的全面学习路径(上)

文章目录 一.Rook简介二.Rook与Ceph架构2.1 Rook结构体系2.2 Rook包含组件2.3 Rook与kubernetes结合的架构图如下2.4 ceph特点2.5 ceph架构2.6 ceph组件 三.Rook部署Ceph集群3.1 部署条件3.2 获取rook最新版本3.3 rook资源文件目录结构3.4 部署Rook/CRD/Ceph集群3.5 查看rook部…

[STM32] ADC 模数转换器 (十)

文章目录 1.ADC概述1.1 转换模式(规则组)1.2 数据对齐1.3 转换时间1.4 校准 2.代码步骤 STM32F103C8T6的12位逐次逼近型ADC的工作原理,包括转换模式、数据对齐、转换时间、校准以及程序配置流程,同时涵盖了关键的库函数和中断管理…

Web3.0安全开发实践:代理合约最佳实践总结

代理模式使智能合约能够升级其逻辑,同时维持其链上地址和状态值。对代理合约的调用会通过delegateCall的方式执行来自逻辑合约的代码,以修改代理合约的状态。 本文将为大家概述代理合约的类型、相关的安全事件和建议,以及使用代理合约的最佳…

第29天 MCU入门

目录 MCU介绍 MCU的组成与作用 电子产品项目开发流程 硬件开发流程 常用元器件初步了解 硬件原理图与PCB板 常见电源符号和名称 电阻 电阻的分类 贴片电阻的封装说明: 色环电阻的计算 贴片电阻阻值计算 上拉电阻与下拉电阻 电容 电容的读数 二极管 LED 灯电路 钳位作…

【人工智能基础05】决策树模型

文章目录 一. 基础内容1. 决策树基本原理1.1. 定义1.2. 表示成条件概率 2. 决策树的训练算法2.1. 划分选择的算法信息增益(ID3 算法)信息增益比(C4.5 算法)基尼指数(CART 算法)举例说明:计算各个…

数据结构与算法(排序算法)

我本将心向明月,奈何明月照沟渠。 排序的概念 1. 排序是指将一组数据,按照特定的顺序进行排列的过程。 2. 这个过程通常是为了使数据更加有序,从而更容易进行搜索、比较或其他操作。 常见的排序算法 插入排序 1. 把待排序的记录&#xff0c…

思科实现网络地址转换(NAT)和访问控制列表(ACL)和动态路由配置并且区分静态路由和动态路由配置。

实验拓扑(分为静态路由和动态路由两种) 静态路由互通 动态路由互通 实验背景 这个是想实现外网与内网的连接跟网络的探讨,最终实现互通以及使用并且在网络地址转换后能使用网络然后再这个基础上再配置访问控制列表和网络地址转换的的学习过程。 实验需了解的知识…

开发一套ERP 第八弹 RUst 插入数据

更全面的报错,方便检查错误在哪里,现代高级语言越来越智能 还是得看下原文档怎么操作的 src 目录为crate 的根目录 想在crate 中模块相互引入需要在 main 中声明,各个模块,然后才能在各个模块中相互引入和使用 原始工程引入,避免直接使用 lib.rs 回合cargo 中的一些 工程管理出…

课程答疑微信小程序设计与实现

私信我获取源码和万字论文,制作不易,感谢点赞支持。 课程答疑微信小程序设计与实现 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了课程答疑微信小程序设计与实现的开发全过程。通过分析…

【时间之外】IT人求职和创业应知【53】-东莞也转型

目录 新闻一:Freysa挑战赛:人类智慧与策略战胜AI,奖金高达4.7万美元 新闻二:中国生成式AI用户规模突破2.3亿,行业应用广泛 新闻三:2024东莞智能终端新技术推广会圆满举行,聚焦AI与智能终端融…

ARP欺骗-监控网络

kali: 使用arp-scan -l 查看同个局域网 windows arp -a 查看地址的物理地址 192.168.21.2 对应的是00-50-56-f5-d5-f0 攻击利用: 我们要让目标ip的流量经过我的网卡,从网关出去 使用的开启 echo 1 > /proc/sys/net/ipv4/ip_forward 当为0时,我们不转发&…

Cesium 当前位置矩阵的获取

Cesium 位置矩阵的获取 在 3D 图形和地理信息系统(GIS)中,位置矩阵是将地理坐标(如经纬度)转换为世界坐标系的一种重要工具。Cesium 是一个强大的开源 JavaScript 库,用于创建 3D 地球和地图应用。在 Cesi…