当前位置: 首页 > news >正文

北京市网站建设_网站建设公司_加载速度优化_seo优化

网站建设前期规划方案,数据服务器,wordpress 该页无法显示,装修设计公司简介Pod控制器详解 Pod控制器介绍 Pod是kubernetes的最小管理单元#xff0c;在kubernetes中#xff0c;按照pod的创建方式可以将其分为两类#xff1a; 自主式pod#xff1a;kubernetes直接创建出来的Pod#xff0c;这种pod删除后就没有了#xff0c;也不会重建 控制器创建…Pod控制器详解 Pod控制器介绍 Pod是kubernetes的最小管理单元在kubernetes中按照pod的创建方式可以将其分为两类 自主式podkubernetes直接创建出来的Pod这种pod删除后就没有了也不会重建 控制器创建的podkubernetes通过控制器创建的pod这种pod删除了之后还会自动重建 什么是Pod控制器 Pod控制器是管理pod的中间层使用Pod控制器之后只需要告诉Pod控制器想要多少个什么样的Pod就可以了它会创建出满足条件的Pod并确保每一个Pod资源处于用户期望的目标状态。如果Pod资源在运行中出现故障它会基于指定策略重新编排Pod。 在kubernetes中有很多类型的pod控制器每种都有自己的适合的场景常见的有下面这些 ReplicationController比较原始的pod控制器已经被废弃由ReplicaSet替代 ReplicaSet保证副本数量一直维持在期望值并支持pod数量扩缩容镜像版本升级 Deployment通过控制ReplicaSet来控制Pod并支持滚动升级、回退版本 Horizontal Pod Autoscaler可以根据集群负载自动水平调整Pod的数量实现削峰填谷 DaemonSet在集群中的指定Node上运行且仅运行一个副本一般用于守护进程类的任务 Job它创建出来的pod只要完成任务就立即退出不需要重启或重建用于执行一次性任务 Cronjob它创建的Pod负责周期性任务控制不需要持续后台运行 StatefulSet管理有状态应用 ReplicaSet(RS) ReplicaSet的主要作用是保证一定数量的pod正常运行它会持续监听这些Pod的运行状态一旦Pod发生故障就会重启或重建。同时它还支持对pod数量的扩缩容和镜像版本的升降级。 ReplicaSet的资源清单文件 apiVersion: apps/v1 # 版本号 kind: ReplicaSet # 类型 metadata: # 元数据name: # rs名称 namespace: # 所属命名空间 labels: #标签controller: rs spec: # 详情描述replicas: 3 # 副本数量selector: # 选择器通过它指定该控制器管理哪些podmatchLabels: # Labels匹配规则app: nginx-podmatchExpressions: # Expressions匹配规则- {key: app, operator: In, values: [nginx-pod]}template: # 模板当副本数量不足时会根据下面的模板创建pod副本metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.17.1ports:- containerPort: 80在这里面需要新了解的配置项就是spec下面几个选项 replicas指定副本数量其实就是当前rs创建出来的pod的数量默认为1 selector选择器它的作用是建立pod控制器和pod之间的关联关系采用的Label Selector机制 在pod模板上定义label在控制器上定义选择器就可以表明当前控制器能管理哪些pod了 template模板就是当前控制器创建pod所使用的模板板里面其实就是前一章学过的pod的定义 创建ReplicaSet 创建pc-replicaset.yaml文件内容如下 apiVersion: apps/v1 kind: ReplicaSet metadata:name: pc-replicasetnamespace: dev spec:replicas: 3selector: matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.17.1#创建rs [rootk8s-master01 ~]# kubectl create -f pc-replicaset.yaml replicaset.apps/pc-replicaset created#查看rs #DESIRED:期望副本数量 #CURRENT:当前副本数量 #READY:已经准备好提供服务的副本数量 [rootk8s-master01 ~]# kubectl get rs pc-replicaset -n dev -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR pc-replicaset 3 3 3 22s nginx nginx:1.17.1 appnginx-pod#查看当前控制器创建出来的pod #这里发现控制器创建出来的pod的名称是在控制器名称后面拼接了-xxxxx随机码 [rootk8s-master01 ~]# kubectl get pod -n dev NAME READY STATUS RESTARTS AGE pc-replicaset-6vmvt 1/1 Running 0 54s pc-replicaset-fmb8f 1/1 Running 0 54s pc-replicaset-snrk2 1/1 Running 0 54s扩缩容 #编辑rs的副本数量修改spec:replicas: 6即可 [rootk8s-master01 ~]# kubectl edit rs pc-replicaset -n dev replicaset.apps/pc-replicaset edited#查看pod [rootk8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-replicaset-6vmvt 1/1 Running 0 114m pc-replicaset-cftnp 1/1 Running 0 10s pc-replicaset-fjlm6 1/1 Running 0 10s pc-replicaset-fmb8f 1/1 Running 0 114m pc-replicaset-s2whj 1/1 Running 0 10s pc-replicaset-snrk2 1/1 Running 0 114m#当然也可以直接使用命令实现 #使用scale命令实现扩缩容 后面--replicasn直接指定目标数量即可 [rootk8s-master01 ~]# kubectl scale rs pc-replicaset --replicas2 -n dev replicaset.apps/pc-replicaset scaled#命令运行完毕立即查看发现已经有4个开始准备退出了 [rootk8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-replicaset-6vmvt 0/1 Terminating 0 118m pc-replicaset-cftnp 0/1 Terminating 0 4m17s pc-replicaset-fjlm6 0/1 Terminating 0 4m17s pc-replicaset-fmb8f 1/1 Running 0 118m pc-replicaset-s2whj 0/1 Terminating 0 4m17s pc-replicaset-snrk2 1/1 Running 0 118m#稍等片刻就只剩下2个了 [rootk8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-replicaset-fmb8f 1/1 Running 0 119m pc-replicaset-snrk2 1/1 Running 0 119m镜像升级 #编辑rs的容器镜像 - image: nginx:1.17.2 [rootk8s-master01 ~]# kubectl edit rs pc-replicaset -n dev replicaset.apps/pc-replicaset edited#再次查看发现镜像版本已经变更了 [rootk8s-master01 ~]# kubectl get rs -n dev -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES ... pc-replicaset 2 2 2 140m nginx nginx:1.17.2 ...#同样的道理也可以使用命令完成这个工作 #kubectl set image rs rs名称 容器镜像版本 -n namespace [rootk8s-master01 ~]# kubectl set image rs pc-replicaset nginxnginx:1.17.1 -n dev replicaset.apps/pc-replicaset image updated#再次查看发现镜像版本已经变更了 [rootk8s-master01 ~]# kubectl get rs -n dev -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES ... pc-replicaset 2 2 2 145m nginx nginx:1.17.1 ... 删除ReplicaSet #使用kubectl delete命令会删除此RS以及它管理的Pod #在kubernetes删除RS前会将RS的replicasclear调整为0等待所有的Pod被删除后在执行RS对象的删除 [rootk8s-master01 ~]# kubectl delete rs pc-replicaset -n dev replicaset.apps pc-replicaset deleted [rootk8s-master01 ~]# kubectl get pod -n dev -o wide No resources found in dev namespace.#如果希望仅仅删除RS对象保留Pod可以使用kubectl delete命令时添加--cascadefalse选项不推荐。 [rootk8s-master01 ~]# kubectl delete rs pc-replicaset -n dev --cascadefalse replicaset.apps pc-replicaset deleted [rootk8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-replicaset-cl82j 1/1 Running 0 75s pc-replicaset-dslhb 1/1 Running 0 75s#也可以使用yaml直接删除(推荐) [rootk8s-master01 ~]# kubectl delete -f pc-replicaset.yaml replicaset.apps pc-replicaset deletedDeployment(Deploy) 为了更好的解决服务编排的问题kubernetes在V1.2版本开始引入了Deployment控制器。值得一提的是这种控制器并不直接管理pod而是通过管理ReplicaSet来简介管理Pod即Deployment管理ReplicaSetReplicaSet管理Pod。所以Deployment比ReplicaSet功能更加强大。 为了更好的解决服务编排的问题kubernetes在V1.2版本开始引入了Deployment控制器。值得一提的是这种控制器并不直接管理pod而是通过管理ReplicaSet来简介管理Pod即Deployment管理ReplicaSetReplicaSet管理Pod。所以Deployment比ReplicaSet功能更加强大。 Deployment主要功能有下面几个 支持ReplicaSet的所有功能 支持发布的停止、继续 支持滚动升级和回滚版本 Deployment的资源清单文件 apiVersion: apps/v1 # 版本号 kind: Deployment # 类型 metadata: # 元数据name: # rs名称 namespace: # 所属命名空间 labels: #标签controller: deploy spec: # 详情描述replicas: 3 # 副本数量revisionHistoryLimit: 3 # 保留历史版本paused: false # 暂停部署默认是falseprogressDeadlineSeconds: 600 # 部署超时时间s默认是600strategy: # 策略type: RollingUpdate # 滚动更新策略rollingUpdate: # 滚动更新违规词汇: 30% # 最大额外可以存在的副本数可以为百分比也可以为整数maxUnavailable: 30% # 最大不可用状态的 Pod 的最大值可以为百分比也可以为整数selector: # 选择器通过它指定该控制器管理哪些podmatchLabels: # Labels匹配规则app: nginx-podmatchExpressions: # Expressions匹配规则- {key: app, operator: In, values: [nginx-pod]}template: # 模板当副本数量不足时会根据下面的模板创建pod副本metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.17.1ports:- containerPort: 80创建deployment 创建pc-deployment.yaml内容如下 apiVersion: apps/v1 kind: Deployment metadata:name: pc-deploymentnamespace: dev spec: replicas: 3selector:matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.17.1扩缩容 #变更副本数量为5个 [rootk8s-master01 ~]# kubectl scale deploy pc-deployment --replicas5 -n dev deployment.apps/pc-deployment scaled#查看deployment [rootk8s-master01 ~]# kubectl get deploy pc-deployment -n dev NAME READY UP-TO-DATE AVAILABLE AGE pc-deployment 5/5 5 5 2m#查看pod [rootk8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-deployment-6696798b78-d2c8n 1/1 Running 0 4m19s pc-deployment-6696798b78-jxmdq 1/1 Running 0 94s pc-deployment-6696798b78-mktqv 1/1 Running 0 93s pc-deployment-6696798b78-smpvp 1/1 Running 0 4m19s pc-deployment-6696798b78-wvjd8 1/1 Running 0 4m19s#编辑deployment的副本数量修改spec:replicas: 4即可 [rootk8s-master01 ~]# kubectl edit deploy pc-deployment -n dev deployment.apps/pc-deployment edited#查看pod [rootk8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-deployment-6696798b78-d2c8n 1/1 Running 0 5m23s pc-deployment-6696798b78-jxmdq 1/1 Running 0 2m38s pc-deployment-6696798b78-smpvp 1/1 Running 0 5m23s pc-deployment-6696798b78-wvjd8 1/1 Running 0 5m23s镜像更新 deployment支持两种更新策略:重建更新和滚动更新,可以通过strategy指定策略类型,支持两个属性: strategy指定新的Pod替换旧的Pod的策略 支持两个属性 type指定策略类型支持两种策略 Recreate在创建出新的Pod之前会先杀掉所有已存在的Pod RollingUpdate滚动更新就是杀死一部分就启动一部分在更新过程中存在两个版本Pod rollingUpdate当type为RollingUpdate时生效用于为RollingUpdate设置参数支持两个属性 maxUnavailable用来指定在升级过程中不可用Pod的最大数量默认为25%。 违规词汇 用来指定在升级过程中可以超过期望的Pod的最大数量默认为25%。 重建更新 编辑pc-deployment.yaml,在spec节点下添加更新策略 spec:strategy: # 策略type: Recreate # 重建更新创建deploy进行验证 #变更镜像 [rootk8s-master01 ~]# kubectl set image deployment pc-deployment nginxnginx:1.17.2 -n dev deployment.apps/pc-deployment image updated#观察升级过程 [rootk8s-master01 ~]# kubectl get pods -n dev -w NAME READY STATUS RESTARTS AGE pc-deployment-5d89bdfbf9-65qcw 1/1 Running 0 31s pc-deployment-5d89bdfbf9-w5nzv 1/1 Running 0 31s pc-deployment-5d89bdfbf9-xpt7w 1/1 Running 0 31spc-deployment-5d89bdfbf9-xpt7w 1/1 Terminating 0 41s pc-deployment-5d89bdfbf9-65qcw 1/1 Terminating 0 41s pc-deployment-5d89bdfbf9-w5nzv 1/1 Terminating 0 41spc-deployment-675d469f8b-grn8z 0/1 Pending 0 0s pc-deployment-675d469f8b-hbl4v 0/1 Pending 0 0s pc-deployment-675d469f8b-67nz2 0/1 Pending 0 0spc-deployment-675d469f8b-grn8z 0/1 ContainerCreating 0 0s pc-deployment-675d469f8b-hbl4v 0/1 ContainerCreating 0 0s pc-deployment-675d469f8b-67nz2 0/1 ContainerCreating 0 0spc-deployment-675d469f8b-grn8z 1/1 Running 0 1s pc-deployment-675d469f8b-67nz2 1/1 Running 0 1s pc-deployment-675d469f8b-hbl4v 1/1 Running 0 2s滚动更新 编辑pc-deployment.yaml,在spec节点下添加更新策略 spec:strategy: # 策略type: RollingUpdate # 滚动更新策略rollingUpdate:违规词汇: 25% maxUnavailable: 25%创建deploy进行验证 #变更镜像 [rootk8s-master01 ~]# kubectl set image deployment pc-deployment nginxnginx:1.17.3 -n dev deployment.apps/pc-deployment image updated#观察升级过程 [rootk8s-master01 ~]# kubectl get pods -n dev -w NAME READY STATUS RESTARTS AGE pc-deployment-c848d767-8rbzt 1/1 Running 0 31m pc-deployment-c848d767-h4p68 1/1 Running 0 31m pc-deployment-c848d767-hlmz4 1/1 Running 0 31m pc-deployment-c848d767-rrqcn 1/1 Running 0 31mpc-deployment-966bf7f44-226rx 0/1 Pending 0 0s pc-deployment-966bf7f44-226rx 0/1 ContainerCreating 0 0s pc-deployment-966bf7f44-226rx 1/1 Running 0 1s pc-deployment-c848d767-h4p68 0/1 Terminating 0 34mpc-deployment-966bf7f44-cnd44 0/1 Pending 0 0s pc-deployment-966bf7f44-cnd44 0/1 ContainerCreating 0 0s pc-deployment-966bf7f44-cnd44 1/1 Running 0 2s pc-deployment-c848d767-hlmz4 0/1 Terminating 0 34mpc-deployment-966bf7f44-px48p 0/1 Pending 0 0s pc-deployment-966bf7f44-px48p 0/1 ContainerCreating 0 0s pc-deployment-966bf7f44-px48p 1/1 Running 0 0s pc-deployment-c848d767-8rbzt 0/1 Terminating 0 34mpc-deployment-966bf7f44-dkmqp 0/1 Pending 0 0s pc-deployment-966bf7f44-dkmqp 0/1 ContainerCreating 0 0s pc-deployment-966bf7f44-dkmqp 1/1 Running 0 2s pc-deployment-c848d767-rrqcn 0/1 Terminating 0 34m#至此新版本的pod创建完毕就版本的pod销毁完毕 #中间过程是滚动进行的也就是边销毁边创建滚动更新的过程 镜像更新中rs的变化 #查看rs,发现原来的rs的依旧存在只是pod数量变为了0而后又新产生了一个rspod数量为4 #其实这就是deployment能够进行版本回退的奥妙所在后面会详细解释 [rootk8s-master01 ~]# kubectl get rs -n dev NAME DESIRED CURRENT READY AGE pc-deployment-6696798b78 0 0 0 7m37s pc-deployment-6696798b11 0 0 0 5m37s pc-deployment-c848d76789 4 4 4 72s 6.3.3 版本回退 deployment支持版本升级过程中的暂停、继续功能以及版本回退等诸多功能下面具体来看.kubectl rollout 版本升级相关功能支持下面的选项status 显示当前升级状态 history 显示 升级历史记录 pause 暂停版本升级过程 resume 继续已经暂停的版本升级过程 restart 重启版本升级过程 undo 回滚到上一级版本可以使用--to-revision回滚到指定版本 #查看当前升级版本的状态 [rootk8s-master01 ~]# kubectl rollout status deploy pc-deployment -n dev deployment pc-deployment successfully rolled out#查看升级历史记录 [rootk8s-master01 ~]# kubectl rollout history deploy pc-deployment -n dev deployment.apps/pc-deployment REVISION CHANGE-CAUSE 1 kubectl create --filenamepc-deployment.yaml --recordtrue 2 kubectl create --filenamepc-deployment.yaml --recordtrue 3 kubectl create --filenamepc-deployment.yaml --recordtrue #可以发现有三次版本记录说明完成过两次升级#版本回滚 #这里直接使用--to-revision1回滚到了1版本 如果省略这个选项就是回退到上个版本就是2版本 [rootk8s-master01 ~]# kubectl rollout undo deployment pc-deployment --to-revision1 -n dev deployment.apps/pc-deployment rolled back#查看发现通过nginx镜像版本可以发现到了第一版 [rootk8s-master01 ~]# kubectl get deploy -n dev -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES pc-deployment 4/4 4 4 74m nginx nginx:1.17.1 #查看rs发现第一个rs中有4个pod运行后面两个版本的rs中pod为运行 #其实deployment之所以可是实现版本的回滚就是通过记录下历史rs来实现的 #一旦想回滚到哪个版本只需要将当前版本pod数量降为0然后将回滚版本的pod提升为目标数量就可以了 [rootk8s-master01 ~]# kubectl get rs -n dev NAME DESIRED CURRENT READY AGE pc-deployment-6696798b78 4 4 4 78m pc-deployment-966bf7f44 0 0 0 37m pc-deployment-c848d767 0 0 0 71m金丝雀发布 Deployment控制器支持控制更新过程中的控制如“暂停(pause)”或“继续(resume)”更新操作。 比如有一批新的Pod资源创建完成后立即暂停更新过程此时仅存在一部分新版本的应用主体部分还是旧的版本。然后再筛选一小部分的用户请求路由到新版本的Pod应用继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新否则立即回滚更新操作。这就是所谓的金丝雀发布。 #更新deployment的版本并配置暂停deployment [rootk8s-master01 ~]# kubectl set image deploy pc-deployment nginxnginx:1.17.4 -n dev kubectl rollout pause deployment pc-deployment -n dev deployment.apps/pc-deployment image updated deployment.apps/pc-deployment paused#观察更新状态 [rootk8s-master01 ~]# kubectl rollout status deploy pc-deployment -n dev  Waiting for deployment pc-deployment rollout to finish: 2 out of 4 new replicas have been updated...#监控更新的过程可以看到已经新增了一个资源但是并未按照预期的状态去删除一个旧的资源就是因为使用了pause暂停命令[rootk8s-master01 ~]# kubectl get rs -n dev -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES pc-deployment-5d89bdfbf9 3 3 3 19m nginx nginx:1.17.1 pc-deployment-675d469f8b 0 0 0 14m nginx nginx:1.17.2 pc-deployment-6c9f56fcfb 2 2 2 3m16s nginx nginx:1.17.4 [rootk8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-deployment-5d89bdfbf9-rj8sq 1/1 Running 0 7m33s pc-deployment-5d89bdfbf9-ttwgg 1/1 Running 0 7m35s pc-deployment-5d89bdfbf9-v4wvc 1/1 Running 0 7m34s pc-deployment-6c9f56fcfb-996rt 1/1 Running 0 3m31s pc-deployment-6c9f56fcfb-j2gtj 1/1 Running 0 3m31s#确保更新的pod没问题了继续更新 [rootk8s-master01 ~]# kubectl rollout resume deploy pc-deployment -n dev deployment.apps/pc-deployment resumed#查看最后的更新情况 [rootk8s-master01 ~]# kubectl get rs -n dev -o wide NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES pc-deployment-5d89bdfbf9 0 0 0 21m nginx nginx:1.17.1 pc-deployment-675d469f8b 0 0 0 16m nginx nginx:1.17.2 pc-deployment-6c9f56fcfb 4 4 4 5m11s nginx nginx:1.17.4 [rootk8s-master01 ~]# kubectl get pods -n dev NAME READY STATUS RESTARTS AGE pc-deployment-6c9f56fcfb-7bfwh 1/1 Running 0 37s pc-deployment-6c9f56fcfb-996rt 1/1 Running 0 5m27s pc-deployment-6c9f56fcfb-j2gtj 1/1 Running 0 5m27s pc-deployment-6c9f56fcfb-rf84v 1/1 Running 0 37s删除Deployment #删除deployment其下的rs和pod也将被删除 [rootk8s-master01 ~]# kubectl delete -f pc-deployment.yaml deployment.apps pc-deployment deletedHorizontal Pod Autoscaler(HPA) 在前面的课程中我们已经可以实现通过手工执行kubectl scale命令实现Pod扩容或缩容但是这显然不符合Kubernetes的定位目标–自动化、智能化。 Kubernetes期望可以实现通过监测Pod的使用情况实现pod数量的自动调整于是就产生了Horizontal Pod AutoscalerHPA这种控制器。 HPA可以获取每个Pod利用率然后和HPA中定义的指标进行对比同时计算出需要伸缩的具体值最后实现Pod的数量的调整。其实HPA与之前的Deployment一样也属于一种Kubernetes资源对象它通过追踪分析RC控制的所有目标Pod的负载变化情况来确定是否需要针对性地调整目标Pod的副本数这是HPA的实现原理。 接下来我们来做一个实验 安装metrics-server metrics-server可以用来收集集群中的资源使用情况 #安装git [rootk8s-master01 ~]# yum install git -y #获取metrics-server, 注意使用的版本 [rootk8s-master01 ~]# git clone -b v0.3.6 https://github.com/kubernetes-incubator/metrics-server #修改deployment, 注意修改的是镜像和初始化参数 [rootk8s-master01 ~]# cd /root/metrics-server/deploy/1.8/ [rootk8s-master01 1.8]# vim metrics-server-deployment.yaml按图中添加下面选项 hostNetwork: true image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 args: –kubelet-insecure-tls–kubelet-preferred-address-typesInternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP #安装metrics-server [rootk8s-master01 1.8]# kubectl apply -f ./#查看pod运行情况 [rootk8s-master01 1.8]# kubectl get pod -n kube-system metrics-server-6b976979db-2xwbj 1/1 Running 0 90s#使用kubectl top node 查看资源使用情况 [rootk8s-master01 1.8]# kubectl top node NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% k8s-master01 289m 14% 1582Mi 54% k8s-node01 81m 4% 1195Mi 40% k8s-node02 72m 3% 1211Mi 41% [rootk8s-master01 1.8]# kubectl top pod -n kube-system NAME CPU(cores) MEMORY(bytes) coredns-6955765f44-7ptsb 3m 9Mi coredns-6955765f44-vcwr5 3m 8Mi etcd-master 14m 145Mi ... #至此,metrics-server安装完成准备deployment和servie 创建pc-hpa-pod.yaml文件内容如下 apiVersion: apps/v1 kind: Deployment metadata:name: nginxnamespace: dev spec:strategy: # 策略type: RollingUpdate # 滚动更新策略replicas: 1selector:matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.17.1resources: # 资源配额limits: # 限制资源上限cpu: 1 # CPU限制单位是core数requests: # 请求资源下限cpu: 100m # CPU限制单位是core数#创建deployment [rootk8s-master01 1.8]# kubectl run nginx --imagenginx:1.17.1 --requestscpu100m -n dev #创建service [rootk8s-master01 1.8]# kubectl expose deployment nginx --typeNodePort --port80 -n dev #查看 [rootk8s-master01 1.8]# kubectl get deployment,pod,svc -n dev NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/nginx 1/1 1 1 47sNAME READY STATUS RESTARTS AGE pod/nginx-7df9756ccc-bh8dr 1/1 Running 0 47sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/nginx NodePort 10.101.18.29 none 80:31830/TCP 35s部署HPA 创建pc-hpa.yaml文件内容如下 apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata:name: pc-hpanamespace: dev spec:minReplicas: 1 #最小pod数量maxReplicas: 10 #最大pod数量targetCPUUtilizationPercentage: 3 # CPU使用率指标scaleTargetRef: # 指定要控制的nginx信息apiVersion: apps/v1kind: Deploymentname: nginx#创建hpa [rootk8s-master01 1.8]# kubectl create -f pc-hpa.yaml horizontalpodautoscaler.autoscaling/pc-hpa created#查看hpa[rootk8s-master01 1.8]# kubectl get hpa -n dev NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE pc-hpa Deployment/nginx 0%/3% 1 10 1 62s测试 使用压测工具对service地址192.168.5.4:31830进行压测然后通过控制台查看hpa和pod的变化 hpa变化 [rootk8s-master01 ~]# kubectl get hpa -n dev -w NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE pc-hpa Deployment/nginx 0%/3% 1 10 1 4m11s pc-hpa Deployment/nginx 0%/3% 1 10 1 5m19s pc-hpa Deployment/nginx 22%/3% 1 10 1 6m50s pc-hpa Deployment/nginx 22%/3% 1 10 4 7m5s pc-hpa Deployment/nginx 22%/3% 1 10 8 7m21s pc-hpa Deployment/nginx 6%/3% 1 10 8 7m51s pc-hpa Deployment/nginx 0%/3% 1 10 8 9m6s pc-hpa Deployment/nginx 0%/3% 1 10 8 13m pc-hpa Deployment/nginx 0%/3% 1 10 1 14mdeployment变化 [rootk8s-master01 ~]# kubectl get deployment -n dev -w NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 11m nginx 1/4 1 1 13m nginx 1/4 1 1 13m nginx 1/4 1 1 13m nginx 1/4 4 1 13m nginx 1/8 4 1 14m nginx 1/8 4 1 14m nginx 1/8 4 1 14m nginx 1/8 8 1 14m nginx 2/8 8 2 14m nginx 3/8 8 3 14m nginx 4/8 8 4 14m nginx 5/8 8 5 14m nginx 6/8 8 6 14m nginx 7/8 8 7 14m nginx 8/8 8 8 15m nginx 8/1 8 8 20m nginx 8/1 8 8 20m nginx 1/1 1 1 20mpod变化 [rootk8s-master01 ~]# kubectl get pods -n dev -w NAME READY STATUS RESTARTS AGE nginx-7df9756ccc-bh8dr 1/1 Running 0 11m nginx-7df9756ccc-cpgrv 0/1 Pending 0 0s nginx-7df9756ccc-8zhwk 0/1 Pending 0 0s nginx-7df9756ccc-rr9bn 0/1 Pending 0 0s nginx-7df9756ccc-cpgrv 0/1 ContainerCreating 0 0s nginx-7df9756ccc-8zhwk 0/1 ContainerCreating 0 0s nginx-7df9756ccc-rr9bn 0/1 ContainerCreating 0 0s nginx-7df9756ccc-m9gsj 0/1 Pending 0 0s nginx-7df9756ccc-g56qb 0/1 Pending 0 0s nginx-7df9756ccc-sl9c6 0/1 Pending 0 0s nginx-7df9756ccc-fgst7 0/1 Pending 0 0s nginx-7df9756ccc-g56qb 0/1 ContainerCreating 0 0s nginx-7df9756ccc-m9gsj 0/1 ContainerCreating 0 0s nginx-7df9756ccc-sl9c6 0/1 ContainerCreating 0 0s nginx-7df9756ccc-fgst7 0/1 ContainerCreating 0 0s nginx-7df9756ccc-8zhwk 1/1 Running 0 19s nginx-7df9756ccc-rr9bn 1/1 Running 0 30s nginx-7df9756ccc-m9gsj 1/1 Running 0 21s nginx-7df9756ccc-cpgrv 1/1 Running 0 47s nginx-7df9756ccc-sl9c6 1/1 Running 0 33s nginx-7df9756ccc-g56qb 1/1 Running 0 48s nginx-7df9756ccc-fgst7 1/1 Running 0 66s nginx-7df9756ccc-fgst7 1/1 Terminating 0 6m50s nginx-7df9756ccc-8zhwk 1/1 Terminating 0 7m5s nginx-7df9756ccc-cpgrv 1/1 Terminating 0 7m5s nginx-7df9756ccc-g56qb 1/1 Terminating 0 6m50s nginx-7df9756ccc-rr9bn 1/1 Terminating 0 7m5s nginx-7df9756ccc-m9gsj 1/1 Terminating 0 6m50s nginx-7df9756ccc-sl9c6 1/1 Terminating 0 6m50sDaemonSet(DS) DaemonSet类型的控制器可以保证在集群中的每一台或指定节点上都运行一个副本。一般适用于日志收集、节点监控等场景。也就是说如果一个Pod提供的功能是节点级别的每个节点都需要且只需要一个那么这类Pod就适合使用DaemonSet类型的控制器创建。 DaemonSet控制器的特点 每当向集群中添加一个节点时指定的 Pod 副本也将添加到该节点上 当节点从集群中移除时Pod 也就被垃圾回收了 下面先来看下DaemonSet的资源清单文件 apiVersion: apps/v1 # 版本号 kind: DaemonSet # 类型 metadata: # 元数据name: # rs名称 namespace: # 所属命名空间 labels: #标签controller: daemonset spec: # 详情描述revisionHistoryLimit: 3 # 保留历史版本updateStrategy: # 更新策略type: RollingUpdate # 滚动更新策略rollingUpdate: # 滚动更新maxUnavailable: 1 # 最大不可用状态的 Pod 的最大值可以为百分比也可以为整数selector: # 选择器通过它指定该控制器管理哪些podmatchLabels: # Labels匹配规则app: nginx-podmatchExpressions: # Expressions匹配规则- {key: app, operator: In, values: [nginx-pod]}template: # 模板当副本数量不足时会根据下面的模板创建pod副本metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.17.1ports:- containerPort: 80创建pc-daemonset.yaml内容如下 apiVersion: apps/v1 kind: DaemonSet metadata:name: pc-daemonsetnamespace: dev spec: selector:matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:1.17.1#创建daemonset [rootk8s-master01 ~]# kubectl create -f pc-daemonset.yaml daemonset.apps/pc-daemonset created#查看daemonset [rootk8s-master01 ~]# kubectl get ds -n dev -o wide NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES pc-daemonset 2 2 2 2 2 24s nginx nginx:1.17.1 #查看pod,发现在每个Node上都运行一个pod [rootk8s-master01 ~]# kubectl get pods -n dev -o wide NAME READY STATUS RESTARTS AGE IP NODE pc-daemonset-9bck8 1/1 Running 0 37s 10.244.1.43 node1 pc-daemonset-k224w 1/1 Running 0 37s 10.244.2.74 node2 #删除daemonset [rootk8s-master01 ~]# kubectl delete -f pc-daemonset.yaml daemonset.apps pc-daemonset deletedJob Job主要用于负责**批量处理(一次要处理指定数量任务)短暂的一次性(每个任务仅运行一次就结束)**任务。Job特点如下 当Job创建的pod执行成功结束时Job将记录成功结束的pod数量 当成功结束的pod达到指定的数量时Job将完成执行 Job的资源清单文件 apiVersion: batch/v1 # 版本号 kind: Job # 类型 metadata: # 元数据name: # rs名称 namespace: # 所属命名空间 labels: #标签controller: job spec: # 详情描述completions: 1 # 指定job需要成功运行Pods的次数。默认值: 1parallelism: 1 # 指定job在任一时刻应该并发运行Pods的数量。默认值: 1activeDeadlineSeconds: 30 # 指定job可运行的时间期限超过时间还未结束系统将会尝试进行终止。backoffLimit: 6 # 指定job失败后进行重试的次数。默认是6manualSelector: true # 是否可以使用selector选择器选择pod默认是falseselector: # 选择器通过它指定该控制器管理哪些podmatchLabels: # Labels匹配规则app: counter-podmatchExpressions: # Expressions匹配规则- {key: app, operator: In, values: [counter-pod]}template: # 模板当副本数量不足时会根据下面的模板创建pod副本metadata:labels:app: counter-podspec:restartPolicy: Never # 重启策略只能设置为Never或者OnFailurecontainers:- name: counterimage: busybox:1.30command: [bin/sh,-c,for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 2;done]关于重启策略设置的说明 如果指定为OnFailure则job会在pod出现故障时重启容器而不是创建podfailed次数不变 如果指定为Never则job会在pod出现故障时创建新的pod并且故障pod不会消失也不会重启failed次数加1 如果指定为Always的话就意味着一直重启意味着job任务会重复去执行了当然不对所以不能设置为Always 创建pc-job.yaml内容如下 apiVersion: batch/v1 kind: Job metadata:name: pc-jobnamespace: dev spec:manualSelector: trueselector:matchLabels:app: counter-podtemplate:metadata:labels:app: counter-podspec:restartPolicy: Nevercontainers:- name: counterimage: busybox:1.30command: [bin/sh,-c,for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 3;done]#创建job [rootk8s-master01 ~]# kubectl create -f pc-job.yaml job.batch/pc-job created#查看job [rootk8s-master01 ~]# kubectl get job -n dev -o wide -w NAME COMPLETIONS DURATION AGE CONTAINERS IMAGES SELECTOR pc-job 0/1 21s 21s counter busybox:1.30 appcounter-pod pc-job 1/1 31s 79s counter busybox:1.30 appcounter-pod#通过观察pod状态可以看到pod在运行完毕任务后就会变成Completed状态 [rootk8s-master01 ~]# kubectl get pods -n dev -w NAME READY STATUS RESTARTS AGE pc-job-rxg96 1/1 Running 0 29s pc-job-rxg96 0/1 Completed 0 33s#接下来调整下pod运行的总数量和并行数量 即在spec下设置下面两个选项 #completions: 6 # 指定job需要成功运行Pods的次数为6 #parallelism: 3 # 指定job并发运行Pods的数量为3 #然后重新运行job观察效果此时会发现job会每次运行3个pod总共执行了6个pod [rootk8s-master01 ~]# kubectl get pods -n dev -w NAME READY STATUS RESTARTS AGE pc-job-684ft 1/1 Running 0 5s pc-job-jhj49 1/1 Running 0 5s pc-job-pfcvh 1/1 Running 0 5s pc-job-684ft 0/1 Completed 0 11s pc-job-v7rhr 0/1 Pending 0 0s pc-job-v7rhr 0/1 Pending 0 0s pc-job-v7rhr 0/1 ContainerCreating 0 0s pc-job-jhj49 0/1 Completed 0 11s pc-job-fhwf7 0/1 Pending 0 0s pc-job-fhwf7 0/1 Pending 0 0s pc-job-pfcvh 0/1 Completed 0 11s pc-job-5vg2j 0/1 Pending 0 0s pc-job-fhwf7 0/1 ContainerCreating 0 0s pc-job-5vg2j 0/1 Pending 0 0s pc-job-5vg2j 0/1 ContainerCreating 0 0s pc-job-fhwf7 1/1 Running 0 2s pc-job-v7rhr 1/1 Running 0 2s pc-job-5vg2j 1/1 Running 0 3s pc-job-fhwf7 0/1 Completed 0 12s pc-job-v7rhr 0/1 Completed 0 12s pc-job-5vg2j 0/1 Completed 0 12s#删除job [rootk8s-master01 ~]# kubectl delete -f pc-job.yaml job.batch pc-job deletedCronJob(CJ) CronJob控制器以 Job控制器资源为其管控对象并借助它管理pod资源对象Job控制器定义的作业任务在其控制器资源创建之后便会立即执行但CronJob可以以类似于Linux操作系统的周期性任务作业计划的方式控制其运行时间点及重复运行的方式。也就是说CronJob可以在特定的时间点(反复的)去运行job任务。 CronJob的资源清单文件 apiVersion: batch/v1beta1 # 版本号 kind: CronJob # 类型 metadata: # 元数据name: # rs名称 namespace: # 所属命名空间 labels: #标签controller: cronjob spec: # 详情描述schedule: # cron格式的作业调度运行时间点,用于控制任务在什么时间执行concurrencyPolicy: # 并发执行策略用于定义前一次作业运行尚未完成时是否以及如何运行后一次的作业failedJobHistoryLimit: # 为失败的任务执行保留的历史记录数默认为1successfulJobHistoryLimit: # 为成功的任务执行保留的历史记录数默认为3startingDeadlineSeconds: # 启动作业错误的超时时长jobTemplate: # job控制器模板用于为cronjob控制器生成job对象;下面其实就是job的定义metadata:spec:completions: 1parallelism: 1activeDeadlineSeconds: 30backoffLimit: 6manualSelector: trueselector:matchLabels:app: counter-podmatchExpressions: 规则- {key: app, operator: In, values: [counter-pod]}template:metadata:labels:app: counter-podspec:restartPolicy: Never containers:- name: counterimage: busybox:1.30command: [bin/sh,-c,for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 20;done]需要重点解释的几个选项 schedule: cron表达式用于指定任务的执行时间 */1 * * * * 分钟 小时 日 月份 星期 分钟 值从 0 到 59. 小时 值从 0 到 23. 日 值从 1 到 31. 月 值从 1 到 12. 星期 值从 0 到 6, 0 代表星期日 多个时间可以用逗号隔开 范围可以用连字符给出*可以作为通配符 /表示每...concurrencyPolicy: Allow: 允许Jobs并发运行(默认) Forbid: 禁止并发运行如果上一次运行尚未完成则跳过下一次运行 Replace: 替换取消当前正在运行的作业并用新作业替换它 创建pc-cronjob.yaml内容如下 apiVersion: batch/v1beta1 kind: CronJob metadata:name: pc-cronjobnamespace: devlabels:controller: cronjob spec:schedule: */1 * * * *jobTemplate:metadata:spec:template:spec:restartPolicy: Nevercontainers:- name: counterimage: busybox:1.30command: [bin/sh,-c,for i in 9 8 7 6 5 4 3 2 1; do echo $i;sleep 3;done]#创建cronjob [rootk8s-master01 ~]# kubectl create -f pc-cronjob.yaml cronjob.batch/pc-cronjob created#查看cronjob [rootk8s-master01 ~]# kubectl get cronjobs -n dev NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE pc-cronjob */1 * * * * False 0 none 6s#查看job [rootk8s-master01 ~]# kubectl get jobs -n dev NAME COMPLETIONS DURATION AGE pc-cronjob-1592587800 1/1 28s 3m26s pc-cronjob-1592587860 1/1 28s 2m26s pc-cronjob-1592587920 1/1 28s 86s#查看pod [rootk8s-master01 ~]# kubectl get pods -n dev pc-cronjob-1592587800-x4tsm 0/1 Completed 0 2m24s pc-cronjob-1592587860-r5gv4 0/1 Completed 0 84s pc-cronjob-1592587920-9dxxq 1/1 Running 0 24s#删除cronjob [rootk8s-master01 ~]# kubectl delete -f pc-cronjob.yaml cronjob.batch pc-cronjob deleted
http://www.ihoyoo.com/news/6082.html

