K8S原理剖析:工作负载原理剖析和实践

Kubernetes的魔法

Kubernetes是容器化应用程序模式的平台。这些模式使应用程序更易于部署,管理,扩展和从故障中恢复 - 这是”魔法”。

大纲 

• 无状态模式
• 有状态模式
• 守护进程模式
• 批处理模式

无状态模式

不必为你的应用保持状态/持久化数据
• 典型应用代表: Nginx, Tomcat
• Replication Controller
• ReplicaSet
• Deployment

Replication Controller

ReplicaSet

Deployment

Deployment的常见用法

• 升级/回滚
kubectl set resources deployment nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
kubectl rollout history deployment/nginx-deployment --revision=2
kubectl rollout undo deployment/nginx-deployment --to-revision=2


• 暂停/恢复
kubectl rollout pause deployment/nginx-deployment
kubectl rollout resume deploy/nginx-deployment


• 弹性、按比例扩/缩容
kubectl scale deployment nginx-deployment --replicas=10
kubectl autoscale deployment nginx-deployment --min=10 --max=15 --cpu-percent=80 # 需要和HPA联动
maxSurge=3; 25%(默认)
maxUnavailable=2; 25%(默认)

有状态模式

• 典型应用: Zookeeper, MongoDB, MySQL, etcd
• StatefulSet(曾用名: PetSet)
• StatefulSet的Pod和普通Pod区别: 有身份的!
StatefulSet身份三要素:

  • - 域名(网络) < - 容器IP易变
  • - PVC(存储)
  • - Pod Name(主机名)

• 配合headless service, PVC一起使用
• 严格的启动/删除顺序: 0, 1, 2…

守护进程模式

典型应用: fluentd, linkderd, ceph, kube-proxy
DaemonSet:保证每个节点总是运行一个Pod实例

  • - NodeSelector或NodeAffinity指定Node
  • - 经过( 1.11 Alpha特性) / 不经过调度器(不管Node状态)
  • - 支持滚动升级
  • - 支持级联/非级联删除

批处理模式

典型应用:并发执行的作业 – batch job

  • - 相关但独立的工作项:发邮件、数据扫描、文件转码

Job

  • - 保证指定数量Pod成功运行结束 - completions
  • - 支持并行 - parallelism
  • - 支持错误自动重试( 10s, 20s, 40s,… 6min)
  • - 删除Job会触发对应Pod删除

CronJob

  • - 基于时间调度的Job( Cron格式
  • - 用户可以暂停/恢复Job的周期性调度 .spec.suspend={true,false}
  • - 管理Job -> Pod

Job

Job常见使用方法

做不同的事情

  • - 扩展Job Expansion,传入参数、环境变量

做同样的事情

  • - 工作队列形式, 与Work Queue( RabbitMQ)结合

CronJob

K8S工作负载总结

  • 无状态模式: 使用Deployment提供高可用、弹性扩/缩容、升级 /回滚
  • 有状态模式:使用StatefulSet提供一致性, Pod的唯一/粘性的身份标识、存储,按序部署、扩缩容
  • 守护进程模式:一个节点部署一个(可自定义节点范围)
  • 批处理模式:并行跑多个Pod,并且保证都成功返回
     
发布了389 篇原创文章 · 获赞 1041 · 访问量 163万+

猜你喜欢

转载自blog.csdn.net/fly910905/article/details/103793632
今日推荐