# TKE操作笔记03

该文章主要介绍了存储卷在TKE上的使用。

## PV，PVC，StoragClass配置使用

### StoragClass配置使用

StorageClass 描述存储的类型，集群管理员可以为集群定义不同的存储类别。腾讯云 TKE 服务默认提供块存储类型的 StorageClass，通过 StorageClass 配合 PersistentVolumeClaim 可以动态创建需要的存储资源。

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Fe4ba213e95da85eb12a867bc78ec34e097e12df7.png?generation=1606373405183430\&alt=media)

找到你的集群，选择存储中的storaeclass，点击新建

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F58b7f1fc6c876de382d0f79f24943d338ee39b6d.png?generation=1606373404990125\&alt=media)

根据实际需求，设置 StorageClass 参数。关键参数信息如下：

* 名称：自定义。（我填写的是nwx-sc）
* 计费模式：根据实际需求进行选择。（我选择的是按量计费）
* 可用区：根据实际需求进行设置，默认为 “随机可用区”。（我这里选择广州三区）
* 云盘类型：根据实际需求进行选择。（我选择的是高性能云硬盘）
* 回收策略：根据实际需求进行选择。（我选择的是删除）

单击【创建StorageClass】，完成创建。

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F12572d011934a8de21795ea1d48445485a852984.png?generation=1606373402861404\&alt=media)

至此，storageclass创建完成！

### PVC的配置使用

#### 创建PVC

PersistentVolumeClaim（PVC）：集群内的存储请求。例如，PV 是 Pod 使用节点资源，PVC 则声明使用 PV 资源。当 PV 资源不足时，PVC 也可以动态创建 PV。

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F8bdcb05f5af5048fea08115dd6e848fd3f4abc39.png?generation=1606373403890328\&alt=media)

点击存储，选择PVC,再点击新建

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F76753b050e490b2187fd82538701edf2acd71364.png?generation=1606373404199409\&alt=media)

填写pvc名称，我这里写的是nwx-test-pvc，选择命名空间为test，读写权限为单机读写，SC选择我们之前创建的nwx-sc，大小为10G。

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F1416f6dbd73be5fc8f062bffbf96e5c07b0cd153.png?generation=1606373402882645\&alt=media)

PVC已经创建完成

#### 控制台配置挂载PVC

我们把新建的pvc挂载到之前的nginx服务中，我们可以通过修改yaml和在控制台修改配置进行挂载

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F0f5a51614232293b437b68c7265a4905503c8dda.png?generation=1606373407305502\&alt=media)

找到我们之前创建的deployment，然后点击pod配置修改

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Fb783c6e440206ddba1708507021179d987362846.png?generation=1606373403235631\&alt=media)

数据卷选择我们之前创建的PVC，然后在挂载点钟选择挂载的PVC和挂载路径，我们这里挂载到/tmp

#### 修改yaml挂载PVC

在控制台修改yaml

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F0141903509d9f38dd928917189d3acfc6113ecdf.png?generation=1606373405721623\&alt=media)

命令修改yaml

```
[root@VM_0_13_centos ~]# kubectl get deployment -n test
[root@VM_0_13_centos ~]# kubectl edit deployment new-nginx -n test
```

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F0500fac079a34d0e40107d0e31aad8fdc6bcfe16.png?generation=1606373403572510\&alt=media)

完整的yaml文件

