在CCE集群中挂载CDS

目录

前置条件

  • 与集群节点所处地域和可用区相同的CDS磁盘已创建,并获取CDS磁盘ID
  • CDS磁盘状态为未挂载

操作指南

当前CDS磁盘以FlexVolume形式在集群中挂载。FlexVolume可以直接在Pod中挂载,也可以基于FlexVolume创建PV和PVC存储资源后,再在Pod中挂载。两种挂载方案都可以满足容器内特定数据持久化的需求,两者详细的区别请参考kubernetes官方文档:

当前CCE支持集群内节点跨可用区,但是CDS磁盘无法跨可用区进行挂载。若集群中存在多个可用区的集群节点,需要参考指定Pod调度到特定可用区的集群节点进行配置,保证CDS可以正常挂载。

通过Volume方式挂载

注意:

  • CDS同一时间只能挂载在一台bcc实例上。
  • CDS同一时间只能被一个Pod声明使用。
  • 对于Deployment/ReplicaSet等资源,replicas域只能设置为1。

下面的示例 cds-example.yaml 将文件中声明的CDS磁盘挂载到Pod内my-nginx容器的/data路径下。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-nginx
  template:
    metadata:
      name: my-nginx
      labels:
        app: my-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        volumeMounts:
        - name: cds-data
          mountPath: /data
        ports:
        - containerPort: 80
      volumes:
      - name: cds-data
        flexVolume:
          driver: "baidubce/cds"
          fsType: "ext4"
          options:
            volumeID: "v-hTXAGtin"

flexVolume字段说明:

  • fsType:CDS磁盘的文件系统,如果是新建的CDS磁盘,将会自动格式化该CDS磁盘为该文件系统
  • volumeID:CDS磁盘ID,您可以从百度智能云控制台的页面获取

使用 kubectl create -f cds-example.yaml 创建相应的资源,相应的CDS磁盘将会被挂载到my-nginx容器内的/data目录下。Pod在集群内发生漂移时,该CDS磁盘将会跟随Pod一同迁移。

通过PV/PVC方式挂载

注意:

  • CDS同一时间只能挂载在一台bcc实例上,因此accessModes只能设置为ReadWriteOnce
  • 当前容量功能支持尚不完善,在PV中指定的capacity建议设置为与CDS磁盘大小一致或者小于CDS磁盘大小。
    下面的示例 cds-pv-pvc-example.yaml 使用文件中声明的CDS磁盘创建了名为pv-cds的PV资源,并且将一个PVC绑定到了该PV上,最后创建一个Deployment,在对应Pod中/data路径挂载该PVC。
    ```
    apiVersion: v1
    kind: PersistentVolume
    metadata:
    name: pv-cds
    namespace: "default"
    spec:
    accessModes:
    • ReadWriteOnce
      capacity:
      storage: 5Gi
      flexVolume:
      driver: "baidubce/cds"
      fsType: "ext4"
      options:
      volumeID: "v-hTXAGtin"
      persistentVolumeReclaimPolicy: Retain

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-cds
namespace: "default"
spec:
accessModes:

- ReadWriteOnce

resources:
requests:

storage: 5Gi

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-nginx
spec:
replicas: 1
selector:
matchLabels:
app: my-nginx
template:
metadata:
name: my-nginx
labels:
app: my-nginx
spec:
containers:

- name: my-nginx
    image: nginx
    volumeMounts:
    - name: cds-pv-data
      mountPath: /data
    ports:
    - containerPort: 80
  volumes:
  - name: cds-pv-data
    persistentVolumeClaim:
      claimName: pvc-cds

```
flexVolume字段说明:

  • fsType:CDS磁盘的文件系统,如果是新建的CDS磁盘,将会自动格式化该CDS磁盘为该文件系统
  • volumeID:CDS磁盘ID,您可以从百度智能云控制台的页面获取
    使用 kubectl create -f cds-pv-pvc-example.yaml 创建相应的资源,相应的CDS磁盘将会被挂载到my-nginx容器内的/data目录下。Pod在集群内发生漂移时,该CDS磁盘将会跟随Pod一同迁移。

