kubernetes学习之持久化存储StorageClass(4.2)

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: kubernetes学习之持久化存储StorageClass(4)

(四)查询sc是否正常


[root@master nfs-sc]# k get sc
NAME                            PROVISIONER      RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storage (default)   fuseim.pri/ifs   Delete          Immediate           true                   9d

这四步完成后,基本nfs持久化数据卷就已经认为可用了,可以算作一个阶段了。剩下的就是建立pvc,然后查看pvc是否自动生成pv。

为什么要说这四步完成就是一个阶段了呢?因为,后面的pvc pv的建立是实际的应用阶段了,现有的nfs持久卷挂载服务已经可用了。后面的步骤都是测试的啦!!!!

(五)建立pvc并测试挂载pv是否正常,这个pvc名称是test-claim:


[root@master nfs-sc]# cat test-claim.yaml 
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim
  annotations: 
    volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Mi
---
kind: Pod
apiVersion: v1
metadata:
  name: test-pod
spec:
  containers:
  - name: test-pod
    image: busybox:1.24
    command:
      - "/bin/sh"
    args:
      - "-c"
      - "touch /mnt/SUCCESS && exit 0 || exit 1"   
    volumeMounts:
      - name: nfs-pvc
        mountPath: "/mnt"
  restartPolicy: "Never"
  volumes:
    - name: nfs-pvc
      persistentVolumeClaim: 
        claimName: test-claim

检测功能是否正常:

[root@master nfs-sc]# k get pods -A
NAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE
database      mysql2-7b77d5f496-8r5tr                   1/1     Running     1          7h36m
default       nfs-client-provisioner-6fc484bd4f-pjxm7   1/1     Running     14         8d
default       nginx-7b54d48599-x2zc5                    1/1     Running     10         5d13h
default       read-pod                                  0/1     Error       0          9h
default       test-pod                                  0/1     Completed   0          30s

有一个名字叫test-pod 的pod 是completed状态,在/data/nfs-sc/目录下:

[root@master nfs-sc]# pwd
/data/nfs-sc
[root@master nfs-sc]# ls
default-test-claim-pvc-a17177ba-d1df-452e-84ec-12499f453b88

可以看到一个SUCCESS文件,表示功能正常

[root@master nfs-sc]# cd default-test-claim-pvc-a17177ba-d1df-452e-84ec-12499f453b88/
[root@master default-test-claim-pvc-a17177ba-d1df-452e-84ec-12499f453b88]# ls
SUCCESS

可以看到pvc名称是test-claim,所在命名空间是default,这说明其它的命名空间可以自由使用kube-system下的pod    nfs-client-provisioner :

[root@master ~]# k get pvc -A
NAMESPACE     NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
default       test-claim    Bound    pvc-9e72b552-f3dd-432e-af7d-4d0a848447bf   1Mi        RWX            managed-nfs-storage   77m

可以看到pv的名称是pvc-9e72b552-f3dd-432e-af7d-4d0a848447bf,capacity,也就是申请的存储最大容量是1M,这个数值可以和前面的pvc定义文件相符:

[root@master ~]# k get pv -A
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                     STORAGECLASS          REASON   AGE
pvc-9e72b552-f3dd-432e-af7d-4d0a848447bf   1Mi        RWX            Delete           Bound    default/test-claim        managed-nfs-storage            81m

(六)部署一个单实例MySQL并挂载


建立一个pvc ,名称为test-claim1:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-claim1
  namespace: database
spec:
  accessModes:  ["ReadWriteOnce"]
  resources:
    requests:
      storage: 1Gi
  storageClassName:  managed-nfs-storage
[root@master mysql]# cat deploy_mysql.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql2
  namespace: database
spec:
  selector:
    matchLabels:
      app: mysql2
  template:
    metadata:
      labels:
        app: mysql2
    spec:
      containers:
      - name: mysql2
        image: mysql:5.7.23
        env:                        
        - name: MYSQL_ROOT_PASSWORD
          value: "123456"
        ports:
        - containerPort: 3306
        volumeMounts:
        - name: nfs-pvc-test
          mountPath: /var/lib/mysql         
          subPath: mysql
      volumes:
      - name: nfs-pvc-test
        persistentVolumeClaim:
          claimName: test-claim1

(七)mysql2这个pod 服务发布:


[root@master mysql]# cat svc_mysql.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql2
  namespace: database
spec:
  type: NodePort
  ports:
  - port: 3306
    targetPort: 3306
    nodePort: 32222
  selector:
    app: mysql2
  selector:
    app: mysql2

执行此文件即可: kubectl apply -f svc_mysql.yaml

