CSE: vCloud のユーザー向けの Kubernetes

CSE: vCloud のユーザー向けの Kubernetes
みなさん、こんにちは!

たまたま、私たちの小さなチームが、最近というわけではありませんし、もちろん突然ではありませんが、一部の製品 (将来的にはすべての製品) を Kubernetes に移行するまでに成長しました。

これには多くの理由がありましたが、私たちの話はホリバーに関するものではありません。

インフラ基盤に関してはほとんど選択肢がありませんでした。 vCloud ディレクターと vCloud ディレクター。 新しいものを選択して開始することにしました。

もう一度、「The Hard Way」を調べてみると、昨日、展開やサイジングなどの少なくとも基本的なプロセスを自動化するツールが必要であるという結論にすぐに至りました。 Google を深く掘り下げた結果、VMware Container Service Extension (CSE) などの製品が明らかになりました。これは、vCloud 内の k8s クラスターの作成とサイジングを自動化できるオープン ソース製品です。

免責事項: CSE には制限がありますが、私たちの目的にとっては完璧でした。 また、ソリューションはクラウドプロバイダーによってサポートされている必要がありますが、サーバー部分もオープンソースであるため、最寄りのマネージャーに利用できるように依頼してください:)

これを使用するには、vCloud 組織の管理者アカウントと、クラスター用に事前に作成したルーティングされたネットワークが必要です (展開プロセス中、このネットワークからのインターネット アクセスが必要です。ファイアウォール/NAT の構成を忘れないでください)。 宛先は関係ありません。 この例では、10.0.240.0/24 を取り上げます。

CSE: vCloud のユーザー向けの Kubernetes

作成後、クラスターを何らかの方法で管理する必要があるため、作成したネットワークへのルーティングを備えた VPN を用意することをお勧めします。 当社では、組織の Edge Gateway で構成された標準の SSL VPN を使用しています。

次に、k8s クラスターが管理される CSE クライアントをインストールする必要があります。 私の場合、これは動作するラップトップと、自動化を推進するうまく隠されたいくつかのコンテナーです。

クライアントには、Python バージョン 3.7.3 以降がインストールされており、モジュールがインストールされている必要があります。 vcd-cli, なので両方インストールしましょう。

pip3 install vcd-cli

pip3 install container-service-extension

インストール後、CSE バージョンを確認すると、次の情報が得られます。

# vcd cse version
Error: No such command "cse".

予期せぬことですが、修正可能です。 結局のところ、CSE はモジュールとして vcd-cli に接続する必要があります。
これを行うには、まず vcd-cli で組織にログインする必要があります。

# vcd login MyCloud.provider.com org-dev admin
Password: 
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'

この後、vcd-cli は構成ファイルを作成します ~/.vcd-cli/profiles.yaml
最後に、以下を追加する必要があります。

extensions:
  - container_service_extension.client.cse

次に、もう一度確認します。

# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0

クライアントのインストール段階が完了しました。 最初のクラスターをデプロイしてみましょう。
CSE にはいくつかの使用パラメータのセットがあり、それらはすべて表示できます ここに。

まず、将来のクラスターにパスワードなしでアクセスするためのキーを作成しましょう。 この点は重要です。デフォルトでは、ノードへのパスワード ログインが無効になっており、キーを設定しないと、仮想マシン コンソールを介して多くの作業を行うことができ、不便になるためです。

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

クラスターの作成を開始してみましょう。

vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/.ssh/id_rsa.pub --nodes 3 --enable-nfs

エラーが発生した場合 エラー: セッションの有効期限が切れたか、ユーザーがログインしていません。 再ログインしてください。 — 上記のように vcd-cli で vCloud に再度ログインし、再試行します。

今回はすべて問題なく、クラスターを作成するタスクが開始されました。

cluster operation: Creating cluster vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) from template 'photon-v2_k8-1.12_weave-2.3.0' (revision 1)

タスクを完了するには約 20 分かかります。その間に、基本的な起動パラメータを見てみましょう。

—ネットワーク — 前に作成したネットワーク。
—ssh-key — 作成したキー。クラスター ノードに書き込まれます。
—nodes n — クラスター内のワーカー ノードの数。 マスターは常に XNUMX つあります。これは CSE の制限です。
—enable-nfs — 永続ボリュームの下に NFS 共有用の追加ノードを作成します。 これはペダルのオプションのようなもので、その機能の調整については後ほど説明します。

一方、vCloud では、クラスターの作成を視覚的に監視できます。
CSE: vCloud のユーザー向けの Kubernetes

クラスターを作成するタスクが完了すると、クラスターを使用できるようになります。

コマンドでデプロイメントが正しいか確認してみましょう vcd cse クラスター情報 MyCluster

CSE: vCloud のユーザー向けの Kubernetes

次に、使用するクラスター構成を取得する必要があります。 キューブクル

# vcd cse cluster config MyCluster > ./.kube/config

これを使用してクラスターのステータスを確認できます。

CSE: vCloud のユーザー向けの Kubernetes

この時点で、永続ボリュームを含むストーリーが対象でない場合、クラスターは条件付きで動作していると見なすことができます。 ここでは vCloud を使用しているため、vSphere Provider は使用できません。 オプション --enable-nfs この煩わしさを解消するように設計されましたが、完全にはうまくいきませんでした。 手動調整が必要です。

まず、ノードで vCloud に別の独立ディスクを作成する必要があります。 これにより、データが削除されてもクラスターと一緒に消えないことが保証されます。 また、ディスクをNFSに接続します

# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1

その後、ssh 経由で (本当にキーを作成しましたか?) NFS ノードに移動し、最後にディスクを接続します。

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 100GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name     Flags
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Creating filesystem with 24413696 4k blocks and 6111232 inodes
Filesystem UUID: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

データ用のディレクトリを作成し、そこに新しいパーティションをマウントします。

mkdir /export
echo '/dev/sdb1  /export   ext4  defaults   0 0' >> /etc/fstab
mount -a

XNUMX つのテスト パーティションを作成し、クラスターで共有しましょう。

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Добавим это в конец файла
/export/vol1 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol2 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol3 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol4 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol5 *(rw,sync,no_root_squash,no_subtree_check)
#:wq! ;)
#Далее - экспортируем разделы
>exportfs -r

このすべての魔法の後、次のようにクラスター内に PV と PVC を作成できます。
PV:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Same IP as the NFS host we ssh'ed to earlier.
    server: 10.150.200.22
    path: "/export/vol1"
EOF

PVC:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 10Gi
EOF

ここで、XNUMX つのクラスターの作成の物語が終わり、そのライフサイクルの物語が始まります。 おまけに、リソースを節約したり節約できなかったりする便利な CSE コマンドがさらに XNUMX つあります。

#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8

#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes

ご質問がございましたら、コメント欄にてお問い合わせください。

出所: habr.com

コメントを追加します