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> 
相关推荐
文言一心10 分钟前
基于 Docker + Docker Compose 实现一键部署(单节点部署场景下轻量、易维护、可一键启停)
运维·docker·容器
守护砂之国泰裤辣21 分钟前
Windows+docker下简单kafka测试联调
java·运维·spring boot·docker·容器
释怀不想释怀26 分钟前
Docker(常见命令)
docker·容器·eureka
Mr_sun.42 分钟前
Day01——微服务服务注册与发现
微服务·云原生·架构
hanyi_qwe1 小时前
K8S网络和基本命令 【 K8S (二)】
网络·容器·kubernetes
Zsr10231 小时前
Rancher:一站式Kubernetes管理平台,让容器运维更简单
运维·kubernetes·rancher
叽里咕噜怪1 小时前
Pod的详解与进阶
运维·容器·kubernetes
酒醉的胡铁2 小时前
Docker Desktop 数据迁移完整流程(Windows 10/11 x64)
windows·docker·容器
小北方城市网2 小时前
第 6 课:云原生架构终极落地|K8s 全栈编排与高可用架构设计实战
大数据·人工智能·python·云原生·架构·kubernetes·geo
❀͜͡傀儡师2 小时前
Kubernetes 1.34.3部署PostgresSQL的v18.1
云原生·容器·kubernetes·postgressql