有那些做任务的网站,wordpress uploads 权限,找工作一般上什么网站比较好,有代源码怎么做自己网站在K8s中#xff0c;StatefulSets将Pod部署成有状态的应用程序。通过使用StatefulSets控制器#xff0c;可以为Pod提供持久存储和持久的唯一性标识符。StatefulSets控制器与Deployment控制器不同的是#xff0c;StatefulSets控制器为管理的Pod维护了一个有粘性的标识符。无论… 在K8s中StatefulSets将Pod部署成有状态的应用程序。通过使用StatefulSets控制器可以为Pod提供持久存储和持久的唯一性标识符。StatefulSets控制器与Deployment控制器不同的是StatefulSets控制器为管理的Pod维护了一个有粘性的标识符。无论这些Pod如何被调度每个Pod的标识符都是永久不变的。这一特点可以满足一些特殊场景的需要例如使用存储卷为为Kubernetes集群提供持久型存储时可以使用StatefulSets控制器作为解决方案的一种。 视频讲解如下
【赵渝强老师】K8s中的有状态控制器StatefulSet 【赵渝强老师】有状态控制器StatefulSet 下表对比了无状态的控制器Deployment与有状态控的制器StatefulSets的主要异同。 下面列举了一些StatefulSets的典型应用场景
需要唯一的、稳定的网络标识符即Pod重新调度后其Pod名称和主机名不变。需要持久的、稳定的持久化存储即Pod重新调度后还是能访问到相同的持久化数据。需要优雅的、有序的部署应用和扩容缩容即Pod的部署和启动是顺序要求的在部署或者扩展的时候要依据定义的顺序依次依次进行。需要自动的、有序的滚动更新和回滚应用。 视频讲解如下
【赵渝强老师】有状态控制器StatefulSet的应用场景 【赵渝强老师】有状态控制器StatefulSet的应用场景
一、【实战】StatefulSets控制器的创建 下面通过一个示例来说明如何创建StatefulSets控制器。
1创建statefulsets-demo.yaml文件输入下面的内容
apiVersion: apps/v1
kind: StatefulSet
metadata:#StatefulSets控制器的名称name: statefulset-demo
spec:selector:matchLabels:#通过标签与Pod关联app: nginx #指定Service的名称serviceName: nginx-service replicas: 4template:metadata:labels:#定义Pod的标签app: nginx spec:terminationGracePeriodSeconds: 10containers:#定义Pod里容器的名称- name: nginx image: nginx:1.7.9ports:- containerPort: 80name: web提示参数.spec.terminationGracePeriodSeconds表示关闭或者删除Pod之前需要等待的时间。对于StatefulSets控制器来说不应将该参数设置为0。 这种做法是不安全的应该强烈阻止。 2执行命令创建StatefulSets。
kubectl apply -f statefulsets-demo.yaml3查看StatefulSets的信息如下图所示。
kubectl get statefulset,pod -o wide二、StatefulSets的扩容与缩容 由于StatefulSets中的所有Pod都具有唯一的网络标识符因此在对StatefulSets进行扩容与缩容时Kubernetes将严格按照下面的顺序进行 当创建具有N个副本的StatefulSets其中的每一个Pod将按照0…(N-1)的顺序依次创建。 当删除具有N个副本的StatefulSets其中的每一个Pod将按照(N-1)…0的逆序依次终止。 当StatefulSets的扩容操作应用到某一个Pod时Kubernetes将保证前面所有Pod的状态必须是Running或者Ready状态。 当StatefulSets的缩容操作应用到某一个Pod时Kubernetes将保证前面所有Pod必须完全关闭的状态。
2.1 StatefulSets的扩容过程 以statefulsets-demo.yaml创建的StatefulSets为例。当statefulset-demo的控制器被创建后StatefulSets控制器会按照pod/statefulset-demo-0、pod/statefulset-demo-1、pod/statefulset-demo-2和pod/statefulset-demo-3的顺序部署四个Pod。 当启动pod/statefulset-demo-1时pod/statefulset-demo-0的状态一定是Running或者Ready。同理在pod/statefulset-demo-1进入Running或者Ready状态前不会部署pod/statefulset-demo-2。如果pod/statefulset-demo-1已经处于Running或者Ready状态而pod/statefulset-demo-2尚未部署在此期间发生了pod/statefulset-demo-0运行失败那么pod/statefulset-demo-2 将不会被部署要等到pod/statefulset-demo-0部署完成并进入Running或者Ready状态后才会部署pod/statefulset-demo-2。
2.2 StatefulSets的缩容过程 当用户进行缩容操作的时候例如将参数replicas设置为1。首先被终止的是pod/statefulset-demo-3。在pod/statefulset-demo-3没有被完全停止和删除前pod/statefulset-demo-2不会被终止。当pod/statefulset-demo-3已被终止和删除但pod/statefulset-demo-2尚未被终止如果在此期间发生pod/statefulset-demo-1运行失败 那么就不会终止pod/statefulset-demo-2必须等到pod/statefulset-demo-0进入Running或者Ready状态后才会终止 pod/statefulset-demo-2。
三、StatefulSets的更新与回滚 StatefulSet的更新与滚动是通过设置字段.spec.updateStrategy的方式来实现。通过该参数的设置允许开发人员配置和禁用掉自动滚动更新Pod的容器、标签、资源请求或限制、以及注解。该参数的取值有以下两个 RollingUpdate这是默认的更新策略该策略将对StatefulSets控制器管理的所有Pod执行自动的滚动更新。 OnDelete该策略将不会自动更新StatefulSets管理的所有Pod。要实现Pod的更新必须手动删除旧的Pod以便让StatefulSets控制器创建新的Pod。该策略将按照与Pod终止相同的顺序进行更新每次更新一个Pod。