```
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "2"
  creationTimestamp: "2020-06-02T09:36:11Z"
  generation: 2
  labels:
    k8s-app: new-nginx
    qcloud-app: new-nginx
  name: new-nginx
  namespace: test
  resourceVersion: "8614784222"
  selfLink: /apis/apps/v1beta2/namespaces/test/deployments/new-nginx
  uid: 7e77455e-a4b4-11ea-9c35-e28957d7d0b3
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: new-nginx
      qcloud-app: new-nginx
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s-app: new-nginx
        qcloud-app: new-nginx
    spec:
      containers:
      - env:
        - name: RUNTIME
          valueFrom:
            configMapKeyRef:
              key: RUNTIME
              name: nginx-env
              optional: false
        - name: TZ
          valueFrom:
            configMapKeyRef:
              key: TZ
              name: nginx-env
              optional: false
        image: ccr.ccs.tencentyun.com/tmptest/nwx-nginx
        imagePullPolicy: IfNotPresent
        name: new-my-nginx
        resources:
          limits:
            cpu: 500m
            memory: 1Gi
          requests:
            cpu: 250m
            memory: 256Mi
        securityContext:
          privileged: false
          procMount: Default
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /tmp
          name: data-volume
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: test-secret
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
      - name: data-volume
        persistentVolumeClaim:
          claimName: nwx-pvc1
status:
  availableReplicas: 1
  conditions:
  - lastTransitionTime: "2020-06-03T02:41:32Z"
    lastUpdateTime: "2020-06-03T02:41:32Z"
    message: Deployment has minimum availability.
    reason: MinimumReplicasAvailable
    status: "True"
    type: Available
  - lastTransitionTime: "2020-06-02T09:36:11Z"
    lastUpdateTime: "2020-06-03T02:51:59Z"
    message: ReplicaSet "new-nginx-86774775f6" has successfully progressed.
    reason: NewReplicaSetAvailable
    status: "True"
    type: Progressing
  observedGeneration: 2
  readyReplicas: 1
  replicas: 1
  updatedReplicas: 1
```

#### 验证PVC是否挂载成功

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F79f566603954e3c1bb41f6746e81b0213772c95c.png?generation=1606373406663654\&alt=media)

### PV的配置使用

#### 动态创建PV

PersistentVolume（PV）：集群内的存储资源，例如节点是集群的资源。PV 独立于 Pod 的生命周期，根据不同的 StorageClass 类型创建不同类型的 PV。

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Faaedfbdda24e10ce5bca8d292a1aaf999fd552f7.png?generation=1606373405959296\&alt=media)

当我们在PVC中引用对应的SC，会动态的创建PV。

#### 静态创建CBS类型PV

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F659b607045b0536db13021470a24ecd91c4de29f.png?generation=1606373403372664\&alt=media)

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F566dcf3c504034816bbd5f18a64f07d60b2172b7.png?generation=1606373406408046\&alt=media)

静态PV支持三种类型，CFS和COS需要去扩展组件中安装组件

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F6a5511738648c39efb2ebd21b55fef103b761fef.png?generation=1606373407742256\&alt=media)

安装COS和CFS组件

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F43df85980173944a553c329bc3973f719cf9c378.png?generation=1606373405437297\&alt=media)

静态创建CBS类型pv，选择关联的SC即可

#### 静态创建CFS类型PV并关联到PVC

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Fd6194f37e3614526676b49eb413ed19f1beca99b.png?generation=1606373404454587\&alt=media)

先要创建好CFS类型的SC

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F20a24f39bb6f68a1eb765b1419a9927ba503cb77.png?generation=1606373407197926\&alt=media)

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Fdf625568c775e251ecb316a8177e702f3efe7229.png?generation=1606373406930336\&alt=media)

在集群的同一个私有网络下创建NFS

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F3b5c3071c0de2bc6840013dc09e0e140cffd492b.png?generation=1606373406165056\&alt=media)

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2F68f2d2415142ca5faac096d44464bc43676191d3.png?generation=1606373407768823\&alt=media)

静态创建pv,并关联之前的sc和新建的NFS

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Facdd439591c4288838dbe0c3036ebb2e361ba2d7.png?generation=1606373404966676\&alt=media)

创建PVC，关联创建的nfs类型pv,创建成功，即可引用

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Fcb5428841f1da3266ec09495d42e6f22d76d6ae0.png?generation=1606373406741832\&alt=media)

创建成功，可以在yaml中或者控制台修改deployment配置进行挂载

#### 静态创建CBS类型PV并关联到PVC

首先在云服务器中创建你所需要的CBS卷

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Fd44cba9f546c4d12bee9d5d1f96529598348752b.png?generation=1606373406060038\&alt=media)

创建pv，选择你创建的云盘

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Fe55671dd02ce805a358cabb433dbe5378edbcfda.png?generation=1606373403995664\&alt=media)

创建PVC，选择你的容量，注意，如果你之前创建了多个PV，PVC关联的规则选择容量大于或等于当前PVC设置的容量大小的静态创建的PersistentVolume

![upload-image](https://1743139827-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MMy-ccvHJYp-MpGyagk%2Fsync%2Fd3211a333a8b86d158902dfeeef667e37e4904f1.png?generation=1606373404589854\&alt=media)

创建成功，可以在yaml中或者控制台修改deployment配置进行挂载
