
翻訳者の序文 :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)。