ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

38 k8s-15.有状态应用管理StatefulSet

2022-05-06 00:03:52  阅读:159  来源: 互联网

标签:kubectl StatefulSet 15 Service Eureka 38 sts eureka


15.有状态应用管理StatefulSet

StatefulSet(有状态集,缩写为sts)常用于部署有状态的且需要有序启动的应用程序,比如在进行SpringCloud项目容器化时,Eureka的部署是比较适合用StatefulSet部署方式的,可以给每个Eureka实例创建一个唯一且固定的标识符,并且每个Eureka实例无需配置多余的Service,其余Spring Boot应用可以直接通过Eureka的Headless Service即可进行注册。
Eureka的statefulset的资源名称是eureka,eureka-0 eureka-1 eureka-2
Service:headless service,没有ClusterIP eureka-svc
Eureka-0.eureka-svc.NAMESPACE_NAME eureka-1.eureka-svc …

StatefulSet主要用于管理有状态应用程序的工作负载API对象。比如在生产环境中,可以部署ElasticSearch集群、MongoDB集群或者需要持久化的RabbitMQ集群、Redis集群、Kafka集群和ZooKeeper集群等。

和Deployment类似,一个StatefulSet也同样管理着基于相同容器规范的Pod。不同的是,StatefulSet为每个Pod维护了一个粘性标识。这些Pod是根据相同的规范创建的,但是不可互换,每个Pod都有一个持久的标识符,在重新调度时也会保留,一般格式为StatefulSetName-Number。比如定义一个名字是Redis-Sentinel的StatefulSet,指定创建三个Pod,那么创建出来的Pod名字就为Redis-Sentinel-0、Redis-Sentinel-1、Redis-Sentinel-2。而StatefulSet创建的Pod一般使用Headless Service(无头服务)进行通信,和普通的Service的区别在于Headless Service没有ClusterIP,它使用的是Endpoint进行互相通信,Headless一般的格式为:

statefulSetName-{0…N-1}.serviceName.namespace.svc.cluster.local。

说明:

  •  serviceName为Headless Service的名字,创建StatefulSet时,必须指定Headless Service名称;
  •  0...N-1为Pod所在的序号,从0开始到N-1;
  •  statefulSetName为StatefulSet的名字;
  •  namespace为服务所在的命名空间;
  •  .cluster.local为Cluster Domain(集群域)。

 

1   StatefulSet注意事项

一般StatefulSet用于有以下一个或者多个需求的应用程序:

  • l  需要稳定的独一无二的网络标识符。
  • l  需要持久化数据。
  • l  需要有序的、优雅的部署和扩展。
  • l  需要有序的自动滚动更新。

 

15.1# 查看所有statefulsets信息
kubectl get sts -A
15.2#扩容sts#
01. 查看statefulsets信息
# kubectl get sts
kubectl get statefulsets
02.使用 kubectl scale 扩展副本数为3
# kubectl scale sts web --replicas=3
statefulset.apps/web scaled
03.列出当前命名空间下的全部 pod,并显示更详细的信息
[root@k8s-master01 ~]# kubectl get pod –owide

进入容器执行ping wget cat等测试命令均成功##
#kubectl exec –ti busybox –sh
#ping web-0.nginx
#cat insex.html

15.3#更新策略#
01.注意:可以使用来检查有状态集的滚动更新的状态。
kubectl rollout status sts/<name>
默认的更新策略是RollingUpdate,更新由下至上;
02.#打开一个窗口监控StatefulSet
可以动态直观的查看 pod的状态 (w=whatch)
#kubectl get pod -l app=nginx –w
同上kubectl get po -l app=nginx –w
03.#状态实时在变化Terminating-Pending-ContainerCreating-Running,
观察到更新是先从最下面的web-2开始,然后web-1,由下至上更新
04.另外一种策略类型:type: OnDelete

15.4 StatefulSet默认是级联删除
#kebectl get sts (假设有4个)
#kubectl delete sts web
#kubectl get pod
执行删除命令之后,之前的可以看到sts有4个pod,全部都自动删除了

15.5实现非级联删除,使用的不多,了解即可;
#kubectl delete sts web -–cascade=false

15.6 查看pod状态;
#kubectl delete pod web-2
#kebectl get web-2 –oyaml | grep image

搜索

StatefulSet(有状态集,缩写为sts)常用于部署有状态的且需要有序启动的应用程序,比如在进行SpringCloud项目容器化时,Eureka的部署是比较适合用StatefulSet部署方式的,可以给每个Eureka实例创建一个唯一且固定的标识符,并且每个Eureka实例无需配置多余的Service,其余Spring Boot应用可以直接通过Eureka的Headless Service即可进行注册。

Eureka的statefulset的资源名称是eureka,eureka-0 eureka-1 eureka-2

Service:headless service,没有ClusterIP                eureka-svc

Eureka-0.eureka-svc.NAMESPACE_NAME  eureka-1.eureka-svc …

StatefulSet(有状态集,缩写为sts)常用于部署有状态的且需要有序启动的应用程序,比如在进行SpringCloud项目容器化时,Eureka的部署是比较适合用StatefulSet部署方式的,可以给每个Eureka实例创建一个唯一且固定的标识符,并且每个Eureka实例无需配置多余的Service,其余Spring Boot应用可以直接通过Eureka的Headless Service即可进行注册。
Eureka的statefulset的资源名称是eureka,eureka-0 eureka-1 eureka-2
Service:headless service,没有ClusterIP eureka-svc
Eureka-0.eureka-svc.NAMESPACE_NAME eureka-1.eureka-svc …

复制

标签:kubectl,StatefulSet,15,Service,Eureka,38,sts,eureka
来源: https://www.cnblogs.com/kevin306/p/16226973.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有