【k8s资源调度-StatefulSet】

1、部署对象StatefulSet资源(无状态应用)

在这里插入图片描述

StatefulSet针对的是有状态应用,有状态应用会对我们的当前pod的网络、文件系统等有关联。

2、配置文件如下

StatefulSet资源的配置文件粗略如下,如下的配置信息包含了数据卷,目前还未涉及到数据卷的信息,可以在创建StatefulSet的时候把数据卷的信息先删除。如果不删除这个数据卷的信息,创建的StatefulSet会卡在没有数据卷的信息导致无法ready。

---
apiversion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1 # StatefulSet 资源的版本
kind: StatefulSet  #  StatefulSet 类型的资源
metadata:    # 元数据
  name: web  # StatefulSet的名字
spec:
  serviceName: "nginx"   # 使用哪个service服务来管理dns
  replicas: 2   # 期望副本数
  selector:   # 选择器
    matchLabels: # 按照标签匹配
      app: nginx  # 选择器名字
  template:     # pod 的模板
    metadata:    # 元数据
      labels:    # pod的标签
        app: nginx  # 标签值是:app=nginx
    spec:         # pod的期望信息
      containers:   # pod的容器信息
      - name: nginx   # pod的名字
        image: nginx:1.20   # 容器镜像信息
        ports:             # 端口
        - containerPort: 80   # 容器的端口
          name: web       # 容器内端口的名字



# 以下信息可以不先不使用  -----------------------------------------------
        volumeMounts:  # 加载一个数据卷
        - name: www    # 加载的数据卷的名字是www
          mountPath: /usr/share/nginx/html  # 加载到容器中的哪个目录
volumeclaimTemplates:  # 数据卷模板
  metadata:   #数据卷描述
    name: www   #数据卷的名称
    annotations:  #数据卷的注解
      volume.alpha.kubernetes.io/storage-class:anything
  spec: #数据卷的规约
    accessModes:["ReadWriteOnce"] # 访问模式
    resources:
      requests:
        storage: 1Gi  # 需要1G的存储资源

3、创建StatefulSet资源

3.1 根据上文的配置文件创建StatefulSet资源

[root@k8s-master ~]# kubectl create -f web.yaml
service/nginx created
statefulset.apps/web created

3.2 查看创建的StatefulSet资源的信息

通过get选项可以看到statefulset的资源已经创建完成

# 查看statefulset的信息
[root@k8s-master ~]# kubectl get sts
NAME   READY   AGE
web    2/2     58s

3.3 查看pod信息(pod名字是有序的)

这时候pod的名字很有序,不像deploy创建的pod,名字都是一个随机值。

# 查看pod的信息,这时候pod的名字很有序,不像deploy创建的pod,名字都是一个随机值。
[root@k8s-master ~]# kubectl get pod
NAME    READY   STATUS    RESTARTS   AGE
web-0   1/1     Running   0          64s
web-1   1/1     Running   0          63s

3.4 查看service信息

查看service的信息,我们刚创建的service名字是nginx,目前service还是无ip的信息,因为我们目前还未做具体的绑定的操作。(绑定service和外部的信息)目前只是映射到容器内而已,我们有一个基于服务名访问就可以了(可以通过k8s集群中创建一个新的pod来访问)。

