深入剖析k8s-控制器思想

引言

本文是《深入剖析Kubernetes》学习笔记——《深入剖析Kubernetes》

正文

控制器都遵循K8s的项目中一个通用的编排模式——控制循环

for {
  实际状态 := 获取集群中对象X的实际状态
  期望状态 := 获取集群中对象X的期望状态
  if 实际状态 == 期望状态 {
     // do nothing
  } else {
     执行编排动作,将实际状态调整为期望状态
  }
}

作业副本与水平扩展

如果更新了Deployment的Pod模版,那么Deployment就需要遵循滚动更新的方式,来升级现有容器 → ReplicaSet.
在这里插入图片描述
DeployController 只需要修改它所控制的ReplicaSet的Pod副本个数就可以了。

相关命令

k scale deployment nginx-deployment --replicas=4 # 调整replicas数量

k rollout status deployment nginx-deployment # 实时查看Deployment对象的状态变化

k edit deployment/nginx-deployment # 通过修改yaml文件调整deployment状态

在这里插入图片描述
滚动更新,要求一定使用Pod的健康检查机制检查应用的运行状态,而不是简单地依赖容器的Running状态。

在控制器在滚动更新过程中永远会确保2个Pod处于可用状态,至多只有4个Pod同时存在于集群中,由RollingUpdateStrategy进行控制。

  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1 # 除了DESIRED数量外,在一次滚动更新中Deplyment控制气还可以创建多个新Pod
      maxUnavailable: 1 # 可以删除多少旧Pod

上述案例

k set image deployment/nginx-deployment nginx=nginx:1.91 # 设置deployment nginx版本

在这里插入图片描述

k rollout undo deployment/nginx-deployment # 错误回滚,rs仍然保存

k rollout history deployment/nginx-deployment --revision=2 # 查看API对象的细节

k rollout undo deployment/nginx-deployment --to-revision=2 # 最后加上目标版本号,来回滚指定版本

在这里插入图片描述

每一次操作都会生成rs,是否造成资源浪费?

解决方案1:

k rollout pause deployment/nginx-deployment

... k edit / k set image

k rollout resume deploy/nginx-deployment

解决方案2:

spec.revisionHistoryLimit=0 再也不能进行回滚操作

问题

应用的发布流程往往千差万别,可能有很多定制化的需求。例如:会有会话粘连(session sticky),这就意味着更新时哪个Pod能下线不是随便选择的。

StatefulSet :拓扑状态

有些实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,就称为有状态应用。

StatefulSet将应用状态抽象为两种情况

  1. 拓扑状态:应用的多个实例之间不是完全对等的。
  2. 存储状态:应用的多个实例分别绑定了不同的存储数据。

Headless Service

Services是K8s用来将一组Pod暴露给外界访问的一个机制。

  1. 以Service的VIP(virtual IP的方式):当访问10.0.23.1这个Service IP地址时,会把请求转发到该Service所代理的Pod上。
  2. 以Service的DNS方式:访问my-svc-namespace.svc.cluster.local这条DNS记录,就可以访问my-svc所代理的Pod上
    1. Normal Servcie:解析DNS时,返回的是VIP
    2. Headless Service:解析DNS时,直接返回的是Pod IP

创建Healess Service

apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  selector:
    app: nginx
  ports:
    - name: web
      port: 80
  clusterIP: None # 不同点

创建一个Healess Service之后,所代理的所有Pod的IP都会被绑定到<pod-name>.<svc-name>.<namespace>.svc.cluster.local上。
在这里插入图片描述

StatefulSet如何使用这个DNS记录为维持Pod的拓扑状态

StatefulSet让其所有Pod都有唯一的网络标识,即使Pod被删除,重新创建的容器网络标识与原先 相同 (IP不同)

StatefulSet:存储状态

PVC和PV的设计,实际上类似于“接口”和“实现”的思想。

