【Kubernetes资源篇】Replicaset控制器入门实战详解

一、ReplicaSet 控制器介绍

官方中文参考文档:

ReplicaSet是k8s中一种资源对象,简写 rs用于管理Pod副本数量和健康状态,在spec.replicas 字段中可以定义Pod副本数量,ReplicaSet会始终保持Pod在指定数量,当发现Pod数量大于副本数量时,会移除多出的Pod,当发现Pod小于副本数量会自动创建Pod,使其始终维护在副本数量,此外,ReplicaSet还会监控Pod的健康状态,如果某个Pod出现故障,ReplicaSet会自动替换它

ReplicaSet特点如下:

  • 自动化管理:ReplicaSet可以自动地创建、删除和更新Pod副本,以确保指定数量的Pod副本一直在运行。
  • 健康检查:ReplicaSet会定期检查Pod的健康状态,并根据需要重启或替换不健康的Pod。
  • 水平扩展:通过增加或减少Pod副本的数量,可以实现应用程序的水平扩展,以满足不同的负载需求。
  • 选择器:ReplicaSet使用标签选择器来选择要管理的Pod副本。
  • 有状态管理:ReplicaSet可以管理有状态的应用程序,例如数据库,以确保数据的一致性和可用性。
  • 更新:不支持滚动更新,需要手动删除旧Pod实现更新

ReplicaSet常用字段解释:

apiVersion: apps/v1      # RS版本
kind: ReplicaSet         # 定义RS资源类型  
metadata:                # RS元数据
  name: nginx-replicaset # RS名称
  namespace: default     # RS命名空间
  labels:                # RS标签
    app: web
    env: uat
spec: 
  replicas: 3            # 关联Pod副本数量
  selector:              
    matchLabels:         # 关联具有app=web的Pod
      app: web
  template:              # Pod模板
    metadata:            # Pod元数据
      namespace: default # Pod命名空间
      labels:            # Pod标签
        app: web
        env: uat
    spec:
      containers:        # Pod定义容器
      - name: web-nginx  # 容器名称
        image: nginx     # 容器使用镜像
        imagePullPolicy: IfNotPresent  # 容器镜像下载策略
        ports:         
        - containerPort: 80            # 容器内端口

二、ReplicaSet案例

1、Pod副本扩缩容案例

通过修改 spec.replicas 值来进行动态扩容、缩容,使用 nginx镜像定义副本数量 3,并添加了一些必要的探测,如下:

cat replicaset.yaml 

---
apiVersion: apps/v1     
kind: ReplicaSet 
metadata:                
  name: nginx-replicaset
  namespace: default   
  labels:               
    app: web
spec: 
  replicas: 3           
  selector:              
    matchLabels:       
      app: web
  template:             
    metadata:            
      namespace: default 
      labels:            
        app: web
    spec:
      containers:       
      - name: web-nginx 
        image: nginx:1.18.0
        imagePullPolicy: IfNotPresent  
        ports:         
        - containerPort: 80 
        startupProbe:
          tcpSocket:
            port: 80
        livenessProbe:
          httpGet:
            path: /index.html
            port: 80
        readinessProbe:
          httpGet:
            path: /index.html
            port: 80

执行YAML文件:

kubectl apply -f replicaset.yaml 

查看Pod、RS状态,是否创建且正常:

kubectl get rs,pod -l app=web

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZNCdEd20-1685257135299)(D:\MD归档文档\IMG\image-20230528133211004.png)]

当我们删除Pod时,RS会自动为我们创建出来,RS会始终维护Pod数量为3 删除命令如下:

kubectl delete pod nginx-replicaset-7mh2r

动态扩容副本数量,更新副本数量为5:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2AHacQTU-1685257135300)(D:\MD归档文档\IMG\image-20230528133458570.png)]

重新 apply 一下 YAML文件:

kubectl apply -f replicaset.yaml 

验证,Pod数量:

