Kubernetes Cephストレージの使用


本文は主にKubernetesがCephストレージを使用する関連構成過程を記録し、Kubernetesクラスタ環境が採用したkargo配置方式、そしてすべてのコンポーネントがコンテナ化で運行する.
一、基礎環境の準備
Kubernetesクラスタは全部で5台あり、配置方式はkargoコンテナ化配置であり、kargo配置を採用する際に配置中にカーネルモジュールのロードをオンにすることを確保する(kubelet_load_modules: true).Kubernetesバージョンは1.6です.4,Cephは最新の安定版Jewelを採用
ノード
IP
配置
docker1
192.168.1.11
master、monitor、osd
docker2
192.168.1.12
master、monitor、osd
docker3
192.168.1.13
node、monitor、osd
docker4
192.168.1.14
node、osd
docker5
192.168.1.15
node、osd
二、Cephクラスタの配置
具体的なインストールはCephノート(一)、Cephノート(二)を参照してください.以下は直接命令します.
2.1、クラスタの配置
#         mkdir ceph-cluster && cd ceph-cluster#    monitor-nodeceph-deploy new docker1 docker2 docker3#    OSD     echo "osd pool default size = 5" >> ceph.conf#    cephceph-deploy install docker1 docker2 docker3 docker4 docker5# init monitor nodeceph-deploy mon create-initial#     odsceph-deploy osd prepare docker1:/dev/sda docker2:/dev/sda docker3:/dev/sda docker4:/dev/sda docker5:/dev/sda#    osdceph-deploy osd activate docker1:/dev/sda1:/dev/sda2 docker2:/dev/sda1:/dev/sda2 docker3:/dev/sda1:/dev/sda2 docker4:/dev/sda1:/dev/sda2 docker5:/dev/sda1:/dev/sda2#    ceph cli        ceph-deploy admin docker1 docker2 docker3 docker4 docker5#          chmod +r /etc/ceph/ceph.client.admin.keyring#       ceph health

2.2、ブロックデバイスの作成
#      rados mkpool data#    p_w_picpathrbd create data --size 10240 -p data#        rbd feature disable data exclusive-lock, object-map, fast-diff, deep-flatten -p data#   (        )rbd map data --name client.admin -p data#       (     )mkfs.xfs /dev/rbd0

三、kubernetes Ceph使用
3.1、PV&PVC方式
従来の分散型ストレージの使用方法は、一般にPV & PVC方式であり、すなわち、管理者が予め関連するPVおよびPVCを作成し、対応するdeploymentまたはreplicationがPVCをマウントして使用する.
Secretの作成
#      key     base64   ceph auth get-key client.admin | base64#      secret   (key         )cat <> ceph-secret.yml
apiVersion: v1
kind: Secret
metadata:
  name: ceph-secret
data:
  key: QVFDaWtERlpzODcwQWhBQTdxMWRGODBWOFZxMWNGNnZtNmJHVGc9PQo=
EOFkubectl create -f ceph-secret.yml

PVの作成
# monitor     ,pool   p_w_picpath        cat <> test.pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: test-pv
spec:
  capacity:
    storage: 2Gi
  accessModes:
    - ReadWriteMany
  rbd:
    monitors:
      - 192.168.1.11:6789
      - 192.168.1.12:6789
      - 192.168.1.13:6789
    pool: data
    p_w_picpath: data
    user: admin
    secretRef:
      name: ceph-secret
    fsType: xfs
    readOnly: false
  persistentVolumeReclaimPolicy: Recycle
EOFkubectl create -f test.pv.yml

PVCの作成
cat <> test.pvc.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
EOFkubectl create -f test.pvc.yml

Deploymentの作成とマウント
cat <> test.deploy.yml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
      - name: demo
        p_w_picpath: mritd/demo
        ports:
        - containerPort: 80
        volumeMounts:
          - mountPath: "/data"
            name: data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: test-pvc
EOFkubectl create -f test.deploy.yml

3.2、StoragaClass方式
1.4以降、kubernetesはPVをより容易に動的に作成する方法を提供した.すなわち、StoragaClassを使用する場合、予め一定サイズのPVを作成する必要がなく、使用者がPVCを作成して使用するのを待つ.PVCを直接作成して割り当てるのです
システムレベルSecretの作成
注意:StorageClassはCephのSecret typeがkubernetes.io/rbdである必要があるため、前に作成したceph-secretは先に削除され、次のコマンドを使用して再作成する必要があります.このときkeyはbase 64を通過しなかった
#    secret type     kubernetes.io/rbd,      PVC     kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" --from-literal=key='AQCikDFZs870AhAA7q1dF80V8Vq1cF6vm6bGTg==' --namespace=kube-system
kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" --from-literal=key='AQCikDFZs870AhAA7q1dF80V8Vq1cF6vm6bGTg==' --namespace=default

StorageClassの作成
cat <> test.storageclass.yml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: test-storageclass
provisioner: kubernetes.io/rbd
parameters:
  monitors: 192.168.1.11:6789,192.168.1.12:6789,192.168.1.13:6789
  # Ceph       ID(  k8s  )
  adminId: admin
  adminSecretName: ceph-secret
  adminSecretNamespace: kube-system
  pool: data
  userId: admin
  userSecretName: ceph-secret
EOFkubectl create -f test.storageclass.yml

上のadminIdなどのフィールドの具体的な意味についてはこちらCeph RBDを参照してください
PVCの作成
cat <> test.sc.pvc.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: test-sc-pvc
  annotations: 
    volume.beta.kubernetes.io/storage-class: test-storageclass
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 2Gi
EOFkubectl create -f test.sc.pvc.yml

Deploymentの作成
cat <> test.sc.deploy.yml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: demo-sc
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: demo-sc
    spec:
      containers:
      - name: demo-sc
        p_w_picpath: mritd/demo
        ports:
        - containerPort: 80
        volumeMounts:
          - mountPath: "/data"
            name: data
      volumes:
        - name: data
          persistentVolumeClaim:
            claimName: test-sc-pvc
EOFkubectl create -f test.sc.deploy.yml

これで完了し、成功するかどうかを検出する最も簡単な方法は、関連podが正常に動作しているかどうかを見ることです.
転載は出典を明記してください.本文はCC 4を採用します.0プロトコルの承認
この文書は次のとおりです.https://mritd.me/2017/06/03/use-ceph-storage-on-kubernetes/