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> 
相关推荐
阿里云云原生3 天前
阿里云获评 Agentic AI 开发平台领导者,函数计算 AgentRun 赢下关键分!
云原生
蝎子莱莱爱打怪3 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀3 天前
Docker部署Nacos
docker·容器
缓解AI焦虑3 天前
Docker + K8s 部署大模型推理服务:资源划分与多实例调度
docker·容器
阿里云云原生3 天前
MSE Nacos Prompt 管理:让 AI Agent 的核心配置真正可治理
微服务·云原生
阿里云云原生3 天前
当 AI Agent 接管手机:移动端如何进行观测
云原生·agent
阿里云云原生3 天前
AI 原生应用开源开发者沙龙·深圳站精彩回顾 & PPT下载
云原生
阿里云云原生3 天前
灵感启发:日产文章 100 篇,打造“实时热点洞察”引擎
云原生
1candobetter4 天前
Docker Compose Build 与 Up 的区别:什么时候必须重建镜像
docker·容器·eureka
~莫子4 天前
Haproxy七层负载详解+实验详细代码
云原生