四. k8s--pod控制器 悠悠 2023-08-17 16:33 102阅读 0赞 目录 * pod控制器----ReplicaSet * 什么是ReplicaSet? * pod控制器----Deployment * Deployment是什么? * pod控制器----DaemonSet控制器 > 统一使用kubectl apply -f test.yaml格式来创建控制器, 和create相比, apply可以通过读取etcd当中保存的状态对比新的yaml和之前版本的区别, 可以直接根据新的yaml文件更新相应的控制器, 而create是一次性的, 创建一次之后在执行会报错 ## pod控制器----ReplicaSet ## ### 什么是ReplicaSet? ### > ReplicaSet是下一代复本控制器。ReplicaSet和 [*Replication Controller*][Replication Controller]之间的唯一区别是现在的选择器支持。*Replication Controller*只支持基于等式的selector(env=dev或environment!=qa),但ReplicaSet还支持新的,基于集合的selector(version in (v1.0, v2.0)或env notin (dev, qa))。在试用时官方推荐ReplicaSet。 > > 大多数[kubectl][]支持*Replication Controller*的命令也支持ReplicaSets。[rolling-update][]命令有一个例外 。如果您想要滚动更新功能,请考虑使用Deployments。此外, rolling-update命令是必须的,而Deployments是声明式的,因此我们建议通过rollout命令使用Deployments。 > > 虽然ReplicaSets可以独立使用,但是今天它主要被 [Deployments][] 作为协调[pod][]创建,删除和更新的机制。当您使用Deployments时,您不必担心管理他们创建的ReplicaSets。Deployments拥有并管理其ReplicaSets。 apiVersion: apps/v1 kind: ReplicaSet metadata: name: myapp namespace: default spec: replicas: 2 selector: matchLabels: app: myapp release: canary template: metadata: name: myapp-pod labels: app: myapp release: canary environment: qa spec: containers: - name: myapp-container image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80 ## pod控制器----Deployment ## > Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController来方便的管理应用。典型的应用场景包括: > > * 定义Deployment来创建Pod和ReplicaSet > * 滚动升级和回滚应用 > > kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 #更新镜像 > kubectl rollout undo deployment/nginx-deployment #回滚 > * 扩容和缩容 > > kubectl scale deployment nginx-deployment --replicas 10 #扩容或者缩容均由scale指定replicas数量实现 > kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80 > * 暂停和继续Deployment ### Deployment是什么? ### > Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新。 > > 你只需要在Deployment中描述你想要的目标状态是什么,Deployment controller就会帮你将Pod和Replica Set的实际状态改变到你的目标状态。你可以定义一个全新的Deployment,也可以创建一个新的替换旧的Deployment。 > > 一个典型的用例如下: > > * 使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。 > * 然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。 > * 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。 > * 扩容Deployment以满足更高的负载。 > * 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。 > * 根据Deployment 的状态判断上线是否hang住了。 > * 清除旧的不必要的ReplicaSet。 apiVersion: apps/v1 kind: Deployment metadata: name: myapp-deploy namespace: default spec: replicas: 2 selector: matchLabels: app: myapp release: canary template: metadata: labels: app: myapp release: canary spec: containers: - name: myapp image: ikubernetes/myapp:v1 ports: - name: http containerPort: 80 > Rolling Update: > > * Max Unavailable,.spec.strategy.rollingUpdate.maxUnavailable 是可选配置项,用来指定在升级过程中不可用Pod的最大数量。该值可以是一个绝对值(例如5),也可以是期望Pod数量的百分比(例如10%)。通过计算百分比的绝对值向下取整。例如,该值设置成30%,启动rolling update后旧的ReplicatSet将会立即缩容到期望的Pod数量的70%。新的Pod ready后,随着新的ReplicaSet的扩容,旧的ReplicaSet会进一步缩容,确保在升级的所有时刻可以用的Pod数量至少是期望Pod数量的70% > * Max Surge,.spec.strategy.rollingUpdate.maxSurge 是可选配置项,用来指定可以超过期望的Pod数量的最大个数。该值可以是一个绝对值(例如5)或者是期望的Pod数量的百分比(例如10%)。当MaxUnavailable为0时该值不可以为0。通过百分比计算的绝对值向上取整。默认值是1。例如,该值设置成30%,启动rolling update后新的ReplicatSet将会立即扩容,新老Pod的总数不能超过期望的Pod数量的130%。旧的Pod被杀掉后,新的ReplicaSet将继续扩容,旧的ReplicaSet会进一步缩容,确保在升级的所有时刻所有的Pod数量和不会超过期望Pod数量的130%。 kubectl rollout history deployment myapp-deploy #查看滚动历史 master $ kubectl rollout history deployment myapp-deploy deployment.extensions/myapp-deploy REVISION CHANGE-CAUSE 1 <none> 2 <none> 修改控制器信息, 除了直接修改yaml文件外, 还可以使用patch命令 kubectl patch deployments myapp-deploy -p '{"spec":{"replicas":5}}' kubectl patch deploy myapp-deploy -p '{"spec":{"strategy":{"rollingUpdate":{"maxSurge":1,"maxUnavailable":0}}}}' ## pod控制器----DaemonSet控制器 ## > DaemonSet保证在每个Node上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。典型的应用包括: > > * 日志收集,比如fluentd,logstash等 > * 系统监控,比如Prometheus Node Exporter,collectd,New Relic agent,Ganglia gmond等 > * 系统程序,比如kube-proxy, kube-dns, glusterd, ceph等 apiVersion: apps/v1 kind: DaemonSet metadata: name: filebeat-ds namespace: default spec: selector: matchLabels: app: filebeat release: stable template: metadata: labels: app: filebeat release: stable spec: containers: - name: filebeat image: ikubernetes/filebeat:5.6.5-alpine env: - name: REDIS_HOST value: redis.default.svc.cluster.local - name: REDIS_LOG_LEVEL value: info 转载于:https://www.cnblogs.com/peitianwang/p/11436278.html [Replication Controller]: https://www.kubernetes.org.cn/replication-controller-kubernetes [kubectl]: https://www.kubernetes.org.cn/installkubectl [rolling-update]: https://kubernetes.io/docs/user-guide/kubectl/v1.7/#rolling-update [Deployments]: https://www.kubernetes.org.cn/deployment [pod]: https://www.kubernetes.org.cn/kubernetes-pod
还没有评论,来说两句吧...