首页 > 其他分享 >Pod控制器详解(StatefulSet)

Pod控制器详解(StatefulSet)

时间:2022-11-21 20:13:45浏览次数:47  
标签:StatefulSet Service pc nginx 详解 Pod pod

StatefulSet(有状态)

概述

无状态应用:

认为Pod都是一样的。
没有顺序要求。
不用考虑在哪个Node节点上运行。
随意进行伸缩和扩展。

有状态应用:

有顺序的要求。
认为每个Pod都是不一样的。
需要考虑在哪个Node节点上运行。
需要按照顺序进行伸缩和扩展。
让每个Pod都是独立的,保持Pod启动顺序和唯一性。

StatefulSet是Kubernetes提供的管理有状态应用的负载管理控制器。

StatefulSet部署需要HeadLinessService(无头服务)

为什么需要HeadLinessService(无头服务)?
在用Deployment时,每一个Pod名称是没有顺序的,是随机字符串,因此是Pod名称是无序的,但是在StatefulSet中要求必须是有序 ,每一个Pod不能被随意取代,Pod重建后pod名称还是一样的。
而Pod IP是变化的,所以是以Pod名称来识别。Pod名称是Pod唯一性的标识符,必须持久稳定有效。这时候要用到无头服务,它可以给每个Pod一个唯一的名称 。
StatefulSet常用来部署RabbitMQ集群、Zookeeper集群、MySQL集群、Eureka集群等。

创建StatefulSet

创建pc-stateful.yaml文件,内容如下

apiVersion: v1
kind: Service
metadata:
  name: service-headliness
  namespace: dev
spec:
  selector:
    app: nginx-pod
  clusterIP: None # 将clusterIP设置为None,即可创建headliness Service
  type: ClusterIP
  ports:
    - port: 80 # Service的端口
      targetPort: 80 # Pod的端口
---

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: pc-statefulset
  namespace: dev
spec:
  replicas: 3
  serviceName: service-headliness
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
        - name: nginx
          image: nginx:1.17.1
          ports:
            - containerPort: 80

创建StatefulSet

[root@master ~]# vim pc-stateful.yaml
[root@master ~]# kubectl create -f pc-stateful.yaml

[root@master ~]# kubectl get statefulset pc-statefulset -n dev -o wide
[root@master ~]# kubectl get pod -n dev -o wide
[root@master ~]# kubectl get svc -n dev

[root@master ~]# kubectl delete -f pc-stateful.yaml

Deployment和StatefulSet的区别
Deployment和StatefulSet的区别:Deployment没有唯一标识而StatefulSet有唯一标识。
StatefulSet的唯一标识是根据主机名+一定规则生成的。
StatefulSet的唯一标识是主机名.无头Service名称.命名空间.svc.cluster.local。
StatefulSet的金丝雀发布

StatefulSet支持两种更新策略:OnDelete和RollingUpdate(默认),其中OnDelete表示删除之后才更新,RollingUpdate表示滚动更新。

updateStrategy:
  rollingUpdate: # 如果更新的策略是OnDelete,那么rollingUpdate就失效
    partition: 2 # 表示从第2个分区开始更新,默认是0
  type: RollingUpdate /OnDelete # 滚动更新

示例:pc-statefulset.yaml

apiVersion: v1
kind: Service
metadata:
  name: service-headliness
  namespace: dev
spec:
  selector:
    app: nginx-pod
  clusterIP: None # 将clusterIP设置为None,即可创建headliness Service
  type: ClusterIP
  ports:
    - port: 80 # Service的端口
      targetPort: 80 # Pod的端口
---

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: pc-statefulset
  namespace: dev
spec:
  replicas: 3
  serviceName: service-headliness
  selector:
    matchLabels:
      app: nginx-pod
  template:
    metadata:
      labels:
        app: nginx-pod
    spec:
      containers:
        - name: nginx
          image: nginx:1.17.1
          ports:
            - containerPort: 80
            
  updateStrategy:
    rollingUpdate:
      partition: 0
    type: RollingUpdate              

参考

黑马B站k8s课程https://www.bilibili.com/video/BV1Qv41167ck/
https://gitee.com/yooome/golang/blob/main/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B-%E8%B0%83%E6%95%B4%E7%89%88/k8s%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B.md
https://www.yuque.com/fairy-era/yg511q/xyqxge

标签:StatefulSet,Service,pc,nginx,详解,Pod,pod
From: https://www.cnblogs.com/gys001/p/16912983.html

相关文章

  • RDMA 架构与实践(技术详解(一):RDMA概述)
    RDMA,即RemoteDirectMemoryAccess,是一种绕过远程主机OSkernel访问其内存中数据的技术,概念源自于DMA技术。在DMA技术中,外部设备(PCIe设备)能够绕过CPU直接访问......
  • Rockwell EDI 850 采购订单报文详解
    罗克韦尔(Rockwell)自动化(中国)有限公司(NYSE:ROK)是全球最大的致力于工业自动化与信息化的公司,致力于帮助客户提高生产力,以及世界可持续发展。罗克韦尔自动化总部位于美国......
  • 万字详解 Java 线程安全,面试必备!
    来源:blog.csdn.net/u014454538/article/details/985158071.Java中的线程安全Java线程安全:狭义地认为是多线程之间共享数据的访问。Java语言中各种操作共享的数据有5种......
  • go 语言 http包详解
      首先,熟悉http协议的都知道,http协议是基于TCP实现的。 http服务器的工作方式大概就是监听socket端口,接受连接,获取到请求,处理请求,返回响应。 所以,对应的会有几个部分......
  • bochs调试方法与指令详解
    ​bochs调试FAQ:一基本调试命令1.       Q:如何从引导扇区开始设置断点?A:BIOS被载入内存中运行,其引导扇区的地址一般都是在0x7c00,因为在实模式下,​​逻辑地址......
  • 详解谷歌浏览器 performance 选项卡
    本文要点详细介绍谷歌浏览器performance选项卡的各个指标,让你知道如何查看网页性能。谷歌浏览器版本为:79.0.3945.117(正式版本)(64位)。性能分析操作流程1.在谷歌浏览......
  • nginx中request_time和upstream_response_time详解
    背景 最近监控报警有短暂的502,赶紧分析问题原因,查看nginx的access_log发现短暂报警的request_time比较大,但是upstream_response_time有2个值,一个比较小,一个比较大,日志如......
  • mysql中explain分析sql详解
     Explain举例mysql> explain select * from event; +—-+————-+——-+——+—————+——+———+——+——+——-+ | id | select_type | table | ......
  • K8S的pod展示镜像信息
    K8S的pod展示镜像信息 https://kubernetes.io/zh/docs/tasks/access-application-cluster/list-all-running-container-images/kubectlgetpods-ojsonpath='{r......
  • mysql中长事务详解
    什么是长事务运行时间比较长,长时间未提交的事务,也可以称之为大事务。这类事务往往会造成大量的阻塞和锁超时,容易造成主从延迟,要尽量避免使用长事务。下面我将演示下如何开启......