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
相关推荐
木鱼时刻1 小时前
容器与 Kubernetes 基本概念与架构
容器·架构·kubernetes
chuanauc11 小时前
Kubernets K8s 学习
java·学习·kubernetes
庸子1 天前
基于Jenkins和Kubernetes构建DevOps自动化运维管理平台
运维·kubernetes·jenkins
Connie14511 天前
k8s多集群管理中的联邦和舰队如何理解?
云原生·容器·kubernetes
伤不起bb1 天前
Kubernetes 服务发布基础
云原生·容器·kubernetes
别骂我h1 天前
Kubernetes服务发布基础
云原生·容器·kubernetes
weixin_399380691 天前
k8s一键部署tongweb企业版7049m6(by why+lqw)
java·linux·运维·服务器·云原生·容器·kubernetes
斯普信专业组2 天前
K8s环境下基于Nginx WebDAV与TLS/SSL的文件上传下载部署指南
nginx·kubernetes·ssl
&如歌的行板&2 天前
如何在postman中动态请求k8s中的pod ip(基于nacos)
云原生·容器·kubernetes
云妙算2 天前
K8s 弹性伸缩踩坑实录:周末 2 天烧掉 10 万元!?
云原生·kubernetes