对于Kuberentes中,一些服务需要持久化的内容,我们一般都会使用一个共享的文件系统,类似与目前各个云厂商提供的对象存储服务,或文件系统服务,自建的话也有NFS、Ceph选择;
这里就简单的说一下我自身采用过的方式:
随着Kubernetes不断的功能完善,国内云厂商也在不断的适配,腾讯云TKE目前支持StorageClass,这样一种动态的添加持久化存储。
在没有这种能力之前,集群管理员需要联系他们的云或者存储提供者来创建新的存储卷,成功以后再创建 PersistentVolume对象,才能够在 Kubernetes 中使用。动态卷供给能力让管理员不必进行预先创建存储卷,而是随用户需求进行创建。
StorageClass:可以定义多个 StorageClass 对象,并可以分别指定存储插件、设置参数,用于提供不同的存储卷。这样的设计让集群管理员能够在同一个集群内,定义和提供不同类型的、不同参数的卷(相同或者不同的存储系统)。这样的设计还确保了最终用户在无需了解太多的情况下,有能力选择不同的存储选项。
示例:这里我就采用腾讯云TKE进行快速的持久化存储创建
新建
生成的yaml文件如下:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
creationTimestamp: "2020-06-18T07:29:23Z"
name: sc-jingwei
resourceVersion: "235169"
selfLink: /apis/storage.k8s.io/v1/storageclasses/sc-jingwei
uid: 43af2853-e5e2-4e47-86a3-be6aa9a870bb
parameters:
paymode: POSTPAID
type: CLOUD_PREMIUM
zone: "160001"
provisioner: cloud.tencent.com/qcloud-cbs
reclaimPolicy: Retain
volumeBindingMode: Immediate
如果是自己维护的Kubernetes集群,创建PVC的需要先创建PV,才能进行,但是由于这是TKE所以我们可以直接创建PVC即可,PV会根据PVC中的选择自动创建关联;
新建
生成的yaml文件如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
annotations:
pv.kubernetes.io/bind-completed: "yes"
pv.kubernetes.io/bound-by-controller: "yes"
volume.beta.kubernetes.io/storage-provisioner: cloud.tencent.com/qcloud-cbs
creationTimestamp: "2020-06-18T07:34:10Z"
finalizers:
- kubernetes.io/pvc-protection
name: pvc-jingwei
namespace: default
resourceVersion: "235881"
selfLink: /api/v1/namespaces/default/persistentvolumeclaims/pvc-jingwei
uid: 2679abc0-1430-4234-91b5-98cdc4aa78ce
spec:
accessModes:
- ReadWriteOnce
dataSource: null
resources:
requests:
storage: 100Gi
storageClassName: sc-jingwei
volumeMode: Filesystem
volumeName: pvc-2679abc0-1430-4234-91b5-98cdc4aa78ce
status:
accessModes:
- ReadWriteOnce
capacity:
storage: 100Gi
phase: Bound
这里我通过命令行来进行查看
[root@192-168-100-4 ~]# kubectl get sc
NAME PROVISIONER AGE
sc-jingwei cloud.tencent.com/qcloud-cbs 11m
[root@192-168-100-4 ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-2679abc0-1430-4234-91b5-98cdc4aa78ce 100Gi RWO Retain Bound default/pvc-jingwei sc-jingwei 6m38s
[root@192-168-100-4 ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-jingwei Bound pvc-2679abc0-1430-4234-91b5-98cdc4aa78ce 100Gi RWO sc-jingwei 6m43s
这里我们再自己创建一个deploymeny文件,使用Nginx的镜像进行确认pvc能否使用。
deployment yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx
namespace: default
labels:
team: test
spec:
replicas: 1
selector:
matchLabels:
team: test
template:
metadata:
labels:
team: test
spec:
containers:
- name: pod-nginx
image: nginx:alpine
imagePullPolicy: Always
resources:
requests:
cpu: "128m"
memory: "256Mi"
limits:
cpu: "2"
memory: "4096Mi"
ports:
- containerPort: 42508
readinessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 1
successThreshold: 1
failureThreshold: 3
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 15
periodSeconds: 20
volumeMounts:
- name: config-volume
mountPath: /etc/java/configs
# 这里我随便挂载到一个目录,待会有这个目录就说明成功了。
volumes:
- name: config-volume
persistentVolumeClaim:
claimName: pvc-jingwei
restartPolicy: Always
这里我在命令行就直接应用了
切入容器查看
经过确认,此方式没用问题!
通过使用腾讯云TKE的存储服务,可以快速的创建的PVC,PV会根据PVC的需求对应创建,并自动增加云硬盘。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。