k8s statefulSet 学习笔记

文章目录

  • 缩写: sts
  • 创建sts
  • 扩缩容
  • 金丝雀发布
  • OnDelete 删除时更新

缩写: sts

通过 kubectl api-resources 可以查到:

NAME SHORTNAMES APIVERSION NAMESPACED KIND
statefulsets sts apps/v1 true StatefulSet
web-sts.yaml
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web-sts-svc
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName:  "nginx"
  replicas: 2
  updateStrategy:
    rollingUpdate:
      partition: 0
    type: RollingUpdate
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
          name: web

创建sts

kubectl create -f web-sts.yaml

在这里插入图片描述

扩缩容

扩容:kubectl scale sts web --replicas=5

k8s statefulSet 学习笔记_第1张图片

缩容:kubectl scale sts web --replicas=3

k8s statefulSet 学习笔记_第2张图片

金丝雀发布

更新逻辑:
金丝雀发布会将大于等于partition的pod更新为最新设置的镜像。小于partition的pod则保留不动。
这样的更新方式就可以让新旧并存,防止新镜像有问题而导致整个服务不可用。

  1. 首先创建一个带有5个pod的sts

kb describe sts web 查看sts的状态信息, 成功创建了5个pod
k8s statefulSet 学习笔记_第3张图片
每个pod的镜像信息如下:
k8s statefulSet 学习笔记_第4张图片

  1. 修改sts的更新策略

kb edit sts web, 找到partition,把它从0改为2。
k8s statefulSet 学习笔记_第5张图片

  1. 修改镜像,开始更新。

kb edit sts web,修改image。保存退出。
k8s statefulSet 学习笔记_第6张图片

  1. 查看更新结果。

kb describe sts web,删除了pod2,3,4。并创建了新的pod。
k8s statefulSet 学习笔记_第7张图片

再次查看更新后的镜像
k8s statefulSet 学习笔记_第8张图片

OnDelete 删除时更新

设置更新策略为OnDelete之后,pod被删除后重建时就会更新为最新的的镜像。
这样可以精确指定要更新的pod

  1. 创建带有两个pod的sts
    k8s statefulSet 学习笔记_第9张图片
    在这里插入图片描述

  2. kubectl edit sts web 修改更新策略为OnDelete;edit命令是运行时修改,也可以在yaml提前改好。
    在这里插入图片描述

  3. kubectl edit sts web 修改镜像为1.9.1,保存退出。
    k8s statefulSet 学习笔记_第10张图片

  4. 再次检查pod的镜像信息,这个时候镜像还是老的,没有变化。
    在这里插入图片描述

  5. kb delete po web-0 删除pod web-0,并再检查新创建的pod-0的镜像信息。可以看到新创建的pod镜像是1.9.1
    在这里插入图片描述

你可能感兴趣的:(k8s,kubernetes,statefulset)