开发者只要知道并会使用PVC;运维人员负责给“接口”绑定具体的实现,即PV;

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: nginx-service
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.9.1
          ports:
            - containerPort: 80
              name: web
          volumeMounts:
            - mountPath: /usr/share/nginx/html
              name: www
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 1Gi

使用volumeClaimTemplate进行PV和PVC的绑定

总结

  1. StatefulSet的控制器直接管理的是Pod。
  2. K8s通过Headless Service为这些编号的Pod,在DNS服务器中生成有相同编号的DNS记录。
  3. StatefulSet为每一个Pod分配并创建一个相同编号的PVC。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【nmap工具介绍及常用命令】从零基础入门到精通,看完这一篇就够了。

1.功能介绍 nmap&#xff08;network mapper&#xff09;,网络映射器&#xff0c;是kali内置的一款工具&#xff0c;是网络连扫描软件&#xff0c;用来扫描网上设备开放的网络连接端。确定哪些服务运行在哪些连接端&#xff0c;并且&#xff0c;推断设备使用什么系统。 nmap的…

2024年腾讯云优惠代金券一键领取页面,太划算!

腾讯云代金券领取渠道有哪些&#xff1f;腾讯云官网可以领取、官方媒体账号可以领取代金券、完成任务可以领取代金券&#xff0c;大家也可以在腾讯云百科蹲守代金券&#xff0c;因为腾讯云代金券领取渠道比较分散&#xff0c;腾讯云百科txybk.com专注汇总优惠代金券领取页面&am…

详细介绍如何用windows自带Hyper-V安装虚拟机(windows11和ubuntu22)

通过系统自带的hyper-v安装windows11&#xff0c;舒服又惬意&#xff0c;相比用第三方虚拟机软件速度快很多。 硬件准备 准备 系统需要符合能安装 Hyper-V 的最低要求windows版本含Hyper-V的功能 电脑空间 电脑要有足够的空间来安装你这个虚拟机。根据自己的磁盘容量情况来规…

如何知道当前ubuntu的版本

查看版本&#xff1a; cat /etc/lsb-release 查看内核&#xff1a; uname -a

新算法转让(一种基于改进欧拉法开发的元启发式算法)

新算法转让&#xff08;一种基于改进欧拉法开发的元启发式算法&#xff09; 新的群智能算法转让&#xff0c;新的元启发式算法转让 1.开发完成的完整代码 2.灵感部分已完成&#xff0c;有word版本说明 3.测试结果17/30个排名第一&#xff08;算法开发完毕&#xff09;与AO、A…

面部SDF阴影锯齿问题的探索

近期做的一些工作涉及到面部SDF阴影&#xff0c;网上普遍做法是不做插值&#xff0c;直接Step硬性裁剪&#xff0c;我通过SmoothStep做了简单修改&#xff0c;看下效果。 看上去还可以是因为gif有压缩&#xff0c;但面部SDF阴影做插值有个很严重的问题&#xff1a; 插值处理后…

LangFlow——一款可轻松实验和原型化 LangChain流水线的AI项目

LangFlow——一款可轻松实验和原型化 LangChain流水线的AI项目。 前言 在人工智能兴起的当下&#xff0c;AI正在重塑着很多行业。今天介绍的是一款近期登上github热门的一款可轻松实验和原型化 LangChain[1] 流水线的AI项目—LangFlow。 Flowise——通过拖放界面构建定制的LLM…

音视频开发项目:H.265播放器:视频解码篇

视频演示 如下将演示新版播放器播放 1分钟1080p/25fps/H.265 MP4视频&#xff0c;具体视频参数如下&#xff1a; 粉丝福利&#xff0c; 免费领取C音视频学习资料包学习路线大纲、技术视频/代码&#xff0c;内容包括&#xff08;音视频开发&#xff0c;面试题&#xff0c;FFmpe…

微软自带的便笺(jian)无法连接到服务器。错误代码 0x80072EFD,同时如何在手机使用便笺

