028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

kubernets之statefulset

StatefulSet是控制器的一种,可以创建独特身份的POD。它提供有序的部署和伸缩。

创新互联建站是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,小程序设计,十年建站对成都小搅拌车等多个领域,拥有丰富的网站制作经验。

使用statefulset

statefulset对以下应用是有价值的。

上述描述中,稳定等同于在POD再次调度之后可以持久。如果应用不需要稳定的认证或有序的部署、删除、伸缩,你可以使用无状态的副本(例如Deployment或ReplicaSet)来部署你的应用,这将更适合无状态应用。

使用限制

组成部分

---
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: webspec:
    serviceName: "nginx"
    replicas: 3
    template:
        metadata:
              labels:
                 app: nginx
        spec:
            terminationGracePeriodSeconds: 10
            containers:
            - name: nginx
               p_w_picpath: 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被调度到哪个节点上。

1)序号索引

Statefulset有N个实例,每个POD将被分配一个唯一的整数序号,范围在[1,N]。

2)稳定的网络ID

StatefulSet的每个POD的名称是由StatefulSet的名称和Pod序号组成。POD名称的格式为$(statefulset name)-$(ordinal)。上述示例中创建的POD名称为web-0,web-1,web-2。statefulset使用Headless Service控制POD的域名。service域名的格式为$(service name).$(namespace).svc.cluster.local,cluster.local为cluster domain。每个POD创建后会有一个匹配的域名,格式为$(podname).$(service_domain)。下表为示例,描述cluster domain、service name和statefulset name如何相互作用。

Cluster Domain        Service (ns/name)            StatefulSet (ns/name)        StatefulSet Domain     Pod DNS     Pod Hostname

cluster.local    default/nginx    default/web    nginx.default.svc.cluster.local    web-{0..N-1}.nginx.default.svc.cluster.local    web-{0..N-1}    

cluster.local    foo/nginx    foo/web    nginx.foo.svc.cluster.local    web-{0..N-1}.nginx.foo.svc.cluster.local    web-{0..N-1}    

kube.local    foo/nginx    foo/web    nginx.foo.svc.kube.local    web-{0..N-1}.nginx.foo.svc.kube.local    web-{0..N-1}   

3)稳定的存储

 kubernetes为每一个VolumeClaimTemplate创建一个PV。在上述nginx的示例中,每一个POD将获得一个大小为1G的PV。当POD被调度到一个节点上的时候,volumeMounts将通过与之绑定的PVC挂载PV。

说明:与PVC绑定的PV不会因POD或statefulset删除而删除,需要手动执行删除。

保证部署和伸缩

StatefulSet不应该指定pod.Spec.TerminationGracePeriodSeconds为0。这种做法是不安全的,强烈劝阻。为进一步解释,请参阅强制删除StatefulSet POD。

上面的nginx例子创建后,三个POD将按web-0 web-1 web-2顺序部署。web-1不会在web-0 running并ready之前部署,web-2直到web-1处于running并ready状态后才会开始部署。web-1 running且ready之后,但web-2还未启动,此时如果web-0故障,web-2将不会被启动,直到web-0成功被重启并达到running且ready的状态。

如果一个用户修改已部署的statefulset,例如replicas=1,web-2会先被终止。web-1将不会终止,直到web-2完全关闭和删除。web-2已经终止并完全关闭,但在web-1终止前,此时如果web-0故障,web-1将不会被终止,直到web-0处于running且ready的状态。



当前名称:kubernets之statefulset
当前地址:http://www.tsicrk.com/article/jgjooh.html

其他资讯

让你的专属顾问为你服务

0.6561s