Kubernetes服务中StatefulSets有什么用

67次阅读
没有评论

共计 3604 个字符,预计需要花费 10 分钟才能阅读完成。

丸趣 TV 小编给大家分享一下 Kubernetes 服务中 StatefulSets 有什么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

StatefulSets 在 v1.5 时还是个 beta 特性,它取代了 v1.4 的 PetSets 特性。PetSets 的用户可以参考 v1.5 的升级指导,将正在运行的 PeetSets 升级到 StatefulSets。
StatefulSet 是一个给 Pod 提供唯一标志的控制器,它可以保证部署和扩展的顺序。

使用 StatefulSet

当应用有以下任意要求时,StatefulSet 的价值就体现出来了。
● 稳定的、唯一的网络标识。
● 稳定的、持久化的存储。
● 有序的、优雅的部署和扩展。
● 有序的、优雅的删除和停止。
上面提到的点中,在 Pod 调度时,稳定性和持久化是同一个意思。如果一个应用不需要任何稳定的标识或顺序的部署、删除和扩展,那么你应该使用提供无状态备份的控制器来部署你的应用。诸如 Deployment 或者 ReplicaSet 可能更适合你的无状态服务需求。

限制

● StatefulSet 还是 beta 版本,Kubernetes v1.5 之前不可用。
● 和所有的 alpha/beta 资源一样,可以将 –runtime-config 选项传递给 apiserver,来禁止 StatefulSet。
● 给定 Pod 的存储必须是:基于请求存储等级(Storage Class)的 PersistentVolume Provisioner,或者是由管理员预先配置。
● 删除和(或)减少 StatefulSet 副本,不会删除 StatefulSet 相关的卷。这样做是为了保证数据安全,比自动的清除 StatefulSet 相关资源更有价值。● 当前 StatefulSet 需要 Headless 服务来负责 Pod 的网络一致性。你需要创建该服务。
● 当前,更新已经存在的 StatefulSet 需要手动执行。

组件

下面的示例演示了 StatefulSet 的组件。
● 一个 Headless 服务,名为 nginx,用来控制网络域。
● StatefulSet,名为 web,在同一个 Pod 中起 3 个 nginx 容器的副本。
● volumeClaimTemplates 使用 PV 供应商的 PV 来提供稳定的存储。

---
apiVersion: v1
kind: Service
metadata:
 name: nginx
 labels:
 app: nginx
spec:
 ports:
 - port: 80
 name: web
 clusterIP: None
 selector:
 app: nginx
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
 name: web
spec:
 serviceName:  nginx 
 replicas: 3
 template:
 metadata:
 labels:
 app: nginx
 spec:
 terminationGracePeriodSeconds: 10
 containers:
 - name: nginx
 image: gcr.io/google_containers/nginx-slim:0.8
 ports:
 - containerPort: 80
 name: web
 volumeMounts:
 - name: www
 mountPath: /usr/share/nginx/html
 volumeClaimTemplates:
 - metadata:
 name: www
 annotations:
 volume.beta.kubernetes.io/storage-class: anything
 spec:
 accessModes: [  ReadWriteOnce  ]
 resources:
 requests:
 storage: 1Gi

Pod 一致性

StatefulSet Pod 有着唯一的一致性,该一致性包含次序(启动和停止次序)、稳定的网络一致性,和稳定的网络。该一致性和 Pod 紧密相关,无论 Pod 被调度到哪个 node 节点上。

次序索引

对于有 N 个副本的 StatefulSet,StatefulSet 的每个 Pod 都被分配了一个数字序号,序号在 [0,N) 的范围内,并且在 Set 中是唯一的。

稳定的网络 ID

StatefulSet 中每个 Pod 都从 StatefulSet 的名称和 Pod 的序号派生其主机名。组成的 hostname 的模式为 $(statefulset 名称)-$(序号)。上面的例子会创建名为 web-0,web-1,web-2。StatefulSet 可以以使用 Headless 服务来控制 Pod 的域,这个域使用的格式为:$(service name).$(namespace).svc.cluster.local,其中,“cluster.local”指的是集群域。Pod 被创建后,每个 Pod 都会得到一个匹配的 DNS 子域,格式为 $(podname).$(governing service domain),其中的“governing service”是在 StatefulSet 中通过 serviceName 字段来定义的。
这里有几个示例,可以展示 StatefulSet 的 Pod 的 DNS 组成。

Cluster DomainService (ns/name)StatefulSet (ns/name)StatefulSet DomainPod DNSPod Hostnamecluster.localdefault/nginxdefault/webnginx.default.svc.cluster.localweb-{0..N-1}.nginx.default.svc.cluster.localweb-{0..N-1}cluster.localfoo/nginxfoo/webnginx.foo.svc.cluster.localweb-{0..N-1}.nginx.foo.svc.cluster.localweb-{0..N-1}kube.localfoo/nginxfoo/webnginx.foo.svc.kube.localweb-{0..N-1}.nginx.foo.svc.kube.localweb-{0..N-1} 注意:除非另外的配置,集群域就会被设置为 cluster.local。

稳定的存储

Kubernetes 为每个 VolumeClaimTemplate 创建一个 PV。在上面的 nginx 例子中,每个 Pod 会得到一个 PV,该 PV 的存储等级 (storagee class) 为 anything,大小为 1Gb。当 Pod 被调度到其他 node 节点上时,volumeMounts 会重新映射对应的 PVC。注意,当 Pod 或者 StatefulSet 被删除时,对应的 PV 和 PVC 不会被删除,这个删除操作必须手动来执行。

部署和扩展

● 对于拥有 N 个拷贝的 StatefulSet,当部署 Pod 时,它们会被顺序地创建(从 0 到 N -1)。
● 当 Pod 被删除时,它们被终止的顺序是从 N - 1 到 0。
● 当对 Pod 执行扩展操作时,它前面的 Pod 必须都处于 Running 和 Ready 状态。
● 当 Pod 被终止时,它所有的 successors 都必须被完全地关闭。
不应该将 StatefulSet 的 pod.Spec.TerminationGracePeriodSeconds 值设置为 0,因为该操作不安全,强烈不建议使用。若需要更深层次的解释,请参考强制删除 StatefulSet Pod。
当创建了上面的 nginx 示例后,会按顺序部署三个 Pod,名字依次为 web-0、web- 1 和 web-2。web–1 在 web- 0 变为 Running and Ready 之后才会再部署,同理,web- 2 也会等 web- 1 变为 Running and Ready 状态后才部署。如果在 web- 1 变为 Running and Ready 之后,但 web- 2 还没有启动之前,此时 web- 0 运行失败了,那么直到 web- 0 再次成功启动并变为 Running and Ready 之前,web- 2 都不会启动。
如果用户希望改变上面例子中 Pod 的个数,比如修改 replicas=1,那么 web- 2 首先被终止。直到 web- 2 完全被关闭和删除后,web- 1 才会被终止。如果在 web- 2 被终止和完全关闭后,但 web- 1 还没有被终止之前,此时 web- 0 运行出错了,那么直到 web- 0 再次变为 Running and Ready 状态之后,web- 1 才会被终止。

以上是“Kubernetes 服务中 StatefulSets 有什么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计3604字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)