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)。

Source: https://habr.com/ru/post/J329666/


All Articles