Kubernetes 动态PV使用

Kubernetes支持动态供给的存储插件:
https://kubernetes.io/docs/concepts/storage/storage-classes/

  • Dynamic Provisioning机制工作的核心在于StorageClass的API对象。
  • StorageClass声明存储插件,用于自动创建PV。

创建动态PVStorageClass

1、创建storageclass相关文件
1.1、vim storageclass-nfs.yaml:标识插件创建storageclass名称

apiVersion: storage.k8s.io/v1beta1
kind: StorageClass
metadata:
# StorageClass名称
name: managed-nfs-storage
# 默认不支持nfs存储,添加支持web插件标识
provisioner: fuseim.pri/ifs

1.2、vim deployment-nfs.yaml:创建nfs相关存储指定服务名称

apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: nfs-client-provisioner
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
imagePullSecrets:
- name: registry-pull-secret
# 绑定角色定义的名称
serviceAccount: nfs-client-provisioner
containers:
# 镜像拉取
- name: nfs-client-provisioner
image: lizhenliang/nfs-client-provisioner:v2.0.0
# 自定义变量格式处理
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
# 指定标识插件的值
value: fuseim.pri/ifs
- name: NFS_SERVER
# nfs地址
value: 192.168.1.115
- name: NFS_PATH
# 挂在路径
value: /data/nfs
volumes:
- name: nfs-client-root
nfs:
# nfs地址
server: 192.168.1.115
# 共享路径
path: /data/nfs

1.3、vim rbac.yaml:创建rbac授权apiserver

apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-client-provisioner --- kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: nfs-client-provisioner-runner
# 角色中可以访问的权限
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["list", "watch", "create", "update", "patch"] --- # 角色绑定
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: run-nfs-client-provisioner
subjects:
# 绑定角色 ServiceAccount
- kind: ServiceAccount
name: nfs-client-provisioner
namespace: default
roleRef:
kind: ClusterRole
name: nfs-client-provisioner-runner
apiGroup: rbac.authorization.k8s.io

2、创建文件

kubectl apply -f storageclass-nfs.yaml
kubectl apply -f rbac.yaml
kubectl apply -f deployment-nfs.yaml

3、查看创建的storageclass
kubectl get storageclass

NAME PROVISIONER AGE
managed-nfs-storage fuseim.pri/ifs 57s

4、查看创建的nfs容器
kubectl get pods

NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-565b4456f6-v9b97 1/1 Running 0 67s

使用动态 PV StorageClass  案例一

环境:部署mysql
1、创建yaml配置文件。vim mysql.yaml

apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
name: mysql
# 创建service为无头服务,标识容器
clusterIP: None
selector:
app: mysql-public --- apiVersion: apps/v1beta1
kind: StatefulSet
# 名称
metadata:
name: db
spec:
# 指定service名称
serviceName: "mysql"
# 标签选择器
template:
metadata:
labels:
app: mysql-public
spec:
# 镜像容器编辑
containers:
- name: mysql
image: mysql:5.7
env:
# 创建数据库用户密码
- name: MYSQL_ROOT_PASSWORD
value: ""
# 创建数据库
- name: MYSQL_DATABASE
value: test
# 启用端口
ports:
- containerPort: 3306
# 数据卷
volumeMounts:
# 挂在容器目录
- mountPath: "/var/lib/mysql"
# 使用来源
name: mysql-data
# 使用数据卷来源
volumes:
# 数据卷名称
- name: mysql-data
# 指定数据卷动态供给
persistentVolumeClaim:
# pvc动态供给名称
claimName: mysql-pvc --- apiVersion: v1
kind: PersistentVolumeClaim
metadata:
# pvc名称
name: mysql-pvc
spec:
# 读写权限
accessModes:
- ReadWriteMany
# 使用的存储类
storageClassName: managed-nfs-storage
# 定义容量
resources:
requests:
storage: 5Gi

2、创建容器

kubectl apply -f mysql.yaml

3、查看持久卷
kubectl get PersistentVolumeClaim

NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-public-mysql-public-0 Bound default-mysql-public-mysql-public-0-pvc-2b4979b7-c89a-11e9-8b0e-000c29400317 2Gi RWO managed-nfs-storage 39m
mysql-pvc Bound default-mysql-pvc-pvc-b8584af2-c89d-11e9-9db0-000c292e28d6 5Gi RWX managed-nfs-storage 14m

使用动态 PV StorageClass  案例二

1、创建文件
vim sts.yaml

apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx --- apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: nginx-statefulset
namespace: default
spec:
serviceName: nginx
replicas: 3
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
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "managed-nfs-storage"
resources:
requests:
storage: 1Gi

2、创建容器

kubectl create -f sts.yaml 

3、查看pod
kubectl get pods

NAME READY STATUS RESTARTS AGE
nginx-statefulset-0 1/1 Running 0 3m21s
nginx-statefulset-1 1/1 Running 0 3m16s
nginx-statefulset-2 1/1 Running 0 3m11s

4、查看动态pv,pvc存储kubectl get pv,pvc
kubectl get pv,pvc

NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/default-mysql-public-mysql-public-0-pvc-2b4979b7-c89a-11e9-8b0e-000c29400317 2Gi RWO Delete Bound default/mysql-public-mysql-public-0 managed-nfs-storage 63m
persistentvolume/default-www-nginx-statefulset-0-pvc-8063e4f9-c8a1-11e9-8b0e-000c29400317 1Gi RWO Delete Bound default/www-nginx-statefulset-0 managed-nfs-storage 11m
persistentvolume/default-www-nginx-statefulset-1-pvc-836c1466-c8a1-11e9-8b0e-000c29400317 1Gi RWO Delete Bound default/www-nginx-statefulset-1 managed-nfs-storage 11m
persistentvolume/default-www-nginx-statefulset-2-pvc-868a4a51-c8a1-11e9-8b0e-000c29400317 1Gi RWO Delete Bound default/www-nginx-statefulset-2 managed-nfs-storage 11m
persistentvolume/my-pv 5Gi RWX Retain Bound default/my-pvc 133m NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/my-pvc Bound my-pv 5Gi RWX 133m
persistentvolumeclaim/mysql-public-mysql-public-0 Bound default-mysql-public-mysql-public-0-pvc-2b4979b7-c89a-11e9-8b0e-000c29400317 2Gi RWO managed-nfs-storage 63m
persistentvolumeclaim/www-nginx-statefulset-0 Bound default-www-nginx-statefulset-0-pvc-8063e4f9-c8a1-11e9-8b0e-000c29400317 1Gi RWO managed-nfs-storage 11m
persistentvolumeclaim/www-nginx-statefulset-1 Bound default-www-nginx-statefulset-1-pvc-836c1466-c8a1-11e9-8b0e-000c29400317 1Gi RWO managed-nfs-storage 11m
persistentvolumeclaim/www-nginx-statefulset-2 Bound default-www-nginx-statefulset-2-pvc-868a4a51-c8a1-11e9-8b0e-000c29400317 1Gi RWO managed-nfs-storage 11m

5、nfs服务器会自动创建pv数据
[root@localhost nfs]# ls

default-www-nginx-statefulset-0-pvc-8063e4f9-c8a1-11e9-8b0e-000c29400317
default-www-nginx-statefulset-1-pvc-836c1466-c8a1-11e9-8b0e-000c29400317
default-www-nginx-statefulset-2-pvc-868a4a51-c8a1-11e9-8b0e-000c29400317

最新文章

  1. [No0000AC]全局鼠标键盘模拟器
  2. java并发控制:lock
  3. CSS中定位和浮动对行内元素的宽高的影响
  4. Java开发之JSP指令
  5. php闭包支持
  6. Android在MediaMuxer和MediaCodec用例 - audio+video
  7. python 自动化之路 day 09 进程、线程、协程篇
  8. Android 判断听云是否嵌入正确
  9. Tapestry5.3使用总结
  10. Document Classification
  11. MUI如何调取相册的方法
  12. android散点技术
  13. Thymeleaf利用layout.html文件生成页面布局框架
  14. final 关键字与安全发布 多线程中篇(十三)
  15. 022 Spark shuffle过程
  16. Mac安装crfpp
  17. nginx配置location总结及rewrite规则写法(2)
  18. 3.表单form
  19. [原创]STM32 BOOT模式配置以及作用
  20. Vivado中xilinx_BRAM IP核使用

热门文章

  1. OpenGL入门1.6:坐标系统,3D箱子
  2. JS基本语法---while循环---练习
  3. find命令通过排序只保留最新的文件目录
  4. javascript json的使用
  5. Linux(ubuntu) 三行代码搞定安装谷歌浏览器
  6. QML调用C++
  7. PHP代码篇(五)--如何将图片文件上传到另外一台服务上
  8. [Linux] 纯净ubuntu系统仓库更换为阿里云的源
  9. Linux文件传输协议2019-7-9
  10. python详解json模块