K8s资源控制器的实战

Kubernetes K8S之资源控制器RC、RS、Deployment详解 Kubernetes的资源控制器ReplicationController(RC)、ReplicaSet(RS)、Deployment(Deploy)详解与示例 阅读详情

Pod的资源控制器类型

  • Pod类型:
    • 自主运行的Pod(静态Pod)
    • 管理器运行的Pod(动态Pod)

管理器的作用:通过标签绑定Pod,并进行管理;

管理副本数量;

Pod的生命周期就是调度、启动、成功、终止、删除;

控制器类型:

1.ReplicationController(RC)/ReplicaSet(RS)

  • 副本控制器:动态的控制Pod的数量
  • RS和RC功能一致,增加selector集合选择器
  • 很少独立使用,而是被其他管理器调用

vim rs.yaml

apiVersion: apps/v1

kind: ReplicaSet

metadata:

   name: myweb

spec:

  replicas: 3

  selector:

    matchLabels:

      aihao: haha

  template:

    metadata:

      labels:

        aihao: haha

    spec:

      containers:

        - name: nginx

          image: 192.168.57.200:8099/library/nginx:1.21

          imagePullPolicy: IfNotPresent

          ports:

          - containerPort: 80

当我们定义了副本数量之后,系统始终会保持这个数量,多删少建。

通过kubectl get pod --show-labels 来查看我们 Pod 的标签。

通过kubectl label pod <Pod名称> <新的标签> --overwrite=True 修改标签

2.Deployment

  • 实现业务的部署,部署无状态服务
  • 控制副本数量,实现扩容和缩容
  • 控制容器的镜像版本,实现升级和回滚

vim deploy.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  name: my-nginx

spec:

  selector:

    matchLabels:

      app: web-nginx

  replicas: 3

  template:

    metadata:

      labels:

        app: web-nginx

    spec:

      containers:

        - name: web-nginx

          image: 192.168.57.200:8099/library/nginx:1.21

          imagePullPolicy: IfNotPresent

          ports:

          - containerPort: 80

kubectl create -f deploy.yaml --record

# --record参数可以记录命令,我们可以很方便的查看每次revision的变化,这个在生产中作为资源创建更新用来回滚的重要标记,强烈建议在生产中操作时都加上这个参数

扩容:kubectl scale deployment my-nginx --replicas=5

缩容:kubectl scale deployment my-nginx --replicas=2

查看nginx的版本:kubectl exec <Pod-name> -it -- nginx -v

升级:kubectl set image deployment/my-nginx web-nginx=nginx:1.24(都会升级)

回滚:kubectl rollout undo deployment --to-revision=1(Pod名称会变化)

查看deployment的历史记录:kubectl rollout history deployment my-nginx

清理 Policy :

可以通过设置 spec.revisonHistoryLimit 项来指定 deployment 最多保留多少 revision 历史记录。默认的会保留所有的 revision,如果将该项设置为 0,Deployment 就不允许回退了。

3.DaemonSet

  • 在每个Node节点上自动部署Pod
  • 例如:K8s监控、网络插件

vim daemonset.yaml

apiVersion: apps/v1

kind: DaemonSet

metadata:

  name: deamonset         #daemonset名称

  labels:

    app: daemonset

spec:

  selector:

    matchLabels:

      name: deamonset

  template:

    metadata:

      labels:

        name: deamonset

    spec:

      containers:

      - name: daemonset

        image: 192.168.57.200:8099/library/nginx:1.21

适用场景:

1. 日志收集和监控:可以在每个节点上运行一个 Fluentd、Fluent Bit 或者 Prometheus 代理来进行日志收集和监控。

2. 网络代理:如 Cilium、Flannel 或 Calico 可能需要在每个节点上运行,以便管理 Pod 之间的网络通信。

3. 存储:如 GlusterFS 或 Ceph 也需要在每个节点上运行一定的存储代理,以便提供存储解决方案。

4. 安全代理:如 Istio Sidecar 可以通过 DaemonSet 确保每个节点上至少有一个实例来保障网络安全。

查看 DaemonSet 的状态:kubectl get daemonset <daemonset-name>

获取详细信息:kubectl describe daemonset <daemonset-name>

通过运行 DaemonSet,您可以确保在集群中每个节点上都运行了必要的服务或代理,从而增强了集群的功能和安全性。

