资源调度

发布时间 2023-10-12 23:55:28作者: yifanSJ

一、Label 和 Selector

图片描述

一)标签(Label)

1、通过配置文件配置标签

在各类资源的 metadata.labels / spec.labels 中进行配置

apiVersion: v1
kind: Pod
metadata:
  name : nginx-po
  labels:
    type: app
    version: 1.0.0
  namespace: 'default'
spec:
  containers:

2、通过 kubectl 配置标签

a、临时创建 label
kubectl label po <资源名称> app=hello
b、修改已经存在的标签
kubectl label po <资源名称> app=hello2 --overwrite
c、查看 label
# selector 按照 label 单值查找节点
kubectl get po -A -l app=hello

# 查看所有节点的 labels
kubectl get po --show-labels

二)选择器(Selector)

1、配置文件

在各对象的配置 spec.selector 或其他可以写 selector 的属性中编写
例如:
spec:
  selector:
    matchLabels:
      app: nginx-deploy

2、kubectl

# 匹配单个值,查找 app=hello 的 pod
kubectl get po -A -l app=hello

# 匹配多个值
kubectl get po -A -l 'k8s-app in (metrics-server, kubernetes-dashboard)'
或 
# 查找 version!=1 and app=nginx 的 pod 信息
kubectl get po -l version!=1,app=nginx

# 不等值 + 语句
kubectl get po -A -l version!=1,'app in (busybox, nginx)'

二、Deployment(针对部署的无状态应用

一)功能

1、创建

# 创建一个 deployment
kubectl create deploy nginx-deploy --image=nginx:1.7.9

# 或执行
kubectl create -f xxx.yaml --record
--record 会在 annotation 中记录当前命令创建或升级了资源,后续可以查看做过哪些变动操作。

# 查看部署信息
kubectl get deployments

# 查看 rs
kubectl get rs

# 查看 pod 以及展示标签,可以看到是关联的那个 rs
kubectl get pods --show-labels

2、滚动更新

多个滚动更新并行

3、回滚

4、扩容缩容

5、暂停与恢复

二)配置文件

apiVersion: apps/v1 # deployment api 版本
kind: Deployment # 资源类型为 deployment
metadata: # 元信息
  labels: # 标签
    app: nginx-deploy # 具体的 key: value 配置形式
  name: nginx-deploy # deployment 的名字
  namespace: default # 所在的命名空间
spec:
  replicas: 1 # 期望副本数
  revisionHistoryLimit: 10 # 进行滚动更新后,保留的历史版本数
  selector: # 选择器,用于找到匹配的 RS
    matchLabels: # 按照标签匹配
      app: nginx-deploy # 匹配的标签key/value
  strategy: # 更新策略
    rollingUpdate: # 滚动更新配置
      maxSurge: 25% # 进行滚动更新时,更新的个数 最多可以超过 期望副本数 的个数/比例
      maxUnavailable: 25% # 进行滚动更新时,最大 不可用更新比例,表示在所有副本数中,最多 可以有 多少个 不更新成功。比如有10个要更新,最多2.5个没更新成功。
    type: RollingUpdate # 更新类型,采用滚动更新
  template: # pod 模板
    metadata: # pod 的元信息
      labels: # pod 的标签
        app: nginx-deploy
    spec: # pod 期望信息
      containers: # pod 的容器
      - image: nginx:1.7.9 # 镜像
        imagePullPolicy: IfNotPresent # 拉取策略
        name: nginx # <font color="red">**容器名称**</font>
      restartPolicy: Always # 重启策略
      terminationGracePeriodSeconds: 30 # 删除操作最多宽限多长时间

三、StatefulSet(针对部署的有状态应用

一)功能

创建
扩容缩容
镜像更新
RollingUpdate
灰度发布
OnDelete
删除
删除 pvc

二)配置文件

四、DaemonSet

一)配置文件

二)指定 Node 节点

nodeSelector
nodeAffinity
podAffinity

三)滚动更新

五、HPA 自动扩/缩容

一)开启指标服务

二)cpu、内存指标监控

三)自定义 metrics