四. k8s--pod控制器

悠悠 2023-08-17 16:33 347阅读 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只支持基于等式的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。

  1. apiVersion: apps/v1
  2. kind: ReplicaSet
  3. metadata:
  4. name: myapp
  5. namespace: default
  6. spec:
  7. replicas: 2
  8. selector:
  9. matchLabels:
  10. app: myapp
  11. release: canary
  12. template:
  13. metadata:
  14. name: myapp-pod
  15. labels:
  16. app: myapp
  17. release: canary
  18. environment: qa
  19. spec:
  20. containers:
  21. - name: myapp-container
  22. image: ikubernetes/myapp:v1
  23. ports:
  24. - name: http
  25. containerPort: 80

pod控制器——Deployment

Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController来方便的管理应用。典型的应用场景包括:

  • 定义Deployment来创建Pod和ReplicaSet
  • 滚动升级和回滚应用

    1. kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1 #更新镜像
    2. kubectl rollout undo deployment/nginx-deployment #回滚
  • 扩容和缩容

    1. kubectl scale deployment nginx-deployment --replicas 10 #扩容或者缩容均由scale指定replicas数量实现
    2. 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。
  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: myapp-deploy
  5. namespace: default
  6. spec:
  7. replicas: 2
  8. selector:
  9. matchLabels:
  10. app: myapp
  11. release: canary
  12. template:
  13. metadata:
  14. labels:
  15. app: myapp
  16. release: canary
  17. spec:
  18. containers:
  19. - name: myapp
  20. image: ikubernetes/myapp:v1
  21. ports:
  22. - name: http
  23. 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%。
  1. kubectl rollout history deployment myapp-deploy #查看滚动历史
  2. master $ kubectl rollout history deployment myapp-deploy
  3. deployment.extensions/myapp-deploy
  4. REVISION CHANGE-CAUSE
  5. 1 <none>
  6. 2 <none>

修改控制器信息, 除了直接修改yaml文件外, 还可以使用patch命令

  1. kubectl patch deployments myapp-deploy -p '{"spec":{"replicas":5}}'
  2. 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等
  1. apiVersion: apps/v1
  2. kind: DaemonSet
  3. metadata:
  4. name: filebeat-ds
  5. namespace: default
  6. spec:
  7. selector:
  8. matchLabels:
  9. app: filebeat
  10. release: stable
  11. template:
  12. metadata:
  13. labels:
  14. app: filebeat
  15. release: stable
  16. spec:
  17. containers:
  18. - name: filebeat
  19. image: ikubernetes/filebeat:5.6.5-alpine
  20. env:
  21. - name: REDIS_HOST
  22. value: redis.default.svc.cluster.local
  23. - name: REDIS_LOG_LEVEL
  24. value: info

转载于:https://www.cnblogs.com/peitianwang/p/11436278.html

发表评论

表情:
评论列表 (有 0 条评论,347人围观)

还没有评论,来说两句吧...

相关阅读

    相关 K8sPod资源基础管理操作

    Pod是kubernets API中的核心资源类型,它可以定义在JSON或YAML格式的资源清单中,由资源管理命令进行陈述式或声明式管理。Pod是一组容器的集合,这些容器共享N

    相关 k8sJob控制器

    Job控制器用于调配pod对象运行一次性任务,容器中的进程在正常运行结束后不会对其进行重启,而是将pod对象置于completed状态。若容器中的进程因错误而终止,则需要依据配

    相关 k8spod探测

    一、pod存活性探测 pod spec为容器列表中的相应容器定义其专用的探针即可启用存活性探测,目前,k8s的容器支持存活性探测的方法包含:ExecAction、TCPSoc