相关文章:

  • 西班牙网站后缀天津网站建设方案书
  • dw怎么做jsp网站遵义网站开发的公司
  • 做微博网站成全视频观看免费高清第6季
  • 广州网站制作哪家全面手机网站qq代码
  • 视频网站切片怎么做购物网站首页模板下载
  • 网站建设时间规划表腾讯用户体验网站
  • 郑州响应式建站南京网站制作建设
  • 如何登陆公司网站后台关于要求建设网站的请示
  • 济南网站建站技术支持 东莞网站建设洋酒回收
  • 培训网站欣赏性做网站
  • wordpress跨站脚本攻击漏洞太原seo管理
  • 企业网站推广属于付费河东手机站
  • 贵州企业网站百度快速排名优化服务
  • 设计做网站哪家公司好响应式WordPress企业主题
  • app制作网站制作完域名指向另一个网站
  • 解析网站接口怎么做哪个云服务器便宜又好
  • 广州网站建设天维国内免费ip地址
  • 3g免费网站怎么在文档中做网站一点就开
  • 长春城投建设投资有限公司网站做网站需要啥
  • 赣州网站建设资讯百度广告投放电话
  • 网站建设历程重庆网站seo按天计费
  • 綦江网站建设关于配色的网站
  • 涉县移动网站建设报价杭州平面设计公司排行
  • 做京东网站需要哪些手续费一般做网站带宽选择多大的
  • 制作个人业务网站设计家网站
  • 广东 品牌网站建设提升学历报考什么专业比较好
  • 秦皇岛网站排名公司信息网招聘
  • 上海市建设工程安全生产协会网站做影视网站引流
  • 做自己的网站服务器多少钱河北省住建厅电子证书查询
  • 小企业网站建设的大品牌国外旅游网站排名