4.StateFulSet(StS)

  • 用户部署有状态服务
  • Pod的名称唯一且有序
  • 适合部署数据库一类的容器

StatefulSet是由什么组成的?

·Headless Service:用来定义pod网路标识,生成可解析的DNS记录;不分配clusterIP,可以通过解析service的DNS,返回所有Pod的dns和ip地址

·StatefulSet:管理pod的

·volumeClaimTemplates:存储卷申请模板,创建pvc,指定pvc名称大小,自动创建pvc,且pvc由存储类供应。

StatefulSet使用场景?

·稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于 PVC 来实现。

·稳定的网络标识符,即 Pod 重新调度后其 PodName 和 HostName 不变。

·有序部署,有序扩展,基于 init containers 来实现。

·有序收缩。

5.Job与cronJob

  • Job是一次性任务,控制Pod运行成功后自动销毁
  • cronJob:crontab语法“分时日月周”设置周期执行Pod

vim job.yaml

apiVersion: batch/v1

kind: Job

metadata:

  name: job

spec:

  template:    #格式同Pod

    metadata:

      name: job

    spec:

      containers:

      - name: job

        image: 192.168.57.200:8099/library/perl:latest

        command: ["/bin/sh", "-c", "ls && pwd"]

      restartPolicy: Never   #仅支持 Never 或 OnFailure

--------------------------------------------------------------------------------------------------------------------------

vim cronjob.yaml

apiVersion: batch/v1

kind: CronJob

metadata:

  name: hello

spec:

  schedule: "*/1 * * * *" #调度,必需字段,指定任务运行周期,格式同 Cron

  jobTemplate:  #Job 模板,必需字段,指定需要运行的任务,格式同 Job

    spec:

      template:   #格式同Pod

        spec:

          containers:

          - name: hello

            image: 192.168.57.200:8099/library/nginx:1.21

            args:

            - /bin/sh

            - -c

            - date; echo Hello from the Kubernetes cluster

          restartPolicy: OnFailure  #仅支持 Never 或 OnFailure

6.Horizontal Pod Autoscaling

  • 水平Pod自动扩缩容管理器,简称HPA
  • 根据CPU占有率来决定是否扩缩容
  • 设置阈值:Pod的最大值和最小值

# 1.首先用web的yaml配置并增加资源分配配置增加

vim web.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

  labels:

    app: web

  name: web

  namespace: default

spec:

  replicas: 1

  selector:

    matchLabels:

      app: web

  template:

    metadata:

      labels:

        app: web

    spec:

      containers:

      - image: nginx:1.21.6

        name: nginx

        resources:

          limits:   # 因为我这里是测试环境,所以这里CPU只分配50毫核(0.05核CPU)和20M的内存

            cpu: "50m"

            memory: 20Mi

          requests: # 保证这个pod初始就能分配这么多资源

            cpu: "50m"

            memory: 20Mi

# 更新web资源:

kubectl  apply -f web.yaml

# 创建hpa:

kubectl  autoscale deployment web --max=3 --min=1 --cpu-percent=50

# 正确的 Metrics Server 安装步骤总结:

1. 下载官方配置文件

wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server.yaml

2. 修改镜像地址为国内源

sed -i 's|image: registry.k8s.io/metrics-server/metrics-server:v0.8.0|image: registry.aliyuncs.com/google_containers/metrics-server:v0.8.0|g' metrics-server.yaml

3. 编辑配置文件添加 TLS 参数

vim metrics-server.yaml

在 Deployment 的 args 部分添加一行:

- --kubelet-insecure-tls

4. 应用配置

kubectl apply -f metrics-server.yaml

5. 验证安装

# 检查 Pod 状态(等待变为 1/1 Running)

kubectl get pods -n kube-system -l k8s-app=metrics-server

# 测试功能

kubectl top nodes

kubectl top pods

# 可以看到相关的hpa信息(K8s上metrics服务收集所有pod资源的时间间隔大概在60s的时间)

kubectl get hpa -w

NAME   REFERENCE        TARGETS   MINPODS   MAXPODS   REPLICAS   AGE

web      Deployment/web       0%/50%           1                  3                    1          21m

# 设置Service,实现负载均衡的效果

