$ ls ~yifei/notes/

Kubernetes 初探——部署有状态服务

Posted on:

Last modified:

为了部署我们自己的应用,首先需要把基础设施部署上去,其中数据库就占了大头。有人说数据库 等应用不适合容器化部署,但是也有人认为所有的应用都适合容器化部署。

相关概念

  • PersistentVolume(PV) 是集群中的一块网络存储。和 Node 一样,也是集群的资源。PV 和 Docker Volume 类似。PV 包含了存储的实现细节,例如 NFS 或者其他的云存储系统。
  • PersistentVolumeClaim(PVC) 是用户的一个请求。Pod 消费 Node 资源,PVC 则消费 PV 资源。 Pod 申请 CPU 和内存;PVC 申请特定的尺寸和访问模式的存储资源。
  • StatefulSet. Deployment 是无状态的应用,而 StatefulSets 则是有状态的应用。
  • ConfigMap 用来保存非密码的配置。configmap 以配置文件或者环境变量等方式挂载到 Pod 中
  • Secret 用来保存密码等私密数据。
  • Init Container 是用于初始化 Deployment 的容器。

当集群中没有 PV 能够满足 PVC 的请求时,如果配置允许,k8s 会动态创建 PV。

PV 的读写权限有:

  • ReadWriteOnce,只能挂载到一个 Node 读写
  • ReadOnlyMany,可以只读挂载到多个 Node 上
  • ReadWriteMany,可以挂载到多个 Node 读写

Stateful Sets vs Deployments + PVC

Deployments 加上 volumes 之后和 statefulsets 还有什么区别呢?

statefulsets 中每个 pod 的名字都是有规律的 xxx-n,不像 deployment 中会随机生成一个 xxx-yyy 的名字。statefulsets 中还可以指定 pod 的启停顺序等。

deployment 中指定的 PVC 是所有副本共享的,所以你的存储必须是 ReadWriteMany/ReadOnlyMany, 而在 statefulsets 中,使用的是 volumnClaimTemplates,每个副本对应一个单独的存储,所以, 可以使用 ReadWriteOnce 类型。

对于只需要单个 Pod 的服务,使用 deployment 似乎问题不大。但是对于需要集群支持的服务,例如 数据库,显然还是应该使用 statefulsets。

参考

  1. 使用 PVC 和 Deployment 部署单实例 MySQL 集群
  2. https://stackoverflow.com/questions/41732819/why-statefulsets-cant-a-stateless-pod-use-persistent-volumes
  3. 使用普通 Deployment 部署单节点 mysql
  4. https://kubernetes.io/cn/docs/tutorials/stateful-application/basic-stateful-set/
  5. 如何使用 ConfigMap
  6. Secret 文档
  7. https://stackoverflow.com/questions/41583672/kubernetes-deployments-vs-statefulsets
  8. https://jimmysong.io/posts/kubernetes-persistent-volume/
  9. https://kubernetes.io/docs/concepts/storage/volumes/
  10. https://mp.weixin.qq.com/s?__biz=MzkwOTIxNDQ3OA==&mid=2247532479&idx=1&sn=3d061b3cd632cfdd3d4915ba134b7642
  11. https://www.cnblogs.com/baoshu/p/13281876.html
  12. https://www.baeldung.com/ops/kubernetes-deployment-vs-statefulsets
WeChat Qr Code

© 2016-2022 Yifei Kong. Powered by ynotes

All contents are under the CC-BY-NC-SA license, if not otherwise specified.

Opinions expressed here are solely my own and do not express the views or opinions of my employer.

友情链接: MySQL 教程站