1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/bocloud-open-source-carina

Клонировать/Скачать
topology.md 3 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
zhangkai8048 Отправлено 26.04.2022 10:06 c2b48b8

本地拓扑卷

拓扑卷的目的主要是在调度pvc时,将pv调度到某些特定节点,carina支持topo卷调度,介绍如下

在carina启动时会为每个节点打上topology.carina.storage.io/node=nodename标签,当在storageclass设置topology参数时将按照要求选择存储卷

创建topology存储类 kubectl apply -f storageclass.yaml

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: csi-carina-sc
provisioner: carina.storage.io
parameters:
  # file system
  csi.storage.k8s.io/fstype: xfs
  # disk group
  carina.storage.io/disk-group-name: hdd
reclaimPolicy: Delete
allowVolumeExpansion: true
# 创建pvc后立即创建pv,WaitForFirstConsumer表示被容器绑定调度后再创建pv
volumeBindingMode: Immediate
mountOptions:
allowedTopologies:
  - matchLabelExpressions:
      - key: beta.kubernetes.io/os
        values:
          - linux
          - amd64
      - key: kubernetes.io/hostname
        values:
          - 10.20.9.153
          - 10.20.9.154
  • 注意只有volumeBindingMode: Immediate类型的才支持根据allowedTopologies选择pv所在节点,当volumeBindingMode: WaitForFirstConsumer时,pv选择节点将根据pod的topology设置进行调度

创建一个包含topology选择的statefulset,如下kubectl apply -f statefulset.yamltopologyKey表示该POD只会调度到存在carina存储驱动的节点上

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: carina-topo-stateful
  namespace: carina
spec:
  serviceName: "nginx"
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
              - matchExpressions:
                  - key: kubernetes.io/os
                    operator: In
                    values:
                      - linux
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: app
                    operator: In
                    values:
                      - nginx
              topologyKey: topology.carina.storage.io/node
      containers:
        - name: nginx
          image: nginx
          imagePullPolicy: "IfNotPresent"
          ports:
            - containerPort: 80
              name: web
          volumeMounts:
            - name: www
              mountPath: /usr/share/nginx/html
            - name: logs
              mountPath: /logs
  volumeClaimTemplates:
    - metadata:
        name: www
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: csi-carina-sc
        resources:
          requests:
            storage: 10Gi
    - metadata:
        name: logs
      spec:
        accessModes: [ "ReadWriteOnce" ]
        storageClassName: csi-carina-sc
        resources:
          requests:
            storage: 5Gi

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/bocloud-open-source-carina.git
git@api.gitlife.ru:oschina-mirror/bocloud-open-source-carina.git
oschina-mirror
bocloud-open-source-carina
bocloud-open-source-carina
main