kubectl expose deployment web --port=80 --target-port=80 --name=web

# 查看Service IP

kubectl get svc

NAME         TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE

kubernetes   ClusterIP   10.96.0.1                 <none>        443/TCP     7d

web            ClusterIP   10.102.134.29            <none>        80/TCP      8s

# 启动一个临时pod,来模拟大量请求

kubectl run -it --rm busybox --image=registry.cn-shanghai.aliyuncs.com/acs/busybox:v1.29.2 -- sh

If you don't see a command prompt, try pressing enter.

/ # 输入exit,然后替换成自己IP测试,记得退出不然会一直循环

while :;do wget -q -O- http://10.102.134.29;done

# 查看相关的hpa信息,可以看到,在业务流量高峰下去后,HPA并不急着马上收缩pod数量,而是等待5分钟后,再进行收敛,这是稳妥的作法,是k8s为了避免频繁增删pod的一种手段

kubectl get hpa -w

NAME   REFERENCE        TARGETS   MINPODS   MAXPODS   REPLICAS   AGE

web     Deployment/web        0%/50%          1                  3                   1            35m

web     Deployment/web       100%/50%       1                  3                    1           37m

web     Deployment/web      100%/50%        1                  3                    2           38m

web     Deployment/web       86%/50%         1                  3                    3           39m

web     Deployment/web        0%/50%          1                  3                    3           41m

web     Deployment/web        0%/50%          1                   3                    1          44m

Kubernetes K8S之资源控制器Daemonset详解 Kubernetes的资源控制器Daemonset详解与示例 阅读详情

相关推荐

(k8s)Kubernetes 资源控制器关系图

资源关系图

半条虫 免费软件发布博客 671

(K8s入门到精通) 09 pod容器 start stop 资源控制器

创建成功了,进入到容器看一下,日志 重点关注pod 的状态 资源控制器 RS管理pod selector是标签,根据标签选择控制pod deployment 通过rs 管理pod,非常重要 滚动更新和回滚 ds 确保每个节点node 有且仅有一个pod 副本 有状态服务 statefulset 需要借助存储 PVC HPA 基于指标扩容和收缩 逐一实现 ...

面朝大海,春暖花开 575

Kubernetes K8S之资源控制器StatefulSets详解

Kubernetes的资源控制器StatefulSet详解与示例

踏歌行的专栏 2011

k8s控制器

k8s控制器

qq_37705525的博客 483

Kubernetes K8S之资源控制器Job和CronJob详解

Kubernetes的资源控制器Job和CronJob详解与示例

踏歌行的专栏 2346

Kubernetes集群常用资源控制器基本操作(四)

kubernetes基本资源介绍 1.Namespace命名空间 namespace是kubernetes中非常重要的资源,它的作用是用来实现多套环境的资源隔离或者多租户的资源隔离 默认情况下,kubernetes集群中所有的pod都是可以相互访问的,但是实际中,可能不想让两个pod之间进行互相访问,那此时就可以将两个pod划分到不同的namespace下 k8s通过将集群内部资源分配到不同的namespace中,可以形成逻辑上的分组 可以通过kubernetes中的授权机制,将不同的namespace交

江晓龙的博客 1万+

Metacontroller API全解析:CompositeController配置与使用详解

Metacontroller是一个轻量级的Kubernetes控制器即服务解决方案,其中CompositeController是其核心API之一,专为管理由多个子对象组成的复合资源而设计。本文将详细解析CompositeController的配置方法和使用技巧,帮助开发者快速构建自定义Kubernetes控制器。 ## CompositeController核心概念 CompositeCont

gitblog_00276的博客 324

FPGA图像处理入门 ZYNQ7020 图像中值膨胀腐蚀滤波

图像处理的三种滤波 中值滤波应用较为广泛 综合膨胀和腐蚀可以实现边缘检测。

Coast_的博客 715

kubernetes(k8s)五种类型资源控制器

文章目录资源控制器一、资源控制器概述1、控制器的类型二、资源控制器的作用及使用【Deployment】1、Deployment的概述2、Deployment控制器的测试使用3、Deployment(查看详细信息)4、【查看控制器的历史版本,滚动更新以此为基础】【SatefulSet】1、SatefulSet概述 资源控制器 一、资源控制器概述 Kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制Pod的具体状态和行为 控制器又被称为工作负载,pod通过控制器实现应

