10. kubernetes资源——statefulset有状态负载

kubernetes资源------statefulset有状态负载

一、statfulset有状态负载

1、无状态、有状态区别

  • 无状态负载

    支持副本、滚动更新, 适用于频繁更新的业务

    从业务角度来说,不需要客户端任何信息

  • 有状态负载

    适用于部署数据库

    从业务角度,服务端在运行期间,需要记录客户端状态信息(令牌、会话)、典型的动态网站、数据库

2、创建有状态负载

2.1 创建pv、pvc持久化
复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
    name: db-pv-5g
spec:
    capacity:
        storage: 5G
    accessModes:
        - ReadWriteMany
    persistentVolumeReclaimPolicy: Recycle
    nfs:
       server: "192.168.140.13"
       path: "/db/data"

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
    name: db-pvc-5g
spec:
    accessModes:
        - ReadWriteMany
    resources:
        requests:
            storage: 5G
复制代码
[root@k8s-master statefulTest]# kubectl get pv
NAME       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM               STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
db-pv-5g   5G         RWX            Recycle          Bound    default/db-pvc-5g                  <unset>                          19s
[root@k8s-master statefulTest]# 
[root@k8s-master statefulTest]# kubectl get pvc
NAME        STATUS   VOLUME     CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
db-pvc-5g   Bound    db-pv-5g   5G         RWX                           <unset>                 22s
2.2 创建有状态负载
复制代码
apiVersion: apps/v1
kind: StatefulSet
metadata:
    name: test-mysql
spec:
    replicas: 1
    selector:
        matchLabel:
            app: mysql
    serviceName: "test-mysql"
    template:
        metadata:
            labels:
               app: mysql
        spec:
            containers:
            - name: test-mysql
              image: mysql:5.7
              imagePullPolicy: IfNotPresent
              env:
              - name: MYSQL_ROOT_PASSWORD
                value: redhat
              volumeMounts:
                 - name: mysql-data-volume
                   mountPath: /var/lib/mysql
            volumes:
              - name: mysql-data-volume
                persistentVolumeClaim:
                    claimName: db-pvc-5g
---
apiVersion: v1
kind: Service
metadata:
    name: test-mysql
spec:
    ports:
    - port: 3306
    selector:
        app: mysql
复制代码
[root@k8s-master statefulTest]# kubectl get pod
NAME           READY   STATUS    RESTARTS   AGE
test-mysql-0   1/1     Running   0          6s

[root@k8s-master statefulTest]# kubectl get svc
NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)    AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP    125d
test-mysql   ClusterIP   10.96.61.172   <none>        3306/TCP   48s
2.3 测试有状态负载

删除数据库pod

复制代码
[root@k8s-master statefulTest]# kubectl get pod 
NAME           READY   STATUS    RESTARTS   AGE
test-mysql-0   1/1     Running   0          2m17s
[root@k8s-master statefulTest]# 
[root@k8s-master statefulTest]# 
[root@k8s-master statefulTest]# kubectl delete pod test-mysql-0 
pod "test-mysql-0" deleted

k8s会自动重建、登录mysql查看数据

复制代码
// 再次查看pod,名称不变
[root@k8s-master statefulTest]# kubectl get pod
NAME           READY   STATUS    RESTARTS   AGE
test-mysql-0   1/1     Running   0          16s

// 登录数据库查看数据
[root@k8s-master statefulTest]# kubectl exec -ti test-mysql-0 bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@test-mysql-0:/# mysql -uroot -predhat
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| A                  |
| B                  |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.02 sec)

mysql> 
相关推荐
间彧1 小时前
Helm深度解析:Kubernetes应用管理的利器
kubernetes
间彧2 小时前
K8s: 如何通过kubectl命令实时监控滚动更新的详细过程?
kubernetes
t***D2643 小时前
云原生架构
云原生·架构
岚天start3 小时前
K8S环境中Containerd运行时占用文件定位清理
java·rpc·kubernetes
赵文宇(温玉)7 小时前
不翻墙,基于Rancher极速启动Kubernetes,配置SSO登录,在线环境开放学习体验
学习·kubernetes·rancher
阿里云云原生7 小时前
Agentic 时代必备技能:手把手为 Dify 应用构建全链路可观测系统
云原生
落日漫游7 小时前
CI/CD流程
云原生
炸裂狸花猫8 小时前
开源域名证书工具 - cert-manager
云原生·容器·kubernetes·开源·cert-manager
会飞的小蛮猪8 小时前
Ubuntu24.04基于Docker部署K8s(使用私服部署)
经验分享·docker·云原生·容器·kubernetes
阿里云云原生9 小时前
告别盲排!云监控 2.0 SysOM 破解 4 大隐式内存痛点
云原生