在单个Pod中挂载多块CDS

注意:

  • 在Pod Spec的volumes字段中,每块CDS只能被声明一次。
  • 在Pod Spec的volumeMounts字段中,每块CDS对应的volume可以被引用多次。
  • 对于Deployment/ReplicaSet等资源,replicas域只能设置为1。

下面的示例 cds-multi-mount-example.yaml 将文件中声明的四块CDS磁盘分别挂载到Pod mysql-nginx内的my-nginxmy-mysql两个容器的相应路径下,其中test-datatest-data-2两个volume对应的CDS为两个容器共享,而nginx-datadb-data两个volume对应的CDS分别只挂载在各自容器中。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mysql-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-nginx
  template:
    metadata:
      name: mysql-nginx
      labels:
        app: mysql-nginx
    spec:
      containers:
      - name: my-nginx
        image: nginx
        volumeMounts:
        - name: nginx-data
          mountPath: /nginx-data
        - name: test-data
          mountPath: /test-data
        - name: test-data-2
          mountPath: /test-data-2
        ports:
        - containerPort: 80
      - name: my-mysql
        image: mysql:5.7
        volumeMounts:
        - name: db-data
          mountPath: /db-data
        - name: test-data
          mountPath: /test-data
        - name: test-data-2
          mountPath: /test-data-2
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: M6jshva8hTXAGnin
      volumes:
      - name: db-data
        flexVolume:
          driver: "baidubce/cds"
          fsType: "ext4"
          options:
            volumeID: "v-Hd8MUXA7"
      - name: nginx-data
        flexVolume:
          driver: "baidubce/cds"
          fsType: "ext4"
          options:
            volumeID: "v-OWEHtlSI"
      - name: test-data
        flexVolume:
          driver: "baidubce/cds"
          fsType: "ext4"
          options:
            volumeID: "v-9PhGVoMu"
      - name: test-data-2
        flexVolume:
          driver: "baidubce/cds"
          fsType: "ext4"
          options:
            volumeID: "v-SxjD482V"

flexVolume字段说明:

  • fsType:CDS磁盘的文件系统,如果是新建的CDS磁盘,将会自动格式化该CDS磁盘为该文件系统
  • volumeID:CDS磁盘ID,您可以从百度智能云控制台的页面获取

使用 kubectl create -f cds-multi-mount-example.yaml 创建相应的资源,相应的CDS磁盘将会被挂载到文件中声明的各个目录下。Pod在集群内发生漂移时,这些CDS磁盘将会跟随Pod一同迁移。

指定Pod调度到特定可用区的集群节点

CCE集群默认会为集群节点打上可用区标签:

$ kubectl get nodes --show-labels
NAME            STATUS    ROLES     AGE       VERSION   LABELS
192.168.80.15   Ready     <none>    13d       v1.8.12   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/instance-type=BCC,beta.kubernetes.io/os=linux,failure-domain.beta.kubernetes.io/region=bj,failure-domain.beta.kubernetes.io/zone=zoneC,kubernetes.io/hostname=192.168.80.15

其中 failure-domain.beta.kubernetes.io/zone=zoneC 标签说明该集群节点处于C可用区。

如果需要在Pod中挂载特定可用区的CDS磁盘,需要在Pod Spec中加入nodeSelector字段,指定相应标签的值,限制Pod只能调度到相应可用区的集群节点上。

下面的示例 nodeSelector-example.yaml 指定该Deployment创建的Pod只能被调度到C可用区的集群节点上。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-nginx
  template:
    metadata:
      name: my-nginx
      labels:
        app: my-nginx
    spec:
      nodeSelector:
        failure-domain.beta.kubernetes.io/zone: "zoneC"
      containers:
      - name: my-nginx
        image: nginx
        volumeMounts:
        - name: cds-data
          mountPath: /data
        ports:
        - containerPort: 80
      volumes:
      - name: cds-data
        flexVolume:
          driver: "baidubce/cds"
          fsType: "ext4"
          options:
            volumeID: "v-hTXAGtin"

通过该方式,可以保证挂载特定可用区CDS磁盘的Pod只被调度到相应可用区的集群节点上。