# 查看service的信息,我们刚创建的service名字是nginx,目前service还是无ip的信息,因为我们目前还未做具体的绑定的操作。(绑定service和外部的信息)目前只是映射到容器内而已,我们有一个基于服务名访问就可以了
[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP   4d4h
nginx        ClusterIP   None         <none>        80/TCP    70s

3.5 查看StatefulSet资源的描述信息

从如下的信息中可以看到,创建的StatefulSet资源已经创建成功

[root@k8s-master ~]# kubectl describe sts web
Name:               web
Namespace:          default
CreationTimestamp:  Sat, 24 Feb 2024 02:20:14 +0800
Selector:           app=nginx
Labels:             <none>
Annotations:        <none>
Replicas:           2 desired | 2 total
Update Strategy:    RollingUpdate
  Partition:        0
Pods Status:        2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.20
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Volume Claims:    <none>
Events:
  Type    Reason            Age   From                    Message
  ----    ------            ----  ----                    -------
  Normal  SuccessfulCreate  3m4s  statefulset-controller  create Pod web-0 in StatefulSet web successful
  Normal  SuccessfulCreate  3m3s  statefulset-controller  create Pod web-1 in StatefulSet web successful

3.6 通过busybox这个镜像来测试pod的dns是否正常

busybox 是linux内的一个工具的镜像,这个工具镜像内会有我们常用的一些工具。

StatefulSet中每个Pod的DNS格式为(.namespace.svc.cluster.local
可以省略)
statefulSetName-{O…N-1).serviceName.namespace.svc.cluster.local

[root@k8s-master ~]# kubectl run -it --image  busybox:1.28.4    dns-test   /bin/sh
If you don't see a command prompt, try pressing enter.
/ # ping web-0.nginx
PING web-0.nginx (10.2.1.35): 56 data bytes
64 bytes from 10.2.1.35: seq=0 ttl=64 time=0.129 ms
64 bytes from 10.2.1.35: seq=1 ttl=64 time=0.225 ms
64 bytes from 10.2.1.35: seq=2 ttl=64 time=0.134 ms
64 bytes from 10.2.1.35: seq=3 ttl=64 time=0.127 ms
^C
--- web-0.nginx ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.127/0.153/0.225 ms
/ # ping web-1.nginx
PING web-1.nginx (10.2.2.18): 56 data bytes
64 bytes from 10.2.2.18: seq=0 ttl=62 time=0.736 ms
64 bytes from 10.2.2.18: seq=1 ttl=62 time=1.568 ms
64 bytes from 10.2.2.18: seq=2 ttl=62 time=1.469 ms
64 bytes from 10.2.2.18: seq=3 ttl=62 time=0.795 ms
^C
--- web-1.nginx ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.736/1.142/1.568 ms

## 以下信息可以查看看pod的dns 域名所绑定的信息
/ # nslookup web-0.nginx
Server:    10.1.0.10
Address 1: 10.1.0.10 kube-dns.kube-system.svc.cluster.local

Name:      web-0.nginx
Address 1: 10.2.1.35 web-0.nginx.default.svc.cluster.local
/ # nslookup web-1.nginx
Server:    10.1.0.10
Address 1: 10.1.0.10 kube-dns.kube-system.svc.cluster.local

Name:      web-1.nginx
Address 1: 10.2.2.18 web-1.nginx.default.svc.cluster.local
/ # exit
Session ended, resume using 'kubectl attach dns-test -c dns-test -i -t' command when the pod is running

4、扩容和缩容

扩容和缩容两种写法
kubectl scale statefulset web --replicas=3
kubectl patch statefulset web - p ‘{“spec”:{“replicas”:3))’

4.1 扩容

本文3.1小节创建了statefulset资源是2个,现在扩容到5个,如下,扩容也是有序的扩容

[root@k8s-master ~]# kubectl scale statefulset web --replicas=5
statefulset.apps/web scaled

# 查看sts信息
[root@k8s-master ~]# kubectl get sts
NAME   READY   AGE
web    5/5     39m


# 查看pod信息,有序的5个资源
[root@k8s-master ~]# kubectl get pod
NAME       READY   STATUS    RESTARTS        AGE
dns-test   1/1     Running   1 (6m51s ago)   13m
web-0      1/1     Running   0               39m
web-1      1/1     Running   0               39m
web-2      1/1     Running   0               21s
web-3      1/1     Running   0               19s
web-4      1/1     Running   0               18s

# 查看sts的资源描述
[root@k8s-master ~]# kubectl describe sts web
Name:               web
Namespace:          default
CreationTimestamp:  Sat, 24 Feb 2024 02:20:14 +0800
Selector:           app=nginx
Labels:             <none>
Annotations:        <none>
Replicas:           5 desired | 5 total
Update Strategy:    RollingUpdate
  Partition:        0
Pods Status:        5 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.20
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Volume Claims:    <none>
Events:
  Type    Reason            Age   From                    Message
  ----    ------            ----  ----                    -------
  Normal  SuccessfulCreate  39m   statefulset-controller  create Pod web-0 in StatefulSet web successful
  Normal  SuccessfulCreate  39m   statefulset-controller  create Pod web-1 in StatefulSet web successful
  Normal  SuccessfulCreate  48s   statefulset-controller  create Pod web-2 in StatefulSet web successful
  Normal  SuccessfulCreate  46s   statefulset-controller  create Pod web-3 in StatefulSet web successful
  Normal  SuccessfulCreate  45s   statefulset-controller  create Pod web-4 in StatefulSet web successful
[root@k8s-master ~]#

4.2 缩容

上面小节中创建了5个副本,现在缩容到3个,如下,缩容也是有序的缩容

[root@k8s-master ~]# kubectl scale statefulset web --replicas=3
statefulset.apps/web scaled

[root@k8s-master ~]# kubectl get sts
NAME   READY   AGE
web    3/3     42m

[root@k8s-master ~]# kubectl get pod
NAME       READY   STATUS    RESTARTS      AGE
dns-test   1/1     Running   1 (10m ago)   16m
web-0      1/1     Running   0             42m
web-1      1/1     Running   0             42m
web-2      1/1     Running   0             3m38s


[root@k8s-master ~]# kubectl describe sts web
Name:               web
Namespace:          default
CreationTimestamp:  Sat, 24 Feb 2024 02:20:14 +0800
Selector:           app=nginx
Labels:             <none>
Annotations:        <none>
Replicas:           3 desired | 3 total
Update Strategy:    RollingUpdate
  Partition:        0
Pods Status:        3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.20
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Volume Claims:    <none>
Events:
  Type    Reason            Age    From                    Message
  ----    ------            ----   ----                    -------
  Normal  SuccessfulCreate  43m    statefulset-controller  create Pod web-0 in StatefulSet web successful
  Normal  SuccessfulCreate  43m    statefulset-controller  create Pod web-1 in StatefulSet web successful
  Normal  SuccessfulCreate  4m33s  statefulset-controller  create Pod web-2 in StatefulSet web successful
  Normal  SuccessfulCreate  4m31s  statefulset-controller  create Pod web-3 in StatefulSet web successful
  Normal  SuccessfulCreate  4m30s  statefulset-controller  create Pod web-4 in StatefulSet web successful
  Normal  SuccessfulDelete  64s    statefulset-controller  delete Pod web-4 in StatefulSet web successful
  Normal  SuccessfulDelete  62s    statefulset-controller  delete Pod web-3 in StatefulSet web successful

5、镜像更新

  • 镜像更新(目前还不支持直接更新image,需要patch来间接实现)

5.1 更新方式-RollingUpdate

StatefulSet也可以采用滚动更新策略,同样是修改pod,template属性后会触发更新,但是由于od是有序的,在StatefulSet中更新时是基于pod的顺序倒序更新的

5.1.1 更新镜像信息

[root@k8s-master ~]# kubectl patch sts web  --type='json'  -p='[{"op": "replace","path": "/spec/template/spec/containers/0/image","value": "nginx:1.21"}]'
statefulset.apps/web patched

5.1.2 查看statefulset的状态

[root@k8s-master ~]# kubectl get sts web
NAME   READY   AGE
web    3/3     54m

5.1.3 查看pod的状态

[root@k8s-master ~]# kubectl get po
NAME       READY   STATUS    RESTARTS      AGE
dns-test   1/1     Running   1 (21m ago)   28m
web-0      1/1     Running   0             25s
web-1      1/1     Running   0             27s
web-2      1/1     Running   0             30s

5.1.4 查看statefulset的描述信息

可以从最后的events信息看到,更新pod的时候是从序号大的更新到序号小的。

[root@k8s-master ~]# kubectl describe   sts web
Name:               web
Namespace:          default
CreationTimestamp:  Sat, 24 Feb 2024 02:20:14 +0800
Selector:           app=nginx
Labels:             <none>
Annotations:        <none>
Replicas:           3 desired | 3 total
Update Strategy:    RollingUpdate
  Partition:        0
Pods Status:        3 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.21
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Volume Claims:    <none>
Events:
  Type    Reason            Age                From                    Message
  ----    ------            ----               ----                    -------
  Normal  SuccessfulCreate  15m                statefulset-controller  create Pod web-3 in StatefulSet web successful
  Normal  SuccessfulCreate  15m                statefulset-controller  create Pod web-4 in StatefulSet web successful
  Normal  SuccessfulDelete  12m                statefulset-controller  delete Pod web-4 in StatefulSet web successful
  Normal  SuccessfulDelete  12m                statefulset-controller  delete Pod web-3 in StatefulSet web successful
  Normal  SuccessfulDelete  46s                statefulset-controller  delete Pod web-2 in StatefulSet web successful
  Normal  SuccessfulCreate  45s (x2 over 15m)  statefulset-controller  create Pod web-2 in StatefulSet web successful
  Normal  SuccessfulDelete  43s                statefulset-controller  delete Pod web-1 in StatefulSet web successful
  Normal  SuccessfulCreate  42s (x2 over 54m)  statefulset-controller  create Pod web-1 in StatefulSet web successful
  Normal  SuccessfulDelete  41s                statefulset-controller  delete Pod web-0 in StatefulSet web successful
  Normal  SuccessfulCreate  40s (x2 over 54m)  statefulset-controller  create Pod web-0 in StatefulSet web successful

5.1.5 查看statefulset的历史更新信息

[root@k8s-master ~]# kubectl rollout history  sts  web  --revision=0
statefulset.apps/web
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

[root@k8s-master ~]# kubectl rollout history  sts  web  --revision=2
statefulset.apps/web with revision #2
Pod Template:
  Labels:	app=nginx
  Containers:
   nginx:
    Image:	nginx:1.21
    Port:	80/TCP
    Host Port:	0/TCP
    Environment:	<none>
    Mounts:	<none>
  Volumes:	<none>

[root@k8s-master ~]#

5.1.6 利用滚动更新的属性可以实现–灰度发布/金丝雀发布

灰度发布(金丝雀发布)是指在测试环境测试正常,然后上线到正式环境,通过在线上部分服务器发布,验证程序的可靠性,最后通过滚动发布,所有的资源都全部更新。
目标:将项目上线后产生的问题,尽量降到最低。
核心:如何控制每次只更新那些版本,就需要利用partition字段。

  • 利用滚动更新中的partition属性,可以实现简易的灰度发布的效果。
  • 例如我们有5个pod,如果当前partition设置为3,那么此时滚动更新时,只会更新那些序号>=3的pod。
  • 利用该机制,我们可以通过控制partition的值,来决定只更新其中一部分pod,确认没有问题后再主键增大更新的pod数量,最终实现全部pod更新。

通过 【kubectl edit sts web】查看statefulset中多了一个滚动更新的属性 partition

在这里插入图片描述

5.1.6.1 扩容到5个节点
[root@k8s-master ~]# kubectl scale statefulset  web  --replicas=5
statefulset.apps/web scaled
[root@k8s-master ~]# kubectl get statefulsets.apps web
NAME   READY   AGE
web    4/5     10h
[root@k8s-master ~]# kubectl get statefulsets.apps web
NAME   READY   AGE
web    5/5     10h
5.1.6.2 修改partition的值,默认是0

通过 kubectl edit sts web 修改
在这里插入图片描述

5.1.6.3 修改image的版本信息

在这里插入图片描述

5.1.6.4 查看statefulset的状态

通过以下已经查看到statefulset已经更新完成了,ready的状态

[root@k8s-master ~]# kubectl get statefulsets.apps web
NAME   READY   AGE
web    4/5     10h
[root@k8s-master ~]# kubectl get statefulsets.apps web
NAME   READY   AGE
web    5/5     10h
5.1.6.5 查看pod的信息

刚才我们设置的partition的数字为3,总共的副本是5个,通过以下信息可以查看到,更新了web-4和web-3,web-2、web-1、web-0都没有更新。

[root@k8s-master ~]# kubectl describe  pod web-4  |grep Image
    Image:          nginx:1.20
    Image ID:       docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00b
[root@k8s-master ~]# kubectl describe  pod web-3  |grep Image
    Image:          nginx:1.20
    Image ID:       docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00b
[root@k8s-master ~]# kubectl describe  pod web-2  |grep Image
    Image:          nginx:1.21
    Image ID:       docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
[root@k8s-master ~]# kubectl describe  pod web-1  |grep Image
    Image:          nginx:1.21
    Image ID:       docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
[root@k8s-master ~]# kubectl describe  pod web-0  |grep Image
    Image:          nginx:1.21
    Image ID:       docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
5.1.6.5 查看更新的历史版本内容信息

[root@k8s-master ~]# kubectl rollout history sts web --revision=0
statefulset.apps/web
REVISION  CHANGE-CAUSE
2         <none>
3         <none>

# resivion 3的更新内容为 Image:	nginx:1.20
[root@k8s-master ~]# kubectl rollout history sts web --revision=3
statefulset.apps/web with revision #3
Pod Template:
  Labels:	app=nginx
  Containers:
   nginx:
    Image:	nginx:1.20
    Port:	80/TCP
    Host Port:	0/TCP
    Environment:	<none>
    Mounts:	<none>
  Volumes:	<none>

5.1.6.6 查看statefulset的描述信息

通过evevts,可以看到了statefulset资源只更新了web-4和web-3

[root@k8s-master ~]# kubectl describe sts web
Name:               web
Namespace:          default
CreationTimestamp:  Sat, 24 Feb 2024 02:20:14 +0800
Selector:           app=nginx
Labels:             <none>
Annotations:        <none>
Replicas:           5 desired | 5 total
Update Strategy:    RollingUpdate
  Partition:        3
Pods Status:        5 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.20
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Volume Claims:    <none>
Events:
  Type    Reason            Age                From                    Message
  ----    ------            ----               ----                    -------
  Normal  SuccessfulDelete  9m6s (x2 over 9h)  statefulset-controller  delete Pod web-4 in StatefulSet web successful
  Normal  SuccessfulCreate  9m4s (x3 over 9h)  statefulset-controller  create Pod web-4 in StatefulSet web successful
  Normal  SuccessfulDelete  9m2s (x2 over 9h)  statefulset-controller  delete Pod web-3 in StatefulSet web successful
  Normal  SuccessfulCreate  9m1s (x3 over 9h)  statefulset-controller  create Pod web-3 in StatefulSet web successful
5.1.6.7 滚动更新其他资源
  • 刚才我们是更新了2个pod资源,还剩下3个pod资源没有更新,把partition的值设置为0的时候,其他资源就全部更新了。
  • 实际生产环境中,灰度发布可以根据实际使用情况使用,可以多次灰度发布。

在这里插入图片描述

[root@k8s-master ~]# kubectl describe sts web
Name:               web
Namespace:          default
CreationTimestamp:  Sat, 24 Feb 2024 02:20:14 +0800
Selector:           app=nginx
Labels:             <none>
Annotations:        <none>
Replicas:           5 desired | 5 total
Update Strategy:    RollingUpdate
  Partition:        0
Pods Status:        5 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.20
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Volume Claims:    <none>
Events:
  Type    Reason            Age               From                    Message
  ----    ------            ----              ----                    -------
  Normal  SuccessfulDelete  12m (x2 over 9h)  statefulset-controller  delete Pod web-4 in StatefulSet web successful
  Normal  SuccessfulCreate  12m (x3 over 9h)  statefulset-controller  create Pod web-4 in StatefulSet web successful
  Normal  SuccessfulDelete  12m (x2 over 9h)  statefulset-controller  delete Pod web-3 in StatefulSet web successful
  Normal  SuccessfulCreate  12m (x3 over 9h)  statefulset-controller  create Pod web-3 in StatefulSet web successful
  Normal  SuccessfulCreate  8s (x3 over 9h)   statefulset-controller  create Pod web-2 in StatefulSet web successful
  Normal  SuccessfulDelete  8s (x2 over 9h)   statefulset-controller  delete Pod web-2 in StatefulSet web successful
  Normal  SuccessfulDelete  6s (x2 over 9h)   statefulset-controller  delete Pod web-1 in StatefulSet web successful
  Normal  SuccessfulCreate  4s (x3 over 10h)  statefulset-controller  create Pod web-1 in StatefulSet web successful
  Normal  SuccessfulDelete  2s (x2 over 9h)   statefulset-controller  delete Pod web-0 in StatefulSet web successful
  Normal  SuccessfulCreate  1s (x3 over 10h)  statefulset-controller  create Pod web-0 in StatefulSet web successful

5.2 更新方式-OnDelete

OnDelete的更新策略是删除pod后才会更新,修改template模板的时候并不会更新。

5.2.1 修改更新策略

在这里插入图片描述

5.2.2 修改镜像版本信息

在这里插入图片描述

5.2.3 镜像更新信息

[root@k8s-master ~]# kubectl rollout history sts web  --revision=0
statefulset.apps/web
REVISION  CHANGE-CAUSE
3         <none>
4         <none>

[root@k8s-master ~]# kubectl rollout history sts web  --revision=4
statefulset.apps/web with revision #4
Pod Template:
  Labels:	app=nginx
  Containers:
   nginx:
    Image:	nginx:1.21
    Port:	80/TCP
    Host Port:	0/TCP
    Environment:	<none>
    Mounts:	<none>
  Volumes:	<none>

5.2.4 查看pod,pod暂时未更新

[root@k8s-master ~]# kubectl describe pod web-4  | grep   Image
    Image:          nginx:1.20
    Image ID:       docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00b
[root@k8s-master ~]# kubectl describe pod web-3  | grep   Image
    Image:          nginx:1.20
    Image ID:       docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00b
[root@k8s-master ~]# kubectl describe pod web-2  | grep   Image
    Image:          nginx:1.20
    Image ID:       docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00b
[root@k8s-master ~]# kubectl describe pod web-1  | grep   Image
    Image:          nginx:1.20
    Image ID:       docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00b
[root@k8s-master ~]# kubectl describe pod web-0  | grep   Image
    Image:          nginx:1.20
    Image ID:       docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00b

5.2.5 删除一个pod,可以看到删除的pod信息已经更新

[root@k8s-master ~]# kubectl delete pod web-4
pod "web-4" deleted
[root@k8s-master ~]# kubectl get sts web
NAME   READY   AGE
web    5/5     10h
[root@k8s-master ~]# kubectl get pod web-4
NAME    READY   STATUS    RESTARTS   AGE
web-4   1/1     Running   0          21s
[root@k8s-master ~]# kubectl describe pod web-4  | grep   Image
    Image:          nginx:1.21
    Image ID:       docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
[root@k8s-master ~]# kubectl describe pod web-3  | grep   Image
    Image:          nginx:1.20
    Image ID:       docker-pullable://nginx@sha256:03f3cb0afb7bd5c76e01bfec0ce08803c495348dccce37bcb82c347b4853c00b

5.2.6 滚动更新其他资源

[root@k8s-master ~]# kubectl delete pod web-3
pod "web-3" deleted
[root@k8s-master ~]# kubectl delete pod web-2
pod "web-2" deleted
[root@k8s-master ~]# kubectl delete pod web-1
pod "web-1" deleted
[root@k8s-master ~]# kubectl delete pod web-0
pod "web-0" deleted
[root@k8s-master ~]# kubectl describe sts web
Name:               web
Namespace:          default
CreationTimestamp:  Sat, 24 Feb 2024 02:20:14 +0800
Selector:           app=nginx
Labels:             <none>
Annotations:        <none>
Replicas:           5 desired | 5 total
Update Strategy:    OnDelete
Pods Status:        5 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
  Labels:  app=nginx
  Containers:
   nginx:
    Image:        nginx:1.21
    Port:         80/TCP
    Host Port:    0/TCP
    Environment:  <none>
    Mounts:       <none>
  Volumes:        <none>
Volume Claims:    <none>
Events:
  Type    Reason            Age                 From                    Message
  ----    ------            ----                ----                    -------
  Normal  SuccessfulDelete  27m (x2 over 9h)    statefulset-controller  delete Pod web-4 in StatefulSet web successful
  Normal  SuccessfulDelete  27m (x2 over 9h)    statefulset-controller  delete Pod web-3 in StatefulSet web successful
  Normal  SuccessfulDelete  14m (x2 over 9h)    statefulset-controller  delete Pod web-2 in StatefulSet web successful
  Normal  SuccessfulDelete  14m (x2 over 9h)    statefulset-controller  delete Pod web-1 in StatefulSet web successful
  Normal  SuccessfulDelete  14m (x2 over 9h)    statefulset-controller  delete Pod web-0 in StatefulSet web successful
  Normal  SuccessfulCreate  2m4s (x4 over 10h)  statefulset-controller  create Pod web-4 in StatefulSet web successful
  
  
  ## 以下信息可以看到其他的4个副本也同步更新了
  Normal  SuccessfulCreate  18s (x4 over 10h)   statefulset-controller  create Pod web-3 in StatefulSet web successful
  Normal  SuccessfulCreate  15s (x4 over 10h)   statefulset-controller  create Pod web-2 in StatefulSet web successful
  Normal  SuccessfulCreate  13s (x4 over 10h)   statefulset-controller  create Pod web-1 in StatefulSet web successful
  Normal  SuccessfulCreate  9s (x4 over 10h)    statefulset-controller  create Pod web-0 in StatefulSet web successful

5.3 有状态的资源删除方式

  • 删除方式:删除statefulset和Headlass service
  • 级联删除:删除statefulset时会同时制除pods
    • kubectl delete statefulset web
  • 非级联删除:删除statefulset时不会删除 pod ,删除sts后,pod不会删除
    • kubectl deelte sts web --cascade=false
  • 删除service
    • kubectl delete service nginx

5.3.1 级联删除

5.3.1.1 删除statefulset资源
[root@k8s-master ~]# kubectl delete sts web
statefulset.apps "web" deleted
5.3.1.2 查看statefule资源和pod资源
[root@k8s-master ~]# kubectl get sts web
Error from server (NotFound): statefulsets.apps "web" not found
[root@k8s-master ~]# kubectl get pod
NAME       READY   STATUS    RESTARTS      AGE
dns-test   1/1     Running   1 (10h ago)   10h
5.3.1.3 查看service资源
[root@k8s-master ~]# kubectl get service
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP   4d15h
nginx        ClusterIP   None         <none>        80/TCP    10h

5.3.1.4 删除service资源
[root@k8s-master ~]# kubectl delete svc nginx
service "nginx" deleted
[root@k8s-master ~]# kubectl get service
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP   4d15h

5.3.2 非级联删除

5.3.2.1 创建资源

由于刚才的资源我们已经删除,现在重新创建一个资源

[root@k8s-master ~]# kubectl create -f web.yaml
service/nginx created
statefulset.apps/web created
[root@k8s-master ~]# kubectl get sts web
NAME   READY   AGE
web    2/2     8s
[root@k8s-master ~]# kubectl get pod
NAME       READY   STATUS    RESTARTS      AGE
dns-test   1/1     Running   1 (10h ago)   10h
web-0      1/1     Running   0             14s
web-1      1/1     Running   0             12s
[root@k8s-master ~]# kubectl get service
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP   4d15h
nginx        ClusterIP   None         <none>        80/TCP    25s
5.3.2.2 删除statefulset资源(添加选项 --cascade=false)
[root@k8s-master ~]# kubectl delete sts web --cascade=false
warning: --cascade=false is deprecated (boolean value) and can be replaced with --cascade=orphan.
statefulset.apps "web" deleted
5.3.2.3 查看statefule资源和pod资源
[root@k8s-master ~]# kubectl get sts web
Error from server (NotFound): statefulsets.apps "web" not found
[root@k8s-master ~]# kubectl get pod
NAME       READY   STATUS    RESTARTS      AGE
dns-test   1/1     Running   1 (10h ago)   10h
web-0      1/1     Running   0             3m15s
web-1      1/1     Running   0             3m13s
5.3.2.4 删除pod资源
[root@k8s-master ~]# kubectl get pod
NAME       READY   STATUS    RESTARTS      AGE
dns-test   1/1     Running   1 (10h ago)   10h
web-0      1/1     Running   0             3m15s
web-1      1/1     Running   0             3m13s
[root@k8s-master ~]# kubectl delete po web-0 web-1
pod "web-0" deleted
pod "web-1" deleted
5.3.2.5 删除service资源
[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP   4d15h
nginx        ClusterIP   None         <none>        80/TCP    4m29s
[root@k8s-master ~]# kubectl delete svc  nginx
service "nginx" deleted
[root@k8s-master ~]# kubectl get svc
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.1.0.1     <none>        443/TCP   4d15h

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/406330.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解Megatron中的数据混合算法(BlendableDataset)

&#x1f9d1;‍&#x1f4bb; 本文主要讲解Megatron早期版本中的数据混合算法。 目录 1. 数据混合2. 源码解析3. 证明部分&讨论4. 进一步优化 1. 数据混合 在谈源码之前&#xff0c;我们有必要先了解一下Megatron中的数据混合思想。 给定 n n n 个数据集 D 1 , D 2 , …

Go基本数据类型

bool类型 布尔型的值只可以是常量 true 或者 false。⼀个简单的例⼦&#xff1a;var b bool true 数值型 1. 整数型 可以简单讲解⼀下⼆进制和位数的关系&#xff0c;以及int和uint的关系 int8 有符号 8 位整型 (-128 到 127) ⻓度&#xff1a;8bitint16 有符号 16 位整型…

探索海外短剧系统开发:引领潮流的创新与实践

随着全球化的深入发展&#xff0c;海外短剧市场正逐渐成为文化交流与娱乐产业的新热点。本文将探讨海外短剧系统开发的重要性、机遇与挑战&#xff0c;以及如何应对这些挑战&#xff0c;以实现海外短剧市场的可持续发展。 一、海外短剧系统开发的重要性 海外短剧系统开发不仅…

BUGKU-WEB 备份是个好习惯

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 看源码看提示&#xff1a;备份是个好习惯扫描目录md5弱比较 相关工具 御剑md5解密&#xff1a;https://www.somd5.com/ 解题步骤 看到的这串字符&#xff0c;有点像md5&#xff1f; d41d8cd98…

Web3之光:揭秘数字创新的未来

随着数字化时代的深入发展&#xff0c;Web3正以其独特的技术和理念&#xff0c;为我们打开数字创新的崭新视角。作为数字化时代的新兴力量&#xff0c;Web3将深刻影响着我们的生活、工作和社会。本文将揭秘Web3的奥秘&#xff0c;探讨其在数字创新领域的前景和潜力。 1. 重新定…

【论文精读】Segment Anything

Segment Anything 前言Abstract1. Introduction2. Segment Anything Task3. Segment Anything Model4. Segment Anything Data Engine5. Segment Anything Dataset6. Segment Anything RAI Analysis7. Zero-Shot Transfer Experiments7.1. Zero-Shot Single Point Valid Mask E…

深度学习基础(二)卷积神经网络(CNN)

之前的章节我们初步介绍了深度学习相关基础知识和训练神经网络&#xff1a; 深度学习基础&#xff08;一&#xff09;神经网络基本原理-CSDN博客文章浏览阅读924次&#xff0c;点赞13次&#xff0c;收藏19次。在如今的科技浪潮中&#xff0c;神经网络作为人工智能的核心技术之…

【微服务】国内微服务生态标准-SpringCloud Alibaba

现在已经是21世纪的二十年代&#xff0c;在未来的很长时间&#xff0c;以互联网、IOT物联网为代表的分布式应用必将越来越多&#xff0c;大量的软件企业对掌握微服务与高可用、高性能、高并发的架构人才也必定趋之若鹜。我们可以看看现阶段针对软件架构师的招聘需求和薪资&…

【元宵佳节】砖一祝您节日快乐!

元宵节的由来 相传&#xff0c;汉文帝(前179-前157年)为庆祝周勃于正月十五勘平诸吕之乱&#xff0c;每逢此夜&#xff0c;必出言游玩&#xff0c;与民同乐&#xff0c;在古代&#xff0c;夜同宵&#xff0c;正月又称元月&#xff0c;汉文帝就将正月十五定为元宵节&#xff0c…

算法打卡day1|数组篇|Leetcode 704.二分查找、27.移除元素

数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合&#xff0c;可以方便的通过下标索引的方式获取到下标下对应的数据。 1.数组下标都是从0开始的。 2.数组内存空间的地址是连续的。 正是因为数组的在内存空间的地址是连续的&#xff0c;所以我们在删除或者增添…

LiveQing视频点播流媒体RTMP推流服务功能-支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务

LiveQing视频点播流媒体RTMP推流服务功能支持配置开启 HTTPS 服务什么时候需要开启HTTPS服务 1、配置开启HTTPS1.1、准备https证书1.1.1、选择Nginx类型证书下载 1.2、配置 开启 HTTPS1.2.1 web页面配置1.2.2 配置文件配置 2、验证HTTPS服务3、为什么要开启HTTPS3.1、安全性要求…

免费的数据恢复软件哪个好?这10个数据恢复软件可以试试

遇到电脑、硬盘或U盘等设备中数据丢失&#xff0c;不用着急&#xff0c;数据恢复软件来帮你。 在遇到数据丢失的问题时&#xff0c;很多朋友都会很着急也不知道该怎么办。作为数据恢复小白&#xff0c;我们可以选择使用数据恢复软件进行扫描恢复。现在市面上的数据恢复软件很多…

AI技术那些事儿:揭开潜伏在你生活中的高科技小能手

你有没有发现&#xff0c;现在的生活里有些“看不见”的聪明家伙&#xff0c;它们时时刻刻在帮咱们忙活呢&#xff1f;从早上用语音命令打开窗帘、播报新闻&#xff0c;到晚上喊一声关灯睡觉&#xff0c;这些都离不开人工智能&#xff08;简称AI&#xff09;的助攻。今天咱就掰…

C++笔记:二叉搜索树(Binary Search Tree)

文章目录 二叉搜索树的概念二叉搜索树操作1. 框架搭建2. 遍历3. 查找迭代实现递归实现 4. 插入迭代实现递归实现 5. 删除迭代实现递归实现 6. 析构与销毁7. 拷贝构造与赋值重载 二叉搜索树的应用二叉搜索树的性能分析二叉搜索树模拟实现源码 二叉搜索树的概念 二叉搜索树又称二…

泛微e-office系统敏感信息泄露漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 1、系统简介 泛微e-office系统是标准、易用、快速部署上线的专业协同OA软…

gitlab升级

查看当前版本 cat /opt/gitlab/embedded/service/gitlab-rails/VERSION12.9.3-ee 备份数据 gitlab-rake gitlab:backup:create备份默认位置在 /var/opt/gitlab/backups/ 备份配置数据&#xff08;git配置目录&#xff09; tar -zcvf gitlab12.9.3-ee.tar.gz /etc/gitlab备…

01VScode开发stm32环境搭建

title: VScode开发stm32环境搭建 tags: STM32vscode 1.准备工作 1.下载并安装VSCODE 在百度上搜索vscode记住一定要是官方的 不然你自己就是在给自己下毒2345全来了 打红圈一定要有不然就是在垃圾网站上下的 VSCode下载链接 选一个适合你的      安装正常流程走就行不再…

达尔克仪器设备邀您观摩2024生物发酵产品与技术装备展

参展企业介绍 达尔克本着“诚信、求精、协作、创新”的企业精神&#xff0c;以专业的技术、优良的品质和完善的服务&#xff0c;与广大客户共创辉煌未来。 我们的产品——包括水质分析、压力、温度、流量、物位等工业在线过程控制仪表、其他类型传感器以及自动化控制方案——全…

docker运行onlyoffice,并配置https访问【参考仅用】

官方说明&#xff1a; Installing ONLYOFFICE Docs for Docker on a local server - ONLYOFFICEhttps://helpcenter.onlyoffice.com/installation/docs-developer-install-docker.aspx 一、容器端口、目录卷映射 sudo docker run --name容器名称 --restartalways -i -t -d -p…

论文阅读——SimpleClick

SimpleClick: Interactive Image Segmentation with Simple Vision Transformers 模型直接在VIT上增加交互是分割 用VIT MAE方法训练的预训练权重 用交互式分割方法微调&#xff0c;微调流程&#xff1a; 1、在当前分割自动模拟点击&#xff0c;没有人为提供的点击 受到RITM启发…