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
页面更新:2024-04-18
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号