k8s-资源调度

deployments

滚动更新

注:是滚动更新 不是扩容

只有修改了deployment配置文件中的template中的属性后,才会分触发更新操作
如使用

kubctl edit deploy {name}

查看滚动更新情况

1.查看状态

kubectl rollout status  deploy {deployName}

2.查看过程

kubectl describe deploy {deployname}

1.会创建一个新的rs

1.新的rs启动一个新的pod

2.移除一个旧的rs的pod

依次循环 参考:https://www.cnblogs.com/LQBlog/p/17668320.html#autoid-1-1-0

并行更新

当滚动更新进行中,如果还有修改tempate

则会删除更新中的rs,执行新的rs更新

版本回退

前提:需要指定 .spec.revisonHistoryLimit 保留多少个历史版本 如果设置为0则不会保留

1.查看历史版本

kubectl rollout history deployment/${deployname}

2.查看版本修改记录

kubectl rollout history deployment/${deployname} --revision=${version}

3.回退到上一个版本

kubectl rollout undo deployment/${deployname} 

或回退到指定版本

kubectl rollout undo deployment/${deployname}  --to-revision=2

4.查看回退状态

kubectl rollout status deployment/${deployname} 

扩容缩容

方式1:直接编辑deploy

kubectl edit deploy {deployname}  修改replicas

方式2  

kubectl scale -help 查看更多 下面是扩展deploy方式
kubectl scale deploy --replicas=3 nginx -n sunlogin --context=sunlogin-k8s-context

暂停与恢复 

因为每次改了配置文件会立即生效可以先暂停

kubectl rollout pause deploy {deployname}

改完之后执行

kubectl rollout resume deploy {deployname}

StatefulSet(有状态应用)

查看列表

kubectl get sts(statefulset简写方式)

查看服务列表

kubectl get svc

查看详情

kubectl describe pvc {名字}

扩容缩容 

kubectl scale sts {name} --replicas=5

更新镜像

滚动更新

StatefulSet也可以采用滚动更新策路,同样是修改pod,template属性后会触发更新,但是由于pod是有序的,在,StatefulSet中更新时是基于pod的顺序倒序更新的

#镜像更新(目前还不支持直接更新image,需要patch来间接
实现)
kubectl patch sts web--type='json'-p='[("op":"replace","path":"/spec/template/spec/containers/0/image","value":"nginx:1.9.1")

灰度更新

1.只部署部分服务,部分用户访问到最新服务。确认没问题再利用滚动更新 更新所有

也叫金丝雀部署

updatestrategy
  rollingUpdate:
     partition:0
  type:RollingUpdate
利用滚动更新中的partition属性,可以实现简易的灰度发布的效果
例如我们有5个pod,如果当前partition设置为3,那么此时滚动更新时,只会更新那些序号>=3的p0d
利用该机制,我们可以通过控制partition的值,来决定只更新其中一部分pod,确认没有问题后再主键增大更新的pod数量,最终实现全部pod更新

基于删除更新

updatestrategy
      type:OnDelete

之前更新yml就会更新,基于删除更新删除po才会更新

删除

#别賒statefulset和Head1 less service
#级联除:删除除statefulset时会可时别除pods
kubectl delete statefulset web
#非级联别除:别除statefulset时不会别除pods,别除sts后,pod
kubectl deelte sts web --cascade=false-
#删除service
kubectl delete service nginx

DaemonSet

为每个节点都部署一个守护进程做一些辅助工作,比如日志收集,监控,数据清理等。

如何选择节点

DaemonSet会忽略Node的unschedulable状态,有两种方式来
指定Pod只运行在指定的Node节点上:
nodeSelector:只调度到匹配指定label的Node上 (选择满足节点的标签)
nodeAffinity:功能更丰富的Node选择器,比如支持集合
操作
podAffinity:调度到满足条件的Pod所在的Node上

yml模版

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: example-daemonset
  labels:
    app: example
spec:
  selector:
    matchLabels:
      app: example #匹配的pod 满足条件的创建守护进程
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
      - name: example-container
        image: example-image:latest
        ports:
        - containerPort: 80
      hostNetwork: true

HPA自动缩容扩容

通过检测我们的cpu和内存使用情况完成自动缩容和扩容

控制管理器每隔30s(可以通过-horizontal-pod-autoscaler-sync-period修改)查询metrics的资源使用情况
支持三种metrics类型
1.预定义metrics(比如Poo的CPU)以利用率的方式计算
2自定义的Pod metrics,以原始值(raw value)的方式计算
3.定义的object metrics
支持两种metricsi查询方式:Heapsteri和白定义的REST AP可
支持多metrics

使用例子

1.前提是需要配置资源

            requests:
              cpu: %REQUEST_CPU%     #CPU申请变量
              memory: %REQUEST_MEM%  #内存申请变量
            limits:
              cpu: %LIMITS_CPU%     #CPU限制变量
              memory: %LIMITS_MEM%  #内存限制变量
1.先准备一个好一个有做资行限制的deployment
2,执行命令kubectl autoscale deploy <deploy-.name>-cpu -percent=20 --min=2 --max=5 #cpu达到20% 当前节点最小保持2个 最多扩容到5个
3.通过kubectl get hpa可以获取HPA信息

 

 

posted @ 2023-11-12 16:55  意犹未尽  阅读(13)  评论(0编辑  收藏  举报