当前位置: 首页 > news >正文

K8s资源控制器的实战

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

http://www.dtcms.com/a/594192.html

相关文章:

  • ppt超链接网站怎么做创建网站的六个步骤
  • Spring AI Alibaba脉络:企业级智能体框架
  • 网站建设一年多少钱贵阳小程序定制开发
  • 阿里云虚拟主机做淘客网站网页设计实训总结模板
  • 时序数据分析:Python爬取新浪财经频道新闻并绘制趋势图
  • 福州网站建设流程深圳公共资源交易中心
  • 东莞网站公司哪家好当下 如何做网站赚钱
  • 5.会话列表测试用例
  • 咨询公司网站设计电商网站商品中心设计方案
  • 电子商务网站版面布局天津北京网站建设公司哪家好
  • Java基础——集合进阶8
  • README查看会议信息
  • 云校网站建设网站优化排名易下拉系统
  • 基础算法精讲 09|递归|操作型|计算型
  • OpenCSG 2025年10月月报:战略合作、学术突破、H200上新与社会责任
  • Lua基本语法
  • 关于网站建设的请示范文东莞网站优化一般多少钱
  • CI/CD 全流程指南:从概念到落地的持续交付实践
  • 软件生产的“高速公路网”:深入浅出理解CI/CD的核心流程
  • 网站列表设计东城企业网站建设
  • 医学类数据集目标检测分割分类数据集汇总介绍
  • 2017网站建设傻瓜式网站开发
  • 开发环境搭建之JDK11+maven3.9.8+tomcat9安装
  • phpcmsv9手机网站模板wordpress file upload
  • Socket编程核心API详解
  • 网站关键词排名怎么提升app开发外包要多少钱
  • 使用 Node.js 开发 Telegram Bot 完整指南
  • 招聘网站代理做网站提供服务器吗
  • AI宠物的情感交互设计与市场反响
  • 【C/C++】C++11 类的 默认构造函数 “= default” 用法