StatefulSet 模板,更新,扩缩容,删除
概念:
StatefulSet是用来管理有状态应用的工作负载API对象,kubectl 中可以简写sts ,sts每一个pod生成一个唯一的标识符,sts_name-number,number从0开始。
StatefulSet会关联卷(volume),删除是不会删除卷,之后的PV,PVC的随笔中会陆续介绍。
StatefulSet需要headless service,需要你去常见该服务,之后service随笔也会陆续介绍。
StatefulSet不保证pod的数量,顺序创建,倒叙删除。
StatefulSet的命名需要遵守DNS子域名规范:
- 不能超过253个字符
- 只能包含小写字母,数字,以及'-'和'.'
- 必须咦字母数开头
- 必须以字母数字结尾
模板:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx" #必须匹配 .spec.template.metadata.labels
replicas: 3 # 默认是1
selector:
matchLabels:
app: nginx #必须匹配 .spec.template.metadata.labels
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14
#image: nginx
ports:
- containerPort: 80
name: web
创建:
kubectl create -f sts-test.yaml
查看:
[root@k8s-master01 ns-slx-study]# kubectl get pod
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 17m
web-1 1/1 Running 0 17m
web-2 1/1 Running 0 17m
[root@k8s-master01 ns-slx-study]# kubectl get sts
NAME READY AGE
web 3/3 45m
查看所有yaml:
[root@k8s-master01 ns-slx-study]# kubectl get sts web -o yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"apps/v1","kind":"StatefulSet","metadata":{"annotations":{},"name":"web","namespace":"default"},"spec":{"replicas":3,"selector":{"matchLabels":{"app":"nginx"}},"serviceName":"nginx","template":{"metadata":{"labels":{"app":"nginx"}},"spec":{"containers":[{"image":"nginx:1.14","name":"web","ports":[{"containerPort":80}]}]}}}}
creationTimestamp: "2023-02-23T23:28:57Z"
generation: 7
name: web
namespace: default
resourceVersion: "291331"
uid: 4aa0221f-c60d-4f71-a2d2-07f8184f9191
spec:
podManagementPolicy: OrderedReady
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx
serviceName: nginx
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx:1.14
imagePullPolicy: IfNotPresent
name: web
ports:
- containerPort: 80
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
updateStrategy:
rollingUpdate:
partition: 0
type: RollingUpdate
status:
availableReplicas: 3
collisionCount: 0
currentReplicas: 3
currentRevision: web-54b86cbdbb
observedGeneration: 7
readyReplicas: 3
replicas: 3
updateRevision: web-54b86cbdbb
updatedReplicas: 3
不同于Deployment的strategy,sts的回滚策略字段为updateStrategy。
扩缩容:
扩容:
#将sts的副本增加到5
kubectl scale sts web --relicas=5
#可以使用命令查看扩容的过程
[root@k8s-master01 ns-slx-study]# kubectl get pod -w -l app=nginx
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 28m
web-1 1/1 Running 0 28m
web-2 1/1 Running 0 28m
web-3 0/1 Pending 0 0s
web-3 0/1 Pending 0 0s
web-3 0/1 ContainerCreating 0 0s
web-3 0/1 ContainerCreating 0 1s
web-3 1/1 Running 0 51s
web-4 0/1 Pending 0 0s
web-4 0/1 Pending 0 0s
web-4 0/1 ContainerCreating 0 0s
web-4 0/1 ContainerCreating 0 1s
web-4 1/1 Running 0 62s
缩容:
#将sts web副本缩容到2个
[root@k8s-master01 ns-slx-study]# kubectl scale sts web --replicas=2
#查看缩容的过程
[root@k8s-master01 ns-slx-study]# kubectl get pod -w -l app=nginx
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 32m
web-1 1/1 Running 0 32m
web-2 1/1 Running 0 32m
web-3 1/1 Running 0 4m26s
web-4 1/1 Running 0 3m35s
web-4 1/1 Terminating 0 3m38s
web-4 1/1 Terminating 0 3m38s
web-4 0/1 Terminating 0 3m39s
web-4 0/1 Terminating 0 3m39s
web-4 0/1 Terminating 0 3m39s
web-3 1/1 Terminating 0 4m30s
web-3 1/1 Terminating 0 4m30s
web-3 0/1 Terminating 0 4m31s
web-3 0/1 Terminating 0 4m31s
web-3 0/1 Terminating 0 4m31s
web-2 1/1 Terminating 0 32m
web-2 1/1 Terminating 0 32m
web-2 0/1 Terminating 0 32m
web-2 0/1 Terminating 0 32m
web-2 0/1 Terminating 0 32m
更新:
更新策略:
On DElete策略:(不常用)
OnDelete 更新策略实现了传统(1.7 版本之前)的行为,它也是默认的更新策略。当我们选择这个更新策略并修改 StatefulSet 的.spec.template 字段时,StatefulSet 控制器不会自动更新 Pod,必须手动删除 Pod 才能使控制器创建新的 Pod
Rolling Upddate 策略:
RollingUpdate(滚动更新)更新策略会自动更新一个 StatefulSet 中所有的 Pod,采用与序号索引相反的顺序进行滚动更新
命令:
#我这里主要使用的rollingUpdate方式更新:
#命令行的方式:
kubectl patch statefulset web -p '{"spec":{"updateStrategy":{"type":"RollingUpdate"}}}'
#更改后的SetatefulSet:
kubectl get sts web -o yaml | grep -A 1 "updateStrategy"
#以上都是1.7版本之前的操作,在1.7版本之后是默认rollingUpdate方式更新
#建议使用edit或者yaml文件的方式更新
#更新后会倒叙的方式依次删除重建
[root@k8s-master01 ns-slx-study]# kubectl get pod
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 81s
web-1 1/1 Running 0 84s
web-2 1/1 Running 0 32s
web-3 0/1 ContainerCreating 0 1s
web-4 1/1 Running 0 4s
分段更新:
#比如我们定义一个分区"partition":3,可以使用 patch 或 edit 直接对 StatefulSet 进行设置:
使用命令更改:kubectl edit sts web
updateStrategy:
rollingUpdate:
partition: 3
type: RollingUpdate
这里面的parition的字段为3 ,保存退出,再更改镜像
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: web
ports:
- containerPort: 80
protocol: TCP
再更改镜像,是从最后的开始往3号位置更新到最后,是从最后开始更新,到3号结束
更改完之后是这样的:
- image: nginx:1.14
imagePullPolicy: IfNotPresent
image: nginx:1.14
imageID: docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
- image: nginx:1.14
imagePullPolicy: IfNotPresent
image: nginx:1.14
imageID: docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
- image: nginx:1.14
imagePullPolicy: IfNotPresent
image: nginx:1.14
imageID: docker-pullable://nginx@sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8d
- image: nginx
imagePullPolicy: IfNotPresent
image: nginx:latest
imageID: docker-pullable://nginx@sha256:6650513efd1d27c1f8a5351cbd33edf85cc7e0d9d0fcb4ffb23d8fa89b601ba8
- image: nginx
imagePullPolicy: IfNotPresent
image: nginx:latest
imageID: docker-pullable://nginx@sha256:6650513efd1d27c1f8a5351cbd33edf85cc7e0d9d0fcb4ffb23d8fa89b601ba8
#下面的两个镜像和上面的是不一样的
删除:
删除StatefulSet有两种方式:级联删除,非级联删除
使用非级联删除时,StatefulSet的pod不会被删除(很少使用)
使用级联删除时,StatefulSet和它的pod都会被删除
1,非级联删除
使用kubectl delete sts xxx 删除StatefulSet的时候,只需要后面加上--cascade=false参数,就会采用非级联删除,此时删除StatefulSet不会删除它的pod
[root@k8s-master01 ns-slx-study]# kubectl get pod #查看pod
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 11m
web-1 1/1 Running 0 11m
web-2 1/1 Running 0 11m
web-3 1/1 Running 0 9m41s
web-4 1/1 Running 0 9m44s
[root@k8s-master01 ns-slx-study]# kubectl delete sts web --cascade=false #使用非级联删除
warning: --cascade=false is deprecated (boolean value) and can be replaced with --cascade=orphan.
statefulset.apps "web" deleted
[root@k8s-master01 ns-slx-study]# kubectl get sts #查看以及没有sts,以及被删除
No resources found in default namespace.
[root@k8s-master01 ns-slx-study]# kubectl get pod #管理的pod并没有被删除
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 12m
web-1 1/1 Running 0 12m
web-2 1/1 Running 0 12m
web-3 1/1 Running 0 10m
web-4 1/1 Running 0 10m
#由于此时删除了StatefulSet,它管理的pod变成了孤儿因此单独删除pod时,不会被重建
[root@k8s-master01 ns-slx-study]# kubectl get pod
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 12m
web-1 1/1 Running 0 12m
web-2 1/1 Running 0 12m
web-3 1/1 Running 0 10m
web-4 1/1 Running 0 10m
[root@k8s-master01 ns-slx-study]# kubectl delete po/web-1
pod "web-1" deleted
[root@k8s-master01 ns-slx-study]# kubectl get pod
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 15m
web-2 1/1 Running 0 15m
web-3 1/1 Running 0 13m
web-4 1/1 Running 0 13m
2,级联删除
省略--cascade=false参数就是级联删除
[root@k8s-master01 ns-slx-study]# kubectl get pod
NAME READY STATUS RESTARTS AGE
web-0 1/1 Running 0 11s
web-1 1/1 Running 0 10s
web-2 1/1 Running 0 8s
[root@k8s-master01 ns-slx-study]# kubectl delete sts web
statefulset.apps "web" deleted
[root@k8s-master01 ns-slx-study]# kubectl get pod
No resources found in default namespace.
[root@k8s-master01 ns-slx-study]#
StatefulSet 模板,更新,扩缩容,删除的更多相关文章
- Kubernetes 监控:Prometheus Adpater =》自定义指标扩缩容
使用 Kubernetes 进行容器编排的主要优点之一是,它可以非常轻松地对我们的应用程序进行水平扩展.Pod 水平自动缩放(HPA)可以根据 CPU 和内存使用量来扩展应用,前面讲解的 HPA 章节 ...
- Docker Swarm(七)Scale 扩(缩)容服务
扩(缩)容服务 扩容服务 Service还提供了复制(类似kubernetes里的副本)功能.可以通过 docker service scale 命令来设置服务中容器的副本数: docker serv ...
- 构建Docker平台【第四篇】创建服务及扩缩容等操作
第一步:创建服务 1. 配置 nginx 的 yaml 文件 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-ng ...
- Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
Knative Serving 默认情况下,提供了开箱即用的快速.基于请求的自动扩缩容功能 - Knative Pod Autoscaler(KPA).下面带你体验如何在 Knative 中玩转 Au ...
- 如何根据不同业务场景调节 HPA 扩缩容灵敏度
背景 在 K8s 1.18 之前,HPA 扩容是无法调整灵敏度的: 对于缩容,由 kube-controller-manager 的 --horizontal-pod-autoscaler-downs ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十一)——一步一步教你如何撸Dapr之自动扩/缩容
上一篇我们讲到了dapr提供的bindings,通过绑定可以让我们的程序轻装上阵,在极端情况下几乎不需要集成任何sdk,仅需要通过httpclient+text.json即可完成对外部组件的调用,这样 ...
- 从零入门 Serverless | Serverless Kubernetes 应用部署及扩缩容
作者 | 邓青琳(轻零) 阿里云技术专家 导读:本文分为三个部分,首先给大家演示 Serverless Kubernetes 集群的创建和业务应用的部署,其次介绍 Serverless Kuberne ...
- Netty 如何高效接收网络数据?一文聊透 ByteBuffer 动态自适应扩缩容机制
本系列Netty源码解析文章基于 4.1.56.Final版本,公众号:bin的技术小屋 前文回顾 在前边的系列文章中,我们从内核如何收发网络数据开始以一个C10K的问题作为主线详细从内核角度阐述了网 ...
- Airbnb的动态kubernetes集群扩缩容
Airbnb的动态kubernetes集群扩缩容 本文介绍了Airbnb的集群扩缩容的演化历史,以及当前是如何通过Cluster Autoscaler 实现自定义扩展器的.最重要的经验就是Airbnb ...
- 三十三、HPA实现自动扩缩容
通过HPA实现业务应用的动态扩缩容 HPA控制器介绍 当系统资源过高的时候,我们可以使用如下命令来实现 Pod 的扩缩容功能 $ kubectl -n luffy scale deployment m ...
随机推荐
- SAP 内外交货单过账
* 交货单过账 DATA: LS_HEADER_DATA TYPE BAPIIBDLVHDRCON, LS_HEADER_CONTROL TYPE ...
- URL解码和解码
1 String value = "张三"; 2 //对中文进行URL编码 3 value = URLEncoder.encode(value, "UTF-8" ...
- Day 22 22.1:增量式爬虫
Day 22 22.1:增量式爬虫 爬虫应用场景分类 通用爬虫 聚焦爬虫 功能爬虫 分布式爬虫 增量式爬虫: 用来监测网站数据更新的情况(爬取网站最新更新出来的数据). 只是一种程序设计的思路,使用什 ...
- plsql和instantclient版本都对,依然不能初始化oci.dll解决办法
这里写到 "初始化错误,不能初始化 oci.dll, 请确认你安装的是64位的Oracle客户端 " ,这个描述还是非常的到位啊,我一检查,果然下载的客户端是32位的,在确保自己的 ...
- linux 部署python 系统服务管理命令 yum源设置 linux定时任务 python在linux的虚拟环境安装以及使用
安装python3 三种方式 ==linux下很多脚本默认都用python2, 所以不要把python3的执行文件改为python,因为linux里默认python就是运行python2版本 == y ...
- oracle的ASM扩容
#查看服务器上总共有多少个asmdisk [grid@rkdb1]$ asmcmd lsdsk --discovery Path /dev/oracleasm/disks/OCPDATA1 /dev/ ...
- [jQuery]z-index属性大于0的元素使用fadeIn无法正常过渡的问题
rt 问题记录. 尝试使用$(' ').animate({ opacity: 1 }) 会出现相同的问题. 可能是opacity动画与z-index无法兼容(?) 最后的处理方式是改变元素渲染顺 ...
- Go语言互斥锁(sync.Mutex)和读写互斥锁(sync.RWMutex)
暴力锁 package main import ( "fmt" "sync" "time" ) /* Go语言包中的 sync 包提供了两种 ...
- PAT-basic-1025 反转链表 java c++
一.题目 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转.例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4:如果 K 为 4, ...
- redis数据类型常用方法
一.String set:添加String类型数据 get:获取String类型数据 del:删除数据 append:在原基础上追加数据,假如原来k1值是v1,执行append k1 ddd,那么值就 ...