(八)Navicat连接数据库,IP地址填写任意一个集群内IP,比如,192.168.217.16,端口号是32222


image.png

(九)单元测试


查看pod:

[root@master ~]# k get po -A
NAMESPACE     NAME                                      READY   STATUS      RESTARTS   AGE
database      mysql2-7b77d5f496-8r5tr                   1/1     Running     2          15h

查看pod的详细信息:

[root@master ~]# k describe pod  mysql2-7b77d5f496-2p6bl -n database
Name:         mysql2-7b77d5f496-2p6bl
Namespace:    database
Priority:     0
Node:         slave1/192.168.217.17
Start Time:   Sat, 16 Jul 2022 12:48:05 +0800
Labels:       app=mysql2
              pod-template-hash=7b77d5f496
Annotations:  <none>
Status:       Running
IP:           10.244.1.6
IPs:
  IP:           10.244.1.6
Controlled By:  ReplicaSet/mysql2-7b77d5f496
Containers:
  mysql2:
    Container ID:   docker://95c44eb4ed328ea8993190450c753bd8bfaae573929f81f25c1adf3d8f3d7ab9
    Image:          mysql:5.7.23
    Image ID:       docker://sha256:1b30b36ae96ace2d29cd9c7a724cbb9d1ce59424a79cad4d117175d273d1689b
    Port:           3306/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Sat, 16 Jul 2022 12:48:06 +0800
    Ready:          True
    Restart Count:  0
    Environment:
      MYSQL_ROOT_PASSWORD:  123456
    Mounts:
      /var/lib/mysql from nfs-pvc-test (rw,path="mysql")
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-v2llp (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  nfs-pvc-test:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  test-claim1
    ReadOnly:   false
  default-token-v2llp:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-v2llp
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:          <none>

这里可以看到,使用的pvc名称是test-claim1,并没有手动建立pv,总体功能是完全正常的。

总结


一二三四步骤是第一个阶段,五以及后面的步骤都是pvc的创建以及pv的自动创建测试。PVC创建的时候使用的namespace和后面部署pod的namespace要一致,第六步有详细的演示,两个文件内定义的namespace必须要一致哦,和最开始的rbac角色创建和nfs-client-provisioner的pod的部署的时候的namespace没有关系了。PROVISIONER_NAME 这个需要两个文件相互呼应,storageclass-nfs.yaml 这个文件会引用到这个值。pvc创建的时候只需要storageClassName这个名称了,因为StorageClass里已经定义过了。这里提到的两个值可以通过命令快速查出:

[root@master ~]# k get sc -A
NAME              PROVISIONER                           RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
managed-nfs-storager   fuseim.pri/ifs   Delete          Immediate           true                  4h6m


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
存储 Kubernetes 持续交付
k8s学习
【10月更文挑战第1天】
544 4
|
12月前
|
存储 Kubernetes 安全
k8s存储类型:emptyDir、hostPath、nfs、pvc及存储类storageclass的静态/动态创建pv
Kubernetes提供了多种存储类型,满足不同的应用需求。`emptyDir`和 `hostPath`适用于临时和宿主机存储需求,`nfs`适用于共享存储,`PersistentVolumeClaim`和 `StorageClass`实现了持久存储的灵活管理。通过理解和配置这些存储类型,可以有效提升Kubernetes集群的存储管理能力。
596 13
|
Kubernetes 应用服务中间件 nginx
k8s学习--YAML资源清单文件托管服务nginx
k8s学习--YAML资源清单文件托管服务nginx
305 2
k8s学习--YAML资源清单文件托管服务nginx
|
Kubernetes 监控 测试技术
k8s学习--基于Ingress-nginx实现灰度发布系统
k8s学习--基于Ingress-nginx实现灰度发布系统
612 2
k8s学习--基于Ingress-nginx实现灰度发布系统
|
Prometheus Kubernetes 监控
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
548 1
k8s学习--kubernetes服务自动伸缩之水平伸缩(pod副本伸缩)HPA详细解释与案例应用
|
存储 Kubernetes 调度
|
Kubernetes API 调度
k8s学习--pod的所有状态详解(图例展示)
k8s学习--pod的所有状态详解(图例展示)
1715 2
|
Kubernetes 监控 调度
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
k8s学习--kubernetes服务自动伸缩之垂直伸缩(资源伸缩)VPA详细解释与安装
606 2
|
Kubernetes JavaScript 前端开发
k8s学习--chart包开发(创建chart包)
k8s学习--chart包开发(创建chart包)
706 1
|
Kubernetes 应用服务中间件 nginx
k8s学习--Traffic Shifting 流量接入
k8s学习--Traffic Shifting 流量接入
189 1

热门文章

最新文章

推荐镜像

更多