欢迎光临本栈——“码栈仙”,一个架构师的脑洞收容所。 这里不生产代码,只做bug的搬运工。 3714

告别臃肿VS!仅用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境

本文详细介绍了如何仅使用Visual Studio 2022 Build Tools为Qt 5.12.12配置MSVC2017开发环境,避免安装臃肿的完整VS。通过精准选择组件、配置Qt Creator编译器和优化Kit设置,实现高效、精简的Windows平台Qt开发环境搭建,特别适合追求性能和资源优化的开发者。

weixin_30340617的博客 349

【crawler笔记】R语言简单动态网页爬虫(rvest包)示例

1、爬虫目标 大家普遍认为Python的爬虫功能强大,但在解决动态加载或者登陆网站时,Python存在一定困难的,相对于一些普通爬虫,使用R语言会更方便。 以https://www.thepaper.cn/为例,爬取首页的新闻(标题、内容、时间),主要采用的是动态网页中常用的httr包。 初始学习时,参考了B站《20分钟入门基于R语言的网络爬虫_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili》的视频,但代码运行出现了报错,所以在原代码上做了修改。 2、代码分析及报错修改 library(rv

seeyouer1205的博客 3275

K8S资源控制器管理

这一节,我们从 Job实践、CronJob实践、小结 三个方面来学习。这一节,我们从 资源管理、对象解读、小结 三个方面来学习。这一节,我们从 标签定位、命令实践、小结 三个方面来学习。这一节,我们从 属性解读、简单实践、小结 三个方面来学习。这一节,我们从 属性解读、简单实践、小结 三个方面来学习。这一节,我们从 属性解读、简单实践、小结 三个方面来学习。这一节,我们从 属性解读、简单实践、小结 三个方面来学习。这一节,我们从 属性解读、简单实践、小结 三个方面来学习。

m0_46690280的博客 930

AtmelStudio 7 ASF库学习笔记一:新建工程、配置时钟、下载程序和查看官方例程

由于需要学习一下atmel的atsaml 系列,使用AtmelStudio 7开发,之前主要用STM32,现在看到Atmel的库函数,其实是有些类相似的。 ASF3的库对应ST的标准库。ASF4对应ST的HAL库,Ateml Start对应STM32CubeMX。但在这里还是用ASF3来开发,因为Ateml Start还不支持我的这个芯片,而且和STM32的HAL库类似,ASF4为了好移植都是底...

yxy244的博客 8655

快速入门Kubernetes(K8S)——资源控制器

一、什么是控制器 Kubernetes 中内建了很多 controller(控制器),这些相当于一个状态机,用来控制 Pod 的具体状态和行为 二、控制器类型 ReplicationController 和 ReplicaSet Deployment DaemonSet StateFulSet Job/CronJob Horizontal Pod Autoscaling 2.1 ReplicationController 和 ReplicaSet ReplicationController(RC)用

大数据记录 3618

vue3+ts项目里如何使用状态管理pinia以及数据持久化

vue3 pinia 数据持久化

ICUiseeyou的博客 8794

电价预测的Transformer实战:从注意力机制到超长序列建模

本文深入探讨了Transformer模型在电价预测领域的实战应用,对比了其与LSTM在处理长序列依赖和误差累积问题上的优劣。文章详细解析了自注意力机制的原理,并提供了处理超长序列的位置编码方法、构建专用预测模型的完整PyTorch代码,以及防止信息泄露的关键技巧。通过实战对比,展示了Transformer在并行计算、长距离建模和预测精度上的显著优势,并分享了应对极端波动和提升模型效率的高级优化策略。

f6g7h8i9j的博客 540

【云原生|Kubernetes】14-DaemonSet资源控制器详解

​ 在 Kubernetes 中,DaemonSet 是一种用于在节点上运行指定的 Pod 的控制器(Controller)。与 ReplicaSet 或 Deployment 不同,DaemonSet 不是为了扩展 Pod 数量而创建的,而是为了在每个节点上运行一个实例或多个实例的 Pod。​ DaemonSet 通常用于在 Kubernetes 集群中运行一些系统级别的服务或者网络代理,例如日志收集器、监控代理、网络插件等。