便笺的内容无法在各个设备同步&#xff0c;错误如图所示 一、问题的解决 参考自微软社区&#xff1a;Redirecting 原话&#xff1a; 此错误一般都是由于网络问题导致的。建议您首先确认您有没有开启代理&#xff0c;您可以打开设置&#xff0c;网络和Internet&#xff0c;找…

程序员缺乏经验的 7 种表现,你中招没?

一次性提交大量代码 代码写的很烂 同时开展多项工作 性格傲慢 不能从之前的错误中学到经验 工作时间处理私人事务 盲目追逐技术潮流 总结 知道这些表现&#xff0c;你才能在自己的程序员职业生涯中不犯相同的错误。 软件行业的工作经验和你从事这个行业的工作年限直接…

Python的循环结构练习

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 生命对某些人来说是美丽的&#xff0c…

SQL面试题(2)

第一题 创建trade_orders表: create table `trade_orders`( `trade_id` varchar(255) NULL DEFAULT NULL, `uers_id` varchar(255), `trade_fee` int(20), `product_id` varchar(255), `time` varchar(255) )ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_…

李沐动手学习深度学习——3.7练习

尝试调整超参数&#xff0c;例如批量大小、迭代周期数和学习率&#xff0c;并查看结果。 num_epochs 10&#xff0c; batch_size 256&#xff0c; lr 0.1情况下 num_epochs 5&#xff0c; batch_size 256&#xff0c; lr 0.1情况下 可以尝试一下&#xff0c;三种参数变…

Redisson 3.18.0版本解决failover相关问题

前言 Redisson 在历史多个版本都出现了failover期间报错的问题并且目前没有一个版本可以完全解决这个问题&#xff0c;所以在当前使用版本3.18.0基础上做了二次开发&#xff0c;达到降低业务由于redis遇到问题导致不可用。 背景 Redisson 作为业务线使用的Redis 客户端&…

Vue(黑马学习笔记)

Vue概述 通过我们学习的htmlcssjs已经能够开发美观的页面了&#xff0c;但是开发的效率还有待提高&#xff0c;那么如何提高呢&#xff1f;我们先来分析下页面的组成。一个完整的html页面包括了视图和数据&#xff0c;数据是通过请求从后台获取的那么意味着我们需要将后台获取…

什么是大模型微调?微调的分类、方法、和步骤

2023年,大模型成为了重要话题,每个行业都在探索大模型的应用落地,以及其能够如何帮助到企业自身。尽管微软、OpenAI、百度等公司已经在创建并迭代大模型并探索更多的应用,对于大部分企业来说,都没有足够的成本来创建独特的基础模型(Foundation Model):数以百亿计的数据…

线程池总结

线程池介绍: 把要使用的线程提前创建好,用完了也不要释放而是以备下次使用,就节省了创建/销毁线程的开销 在这个使用的过程中,并没有真的 频繁创建销毁,而是从线程池里,去线程使用,用完了还给线程池 线程池参数介绍 int corePoolSize 核心线程数(一个线程池里,…

《梦幻西游》本人收集的34个单机版游戏,有详细的视频架设教程,值得收藏

梦幻西游这款游戏&#xff0c;很多人玩&#xff0c;喜欢研究的赶快下载吧。精心收集的34个版本。不容易啊。里面有详细的视频架设教程&#xff0c;可以外网呢。 《梦幻西游》本人收集的34个单机版游戏&#xff0c;有详细的视频架设教程&#xff0c;值得收藏 下载地址&#xff1…

conda激活环境失败解决办法

问题如下&#xff1a;conda activate 环境 报错了&#xff0c;应该是由于上次没有conda deactivate导致的&#xff0c;提示说close and restart shell。因此&#xff0c; 输入exit,退出shell 再重新打开终端即可&#xff0c;此时输入conda activate 环境名&#xff0c;就到了虚…

动态规划|【路径问题】|931.下降路径最小和

目录 题目 题目解析 思路 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 代码 题目 931. 下降路径最小和 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开…