Cephに基づいてKubernetesでプロビジョニングする永続ストレージを作成します



翻訳者の序文 :KubernetesでのCephの展開に関する資料をようやく準備しようとしていたとき、英語で、 Cron (ボスニアおよびヘルツェゴビナから)から既製の、そして重要なことには(2017年4月から)新鮮な指示を見つけました。 そのシンプルさと実用性を確信して、私たちは他のシステム管理者やDevOpsエンジニアと「現状のまま」の形式で共有することにしました。



特にプライベートクラウドインフラストラクチャの急増により、ソフトウェア定義のデータウェアハウスはここ数年で人気を集めています。 このようなリポジトリはDockerコンテナの重要な部分であり、最も人気のあるリポジトリはCephです。 既にストレージにCephがある場合は、Kubernetesでの完全なサポートのおかげで、ユーザーの要求に応じてストレージ用のボリュームの動的作成(ボリュームプロビジョニング)を簡単に構成できます。 それらの作成の自動化は、Kubernetes StorageClassesを使用して実装されます。 このチュートリアルでは、CephリポジトリがKubernetesクラスターに実装される方法を示します。 (kubeadmによって管理されるKubernetesテストインストールの作成については、 この記事で英語で説明されています 。)



開始するには、[Kubernetesのインストールに加えて]すべてのKubernetesノードで機能するCephクラスターとrbd



クライアントも必要です。 ご注意 perev。 :RBDまたはRADOSブロックデバイス-Cephオブジェクトをブロックデバイスとして接続できるLinuxカーネルドライバー。 この記事の著者は、 JewelバージョンのCephクラスターとKubernetesノード上のUbuntu 16.04 Linuxディストリビューションを使用しているため、Cephクライアントライブラリ(前述のrbd



を含む)の
インストールは簡単に見えます。



 $ sudo apt-get install ceph-common
      
      





公式のrbd



kube-controller-manager



rbd



にはrbd



クライアントがインストールされていないため、別のイメージを使用します。 これを行うには、 /etc/kubernetes/manifests/kube-controller-manager.yaml



のイメージ名を/etc/kubernetes/manifests/kube-controller-manager.yaml



に変更しquay.io/attcomdev/kube-controller-manager:v1.6.1



(バージョン1.6.3は現在使用可能ですが、具体的には、 1.5.3および1.6.1でのみテストされています - 約transl。 、新しいイメージでkube-controller-manager



が再起動するまで待ちます。



kube-controller-manager



がリポジトリのプロビジョニングを実行できるようにするには、Cephの管理キーが必要です。 このキーは次のように取得できます。



 $ sudo ceph --cluster ceph auth get-key client.admin
      
      





Kubernetesシークレットに追加します。



 $ kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" \ --from-literal=key='AQBwruNY/lEmCxAAKS7tzZHSforkUE85htnA/g==' --namespace=kube-system
      
      





CephクラスターのKubernetesノードの場合、別のプールを作成します-ノードのrbdで使用します:



 $ sudo ceph --cluster ceph osd pool create kube 1024 1024
      
      





クライアントキーも作成します(Cephx認証はCephクラスターで有効になっています):



 $ sudo ceph --cluster ceph auth get-or-create client.kube mon 'allow r' osd 'allow rwx pool=kube'
      
      





異なる名前空間をより分離するには、Kubernetesクラスターの各名前空間に個別のプールを作成します。 client.kube



キーを取得します。



 $ sudo ceph --cluster ceph auth get-key client.kube
      
      





そして、デフォルトの名前空間に新しいシークレットを作成します。



 $ kubectl create secret generic ceph-secret-kube --type="kubernetes.io/rbd" \ --from-literal=key='AQC/c+dYsXNUNBAAMTEW1/WnzXdmDZIBhcw6ug==' --namespace=default
      
      





両方のシークレットが追加されると、新しいStorageClassを定義および作成できます。



 $ cat > ceph-storage-fast_rbd.yml <<EOF
      
      





 apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast_rbd provisioner: kubernetes.io/rbd parameters: monitors: <monitor-1-ip>:6789, <monitor-2-ip>:6789, <monitor-3-ip>:6789 adminId: admin adminSecretName: ceph-secret adminSecretNamespace: "kube-system" pool: kube userId: kube userSecretName: ceph-secret-kube
      
      





 EOF
      
      





注翻訳 :このコードは何らかの理由で元の記事から欠落しているため、独自のコードを追加し、発見された省略について著者に通知しました。)



fast_rbd



というfast_rbd



作成されたStorageClassを使用して、「永続的なボリューム要求」( PersistentVolumeClaim )を作成しfast_rbd







 $ cat > ceph-vc.yml <<EOF
      
      





 apiVersion: v1 kind: PersistentVolumeClaim metadata: name: claim1 spec: accessModes: - ReadWriteOnce resources: requests: storage: 3Gi storageClassName: fast_rbd
      
      





 EOF $ kubectl create -f ceph-vc.yml --namespace=default
      
      





すべてが正しく機能することを確認します。



 $ kubectl describe pvc Name: claim1 Namespace: default StorageClass: fast_rbd Status: Bound Volume: pvc-c1ffa983-1b8f-11e7-864f-0243fc58af9d Labels: Annotations: pv.kubernetes.io/bind-completed=yes pv.kubernetes.io/bound-by-controller=yes volume.beta.kubernetes.io/storage-provisioner=kubernetes.io/rbd Capacity: 3Gi Access Modes: RWO Events: FirstSeen LastSeen Count From SubObjectPath Type … --------- -------- ----- ---- ------------- -------- … 3m 3m 1 persistentvolume-controller Normal … … Reason Message … ------ ------- … ProvisioningSucceeded Successfully provisioned volume pvc-c1ffa983-… using kubernetes.io/rbd $ kubectl describe pv Name: pvc-c1ffa983-1b8f-11e7-864f-0243fc58af9d Labels: Annotations: pv.kubernetes.io/bound-by-controller=yes pv.kubernetes.io/provisioned-by=kubernetes.io/rbd StorageClass: fast_rbd Status: Bound Claim: default/claim1 Reclaim Policy: Delete Access Modes: RWO Capacity: 3Gi Message: Source: Type: RBD (a Rados Block Device mount on the host that shares a pod's lifetime) CephMonitors: [192.168.42.10:6789] RBDImage: kubernetes-dynamic-pvc-c201abb5-1b8f-11e7-84a4-0243fc58af9d FSType: RBDPool: kube RadosUser: kube Keyring: /etc/ceph/keyring SecretRef: &{ceph-secret-kube} ReadOnly: false Events:
      
      





最後のステップは、生成されたPersistentVolumeClaim( claim1



)を使用してテストテストを作成することです。

 $ cat > pod.yml <<EOF
      
      





 apiVersion: v1 kind: ReplicationController metadata: name: nginx spec: replicas: 1 selector: app: nginx template: metadata: name: nginx labels: app: nginx spec: containers: - name: nginx image: nginx ports: - containerPort: 80 volumeMounts: - mountPath: /var/lib/www/html name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: claim1
      
      





 EOF $ kubectl create -f pod.yml --namespace=default
      
      





それだけです。新しいコンテナはCephイメージを使用します。これはユーザーのリクエストで動的に作成されます(PersistentVolumeClaim)。



All Articles