qq_43714097的博客 1780

Agentic AI商业化落地指南:提示工程架构师的7步优化法

Agentic AI(具备自主感知、决策与行动能力的智能体系统)是未来AI商业化的核心方向,其价值在于将大模型的“认知能力”转化为“实际行动”,解决复杂商业场景中的自动化与个性化需求。而提示工程(Prompt Engineering)作为连接人类意图与智能体行为的“翻译器”,直接决定了智能体的可控性、效率与用户体验,是Agentic AI商业化落地的关键支撑。本文结合第一性原理与工程实践,提出提示工程架构师的“7步优化法”,覆盖从“商业目标定义”到“规模化推广”的全流程。通过理论框架推导架构设计拆解。

AI架构全栈开发实战笔记 1万+

第三课:尚硅谷K8s学习-k8s资源控制器学习

第三课:尚硅谷K8s学习-k8s资源控制器 tags: golang 2019尚硅谷 categories: K8s 资源控制器 RS/Deployment DaemonSet Job/CronJob 文章目录第三课:尚硅谷K8s学习-k8s资源控制器第一节 资源控制器-控制器说明1.1 相关概念介绍1.2 控制器介绍第二节 RS与RC与Deployment2.1 RS与RC与Deployment关联2.2 RS创建模板的(案例)2.3 Deployment模板的案例2.4 Deployment实

QnHyn 562

学Simulink--基础微电网场景实例:基于Simulink的微电网并网/孤岛无缝切换控制仿真

本文完成了基于 Simulink 的微电网并网/孤岛无缝切换控制仿真,实现了:✅ 构建含双模式逆变器的微电网模型✅ 实现预同步 + Stateflow 逻辑的智能切换✅ 验证计划与非计划切换的性能边界✅ 证明“无缝”在工程上是可实现的。

amy_mhd的博客 101

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

kubernetes 资源控制器

kubernetes 资源控制器

feiyuchuixue的博客 388

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

K8s学习

所有交互必经 API Server:用户、组件、第三方工具都通过 API 读写集群状态。控制循环的核心枢纽:控制器通过 API 感知 “期望状态”,调谐 “实际状态”。扩展性的基础:CRD 和 Operator 基于 API 扩展,让 k8s 适配复杂场景。所有组件围绕 API 协同,etcd 持久化状态,控制器维持秩序,kubelet 执行落地。

2501_91269248的博客 1021

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Kubernetes(k8s)资源控制器 RS、Deployment详细介绍

RC (ReplicationController )主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数 。即如 果有容器异常退出,会自动创建新的Pod来替代;而如果异常多出来的容器也会自动回收 Kubernetes 官方建议使用 RS(ReplicaSet ) 替代 RC (ReplicationController ) 进行部署,RS 跟 RC 没有 本质的不同,只是名字不一样,并且 RS 支持集合式的 selector rs这个创建pod有点慢查看pod的标签 修改pod的标

别来沾边儿 384

Kubernetes 各类资源控制器详解及生产环境应用场景

掌握各类 K8s 控制器的特点与适用场景,是搭建高可用、弹性伸缩、稳定运行的 Kubernetes 集群的基础。在实际开发与运维过程中,根据服务特性灵活选择控制器,能有效提升系统稳定性和资源利用效率。如果你对某一类控制器有实际应用经验或踩坑经历,欢迎评论交流!

2201_75969757的博客 407

【云原生|Kubernetes】13-Deployment资源控制器详解

kubernetes中有很多资源控制器,这些资源控制器我们只说一些重要且常用的。在介绍Deploymen之前,我们会逐个介绍这些控制器。​ Pod控制器是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源。ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性一个 Deployment 为Pod和ReplicaSet。

qq_43714097的博客 3180

Kubernetes(K8S第三部分之资源控制器)

DaemonSet确保全部(或者一些)Node上运行一个Pod副本。当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收,删除DaemonSet将会删除它创建的所有Pod,使用DaemonSet的一些典型用法。1,运行集群存储daemon,例如在每个Node上运行glusterd,ceph2,在每个Node上运行日志收齐daemon,例如fluentd,logstash。

weixin_54689506的博客 1227
上一篇: 亲和调度和资源管理器
下一篇: K8s网络之Service
chen_note
博客等级 码龄1年 251粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值