kubectl get pod -l app=web

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E4AEtJpV-1685257135301)(D:\MD归档文档\IMG\image-20230528133646092.png)]

缩容也是同样操作,更改replicas数值重新apply一下即可,此处省略。

2、Pod更新版本案例

所需镜像下载地址

ReplicaSet,不支持动态更新,只能是通过删除旧Pod方式,案例演示如下:

使用 web:v1 镜像 创建ReplicaSet资源

cat replicaset.yaml 
---
apiVersion: apps/v1     
kind: ReplicaSet 
metadata:                
  name: nginx-replicaset
  namespace: default   
  labels:               
    app: web
spec: 
  replicas: 3          
  selector:              
    matchLabels:       
      app: web
  template:             
    metadata:            
      namespace: default 
      labels:            
        app: web
    spec:
      containers:       
      - name: web-nginx 
        image: web:v1     # V1 镜像
        imagePullPolicy: IfNotPresent  
        ports:         
        - containerPort: 80 

执行文件:

kubectl apply -f replicaset.yaml
kubectl get pod -l app=web

查看PodIP地址,并访问:

kubectl describe pod nginx-replicaset-wht6q|grep IP

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xeRqOgj6-1685257135302)(D:\MD归档文档\IMG\image-20230528144500659.png)]

根据以上更新使用 web:v2 镜像:

编辑上面 YAML 文件 只更改镜像版本即可如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uWGTenzq-1685257135302)(D:\MD归档文档\IMG\image-20230528144647385.png)]

执行文件:

kubectl apply -f replicaset.yaml
kubectl get pod -l app=web

注意,此时curl Pod返回内容依旧是 旧版Pod内容,需要手动删除旧Pod资源,RS会自动创建Pod,自动创建的Pod才会使用新的镜像

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pXMdKw2n-1685257135302)(D:\MD归档文档\IMG\image-20230528145222569.png)]

删除Pod,根据自己当前环境pod名称进行删除:

kubectl delete pod nginx-replicaset-ff5pl nginx-replicaset-rvr9k nginx-replicaset-wht6q

删除后,RS会自动创建,查看新的Pod:

kubectl get pod -l app=web

访问Pod:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lfXPHJsB-1685257135303)(D:\MD归档文档\IMG\image-20230528145620136.png)]

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
离散LQR(线性二次调节)控制器是一种广泛应用于控制系统的优化控制方法。它通过在系统状态空间中定义一个成本函数,并最小化这个成本函数来设计控制器,以实现系统的性能优化。 离散LQR控制器的设计过程包含以下几个步骤: 1. 系统建模:首先,需要根据实际的控制系统确定系统的数学模型,并将其转换为状态空间表示。一般来说,这个模型可以使用差分方程或差分方程组来描述。 2. 定义成本函数:然后,需要定义一个成本函数,用来评估系统的性能。成本函数可以包括系统状态、控制输入或者其他相关指标。一般来说,成本函数是由系统性能指标和权重矩阵构成的二次型函数。 3. 计算最优控制器:通过解决离散时不变的Riccati方程,可以得到最优的状态反馈增益矩阵。这个增益矩阵可以将系统状态与控制输入相联系,以实现对系统的最优控制。 4. 性能评估:通过模拟系统的行为,可以评估控制器的性能。这可以通过计算成本函数的值来实现,从而比较不同控制器的优劣。 离散LQR控制器的优点是:它能够优化系统的性能,使得系统的稳定性、响应速度和鲁棒性都能得到改善。此外,离散LQR控制器的设计方法相对简单,容易实现和调整。 然而,离散LQR控制器也存在一些限制。首先,它要求系统的模型是线性的,并且能够被准确地表示为状态空间方程。其次,离散LQR控制器也对系统的测量精度和噪声等因素比较敏感。 总之,离散LQR控制器是一种基于状态反馈的优化控制方法,适用于线性离散系统。它可以通过最小化成本函数,设计出最优的控制器,从而提高系统的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神奇的海马体

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值