k8s笔记 | StatefulSet 有状态

创建一个web.yaml

复制代码
---
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" # 使用那个service来管理dns
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports: # 容器暴露的端口
            - containerPort: 80 # 具体暴露的端口号
              name: web #该端口配置的名字
          # volumeMounts:
          #   - name: www #指定加载那个数据券
          #     mountPath: /usr/share/nginx/html #加载到容器中的那个目录

操作步骤如下:

复制代码
# 创建
kubectl create sts -f web.yaml
# 查看
kubeclt get sts,svc,po
# 查看ip信息
kubectl run -it --image busybox:1.28.4 dns-test /bin/sh
nslookup web-0.nginx

#打印信息如下
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      web-0.nginx
Address 1: 10.244.107.210 web-0.nginx.default.svc.cluster.local

# 扩容,缩容 两种方式,选择其一
kubectl scale statefulset web --replicas=5
kubectl patch statefulset web -p '{"spec":{"replicas":2}}'

# 查看描述信息
kubectl descrbe sts web

...
Events:
  Type    Reason            Age    From                    Message
  ----    ------            ----   ----                    -------
  Normal  SuccessfulCreate  28m    statefulset-controller  create Pod web-0 in StatefulSet web successful
  Normal  SuccessfulCreate  27m    statefulset-controller  create Pod web-1 in StatefulSet web successful
  Normal  SuccessfulCreate  9m13s  statefulset-controller  create Pod web-2 in StatefulSet web successful
  Normal  SuccessfulCreate  8m52s  statefulset-controller  create Pod web-3 in StatefulSet web successful
  Normal  SuccessfulCreate  8m32s  statefulset-controller  create Pod web-4 in StatefulSet web successful
  Normal  SuccessfulDelete  6m28s  statefulset-controller  delete Pod web-4 in StatefulSet web successful
  Normal  SuccessfulDelete  6m25s  statefulset-controller  delete Pod web-3 in StatefulSet web successful
  Normal  SuccessfulDelete  6m23s  statefulset-controller  delete Pod web-2 in StatefulSet web successful

镜像更新

bash 复制代码
kubectl patch sts web --type='json' -p='[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"nginx:latest"}]'

# 这里有可能报错,那就把  "nginx:1.9.1" 改为 "nginx:1.26" 请注意到hub.docker.net去查看对应的版本

查看更新记录

bash 复制代码
# 查看所有
kubectl rollout history sts web

# 结果
statefulset.apps/web 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>


# 指定查看对应的版本 
kubectl rollout history sts web --revision=2

# 结果
statefulset.apps/web with revision #2
Pod Template:
  Labels:       app=nginx
  Containers:
   nginx:
    Image:      nginx:1.9.1
    Port:       80/TCP
    Host Port:  0/TCP
    Environment:        <none>
    Mounts:     <none>
  Volumes:      <none>


# 查看状态
kubectl rollout status sts web

灰度发布

利用滚动更新中的partition 属性,可以实现简易的灰度发布效果

简介:加入我们有5个pod,如果当partition设置为3,那么此时滚动更新是,只会更新需要>=3的pod,利用该机制,我们可以通过控制partion来决定更新那一部分的内容,确定没有问题后,在逐渐增大更新pod的数量;如果partition为0 ,那表示所有的都更新

bash 复制代码
# 修改sts配置文件
kubectl edit sts web

# 修改partition:3  和 nignx:latest 
# 保存退出,通过kubectl describe po web-4  和 web-0 就能看到效果

StatefulSet的删除

bash 复制代码
# 练级删除 会删除sts和pod

kubectl delete sts web

# 非联级删除
kubectl delete sts web --cascade=false

# 删除services
kubectl delete svc nginx
相关推荐
喜欢你,还有大家12 分钟前
k8s集群监控的部署
云原生·容器·kubernetes
喜欢你,还有大家2 小时前
实战演练——wordpress-k8s集群版
云原生·容器·kubernetes
起风了___5 小时前
Jenkins + Kubernetes 多模块微服务一键流水线:从 Maven 打包到滚动发布完整脚本
kubernetes·jenkins
2501_9418814018 小时前
Kubernetes 容器集群资源调度与弹性扩容高可用架构在互联网业务实战经验总结
云原生·容器·kubernetes
究極の法則に通じた野犬18 小时前
k8s设计理念-k8s中哪些服务要部署成StatefulSet哪些部署成Deployment
云原生·容器·kubernetes
wuxingge18 小时前
k8s集群误删node节点,怎么添加回去
云原生·容器·kubernetes
观测云21 小时前
Kubernetes CRD 方式配置容器日志采集最佳实践
容器·kubernetes·日志分析
运维-大白同学1 天前
2025最全面开源devops运维平台功能介绍
linux·运维·kubernetes·开源·运维开发·devops
敲上瘾1 天前
【探索实战】:Kurator分布式统一应用分发平台的全面解析与实践指南
分布式·容器·kubernetes·serverless
Connie14512 天前
记一次K8s故障告警排查(Grafna告警排查)
云原生·容器·kubernetes·grafana