Pod控制器
pod按创建方式分类自主式pod //kubernetes直接创建出来的pod,删除之后不会重启 控制器创建的pod //通过控制器创建的pod,删除之后还会重建
pod控制器分类ReplicationController //已废弃,由ReplicaSet替代 ReplicaSet //保证指定数量的Pod运行,支持pod数量变更,镜像版本变更 Deployment //控制ReplicaSet来控制Pod,支持滚动升级,版本回退 Horizontal Pod Autoscaler //根据集群负载自动调整Pod数量,实现消峰填谷 DaemonSet //在集群中的指定Node上都运行一个副本,一般用于守护进程类的任务 Job // 创建出来的pod,只有完成任务就立即退出,用于执行一次性任务 Cronjob //创建的pod会周期性的执行,执行周期性任务 StatefulSet //管理由状态应用
ReplicaSet(RS)
保证一定数量的pod能够正常运行,持续监听这些pod的运行状态
pod发生故障,就会重启或重建
支持pod数量的扩缩容和版本镜像的升级 apiVersion: apps/v1 kind: ReplicaSet metadata: name: pc-replicaset namespace: dev labels: controller: rs spec: replicas: 3 selector: matchLabels: app: nginx-pod matchExpressions: - {key:app, operator: In, values: [nginx-pod]} template: labels: app: nginx-pod spec: containers: - name: nginx image: nginx:1.17.1扩缩容 编辑yaml文件 kubectl edit rs pc-replicaset -n dev 修改spec.replicas的值 命令 kubectl scale rs pc-replicaset --replicas=2 -n dev 镜像升级 编辑yaml文件 kubectl edit rs pc-replicaset -n dev 修改spec.template.container.image的值 命令 kubectl set image rs pc-replicaset nginx=nginx:1.17.2 -n dev 删除ReplicaSet, 先replicas调整为0,删除所有pod后,再删除rs kubectl delete rs pc-replicaset -n dev 仅删除rs对象,不删除pod kubectl delete rs pc-replicaset -n dev --cascade=false 推荐 kubectl delete -f pc-replicaset.yaml
Deployment(Deploy)
解决服务编排的问题,
不直接管理pod,通过管理ReplicaSet来间接管理Pod支持ReplicaSet的所有功能 支持发布的停止和继续 支持版本滚动升级和版本回退apiVersion: apps/v1 kind: Deployment metadata: name: namespace: dev labels: controller: deploy spec: replicas: 3 revisionHistoryLimit: 3 //保留历史版本,默认是10 paused: false //暂停部署,默认是false progressDeadlineSeconds: 600 //部署超时时间,默认600s strategy: type: RollingUpdate //滚动更新 rollingUpdate: maxSurge: 30% //最大额外可以存在的副本数,可以为百分比,整数 maxUnavailable: 30% //最大不可用状态的Pod的最大值,可以为百分比,整数 selector: matchLabels: app: nginx-pod matchExpressions: - {key:app, operator: In, values: [nginx-pod]} template: metadata: labels: app: nginx-pod spec: containers: - name: nginx image: nginx:1.17.1 //创建deploy kubectl create -f pc-deployment.yaml --record=true kubectl get deploy pc-deployment -n dev kubectl get rs -n dev kubectl get pod -n dev //删除deploy kubectl delete -f pc-deployment.yaml
扩缩容kubectl scale deploy pc-deployment --replicas=5 -n dev kubectl edit deploy pc-deploy -n dev 修改replicas的值 kubectl get deploy pc-deployment -n dev kubectl get pods -n dev
镜像更新
重建更新strategy: type: Recreate //创建新pod,会杀掉已存在的pod 验证 kubectl set image deploy pc-deployment-recreate nginx=nginx:1.17.2 -n dev kubectl get pod -n dev -w
滚动更新(默认)strategy; type: RollingUpdate //滚动更新,删除一部分,重启一部分,新旧共存 RollingUpdate: maxSurge: //在升级过程中可以超过期望的Pod的最大数量 maxUnavailable: //在升级过程中不可用的Pod的最大数量 验证 kubectl set image deploy pc-deployment-recreate nginx=nginx:1.17.2 -n dev kubectl get pod -n dev -w
版本回退更新镜像以后,查看rs,旧的还存在,只是相关pod数量为0,产生新的rs,相关pod数量为3 kubectl get rs -n dev
kubectl rollout 版本升级相关功能kubectl rollout status 显示当前升级状态 history 显示升级历史记录 pause 暂停版本升级过程 resume 继续升级 restart 重启版本升级过程 undo 回滚到上一次版本,(--to-revision回滚到指定版本)kubectl rollout status deploy pc-deployment -n dev kubectl rollout history deploy pc-deployment -n dev //创建的时候需要 --record才能显示 //--to-revision=1 指定回退版本,不设置,返回上一版本 kubectl rollout undo deploy pc-deployment --to-revision=1 -n dev
金丝雀发布//更新deploy的版本,并暂停更新,老的rs-pod依旧存在,并产生一个新的rs-pod,不再发生变化 kubectl set image deploy pc-deployment nginx=nginx:v1.17.4 -n dev && kubectl rollout pause deploy pc-deployment -n dev //查看rs kubectl get rs -n dev //观察更新状态 kubectl rollout status deploy pc-deployment -n dev //没有问题,继续更新 kubectl rollout resume deploy pc-deployment -n dev
Horizontal Pod Autoscaler(HPA)
通过监测Pod的使用情况,实现Pod的自动调整
HPA可以获得Pod的利用率,和HPA中定义的指标对比,同时计算出需要
伸缩的具体值,实现Pod数量的调整。
追踪分析目标Pod的负载变化情况,来决定是否需要针对性的调整Pod
的副本数创建deployment kubectl run pc-deploy-hpa --image=nginx:1.17.1 --requests=cpu=100m -n dev kubectl apply -f pc-deploy-hpa.yaml 暴露service kubectl expose deployment pc-deploy-hpa --type=NodePort --port=80 -n dev kubectl get deploy,pod,svc -n dev kubectl apply -f pc-deploy-hpa.yaml 用postman对节点进行压测,分别打开三个终端,观察pod,hpa,deploy的变化
hpa配置项spec: minReplicas: 1 //最小副本数 maxReplicas: 10 //最大副本数 targetCPUUtilizationPercentage: 3 //cpu的占用率 scaleTargetRef: //设置deployment apiVersion: apps/v1 kind: Deployment name: pc-deploy-hpa
DaemonSet (DS)
保证集群中的每一台节点上都运行一个副本,一般用于日志收集,节点监控
Pod提供的功能每个节点都需要且只需要一个
每当向集群中添加一个节点时,指定的pod副本也将添加到该节点上
当节点从集群中移除时,Pod也就被垃圾回收了apiVersion: apps/v1 kind: DaemonSet metadata: name: //名称 namespace: dev labels: controller: DaemonSet spec: revisionHistoryLimit: 3 //保留历史版本 updateStrategy: type: RollingUpdate //滚动更新 rollingUpdate: maxSurge: 30% //最大额外可以存在的副本数,可以为百分比,整数 maxUnavailable: 30% //最大不可用状态的Pod的最大值,可以为百分比,整数 selector: matchLabels: app: nginx-pod matchExpressions: - {key:app, operator: In, values: [nginx-pod]} template: metadata: labels: app: nginx-pod spec: containers: - name: nginx image: nginx:1.17.1
测试kubectl apply -f pc-daemonset.yaml 查看 kubectl get ds pc-daemonset -n dev kubectl get pod -n dev 每个节点都会有一个pod
Job
批量处理短暂的一次性任务
每个任务仅运行一次
Job创建的pod执行成功时,Job将记录成功结束的pod数量
当成功结束的pod达到指定的数量时,Job将完成执行apiVersion: batch/v1 kind: Job metadata: name: //名称 namespace: dev labels: controller: Job spec: completions: //Job需要成功运行pod的数量,默认是1 parallelism: //Job在任一时刻应该并发运行pod的数量,默认是1 activeDeadlineSeconds: //Job可运行的时间期限,超过未结束,系统会终止 backoffLimit:6 //失败尝试次数 manualSelector: true // selector: //选择器,指定该控制器管理哪些pod matchLabels: app: counter-pod matchExpressions: - {key:app, operator: In, values: [counter-pod]} template: //pod模版 metadata: labels: app: counter-pod spec: restartPolicy: //只能设置Never或者OnFailure containers: - name: counter image: busybox:1.30 command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1]; do echo $i;sleep 3;done"] kubectl apply -f pc-Job.yaml kubectl get job -n dev -w kubectl get pod -n dev -w
CrobJob
定时job
Cronjob通过Job控制器,管理pod
Cronjob可以在特定的时间点反复去运行job任务apiVersion: batch/v1beta1 kind: CronJob metadata: name: //名称 namespace: dev labels: controller: cronjob spec: schedule: //cron格式的任务运行时间点, concurrencyPolicy: //并发执行策略,前一次任务未完成的情况下如何运行后一次任务 //Allow 允许jobs并发运行,默认 //Forbid 禁止并发运行,跳过下次 //Replace 下次替换当前任务 failedJobHistoryLimit: //为失败的任务执行保留的历史记录数,默认1 successfulJobHistoryLimit: //为成功的任务执行保留的历史记录数,默认3 startingDeadlineSeconds: //超时时间 jobTemplate: // Job控制器模板 metadata: spec: completions: //Job需要成功运行pod的数量,默认是1 parallelism: //Job在任一时刻应该并发运行pod的数量,默认是1 activeDeadlineSeconds: //Job可运行的时间期限,超过未结束,系统会终止 backoffLimit:6 //失败尝试次数 manualSelector: true // selector: //选择器,指定该控制器管理哪些pod matchLabels: app: counter-pod matchExpressions: - {key:app, operator: In, values: [counter-pod]} template: //pod模版 metadata: labels: app: counter-pod spec: restartPolicy: //只能设置Never或者OnFailure containers: - name: counter image: busybox:1.30 command: ["bin/sh","-c","for i in 9 8 7 6 5 4 3 2 1]; do echo $i;sleep 3;done"]kubectl apply -f pc-cronjob.yaml kubectl get cronjob -n dev -w kubectl get job -n dev -w kubectl get pod -n dev -w
甘肃5条线路入选全国乡村旅游精品线路近日,文化和旅游部联合共青团中央推出128条稻花香里说丰年全国乡村旅游精品线路,我省5条乡村旅游线路入选。我省入选的5条乡村旅游线路分别是甘肃省星辰沙海生态绿洲体验之旅如画甘州桑麻
经韩国回国流程极简!免签入境!答疑解惑听随着韩国入境措施的不断放宽,经韩回国成了海外回国的热门选项经韩中转赴华,不强制要求始发国健康码取消入境前PCR要求持中护照可免签入境韩国济州岛。现在入境韩国行前仅需准备w有效
国际航班量翻倍,直飞回国机票降价了作者丨高江虹编辑丨张伟贤图源丨视觉中国10月11日上午1025,EY868抵达广州白云国际机场,这是疫情后阿提哈德航空开通的首个阿布扎比至广州的定期航班,阿提哈德航空也是疫情后首个
到手价低至2K元大功率快充手机推荐近年来充电技术的快速发展,让许多过去看起来高端的高规格充电技术如今已能在两千元档位手机中看见,如高速闪充无线充电,甚至是能延续电池寿命的超级闪充技术。OPPOReno8OPPO在快
丰巢快递柜推出洗衣服务,上门取衣不满意免费返洗,你会尝试吗?丰巢智能柜不仅能存放包裹,还能兼职提供洗衣服务了!记者获悉,今年丰巢专门辟出生活服务板块,进军洗衣业务,目前该业务已经从深圳拓展至全国,上海消费者也可下单,选择无接触的上门洗衣服务
车叔观察换新标推跑车,广汽埃安估值能达千亿吗?2022年9月15日,广汽埃安在广州举办埃安品牌发布会,宣布全新品牌Logo正式公布并启用的同时,还发布了全新高端品牌Hyper昊铂,以及旗下首款车型HyperSSR,其售价区间为
神回复两个人,一夜无眠1。这下商家该睡不着了!2。我全家和家里的小动物都好!!!3。客服真专业!!!4。沸羊羊我只是想让她多看我一眼,有什么错?5。姑娘那么勇的嘛?!?6。外卖拦截者!!!7。陈奕迅我没
王宝强携女友开豪车聚餐,相处似老夫老妻,冯清超模身材长腿吸睛饿了吗?戳右边关注我们,每天给您送上最新出炉的娱乐硬核大餐!10月13日,有媒体爆料拍到王宝强与女友冯清一起出门会友,并晒出了两人罕见同框的视频,引发网友热议。视频中,冯清驾驶豪车
万字重磅访谈!赵诣最新发声中国基金报记者吴君方丽继公募四冠王的光环之后,赵诣以个人系公募泉果基金的基金经理,作为事业的新起点。入职后管理的第一只基金即将发行,让他再一次站到了聚光灯下。在公募圈,赵诣可以说是
被卡脖子有多难受?看看华为手机和笔记本的境遇就知道了华为最新推出的Mate50系列手机的一个重要特色,就是国产供应链厂家数量进一步增加,国产化率达到了一个新的高度。这些是去年华为P40系列手机的核心供应商这些是今年华为Mate50系
华为路由器192。168。3。1登录页面打不开的解决方法在设置华为无线路由器时,192。168。3。1登录页面打不开的解决办法。华为路由器使用192。168。3。1作为登录地址,如果在浏览器中输入192。168。3。1打不开登录页面,请