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
更新镜像
滚动更新
#镜像更新(目前还不支持直接更新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
基于删除更新
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信息