はじめまして、オペレーション本部サービス運用部の荒木です。
普段はIDCFクラウド上で提供している各種プロダクトの監視・運用設計・運用改善をメインに行っております。
今回は、昨年5月にリリースしたIDCFクラウド コンテナの監視設計や実装を行ってきた中でRancherAPIを利用する機会がありましたので、そこからいくつか紹介したいと思います。
IDCFクラウドコンテナAPI = RancherAPI
IDCFクラウドコンテナサービスはサービス提供基盤に独SUSEのSUSE Rancherを採用しており、Rancherが提供しているAPIを基本そのまま利用することが可能です。
また、API以外にもRancher提供のCLIツール Rancher CLIを利用することも可能となっています。
なお、API・CLIともにIDCFでは正式なサポートは行っておらず*1、ベストエフォートサポートでの対応となります。 利用時は予めご留意ください。m(_ _)m
作業環境
- CentOS 7
- bash
- jq
- bash
事前準備(トークンの取得)
コンテナコンソールのアカウントメニューからAPI & キーをクリック。
キーを追加をクリック。
詳細情報・失効日・スコープを任意で設定し、作成をクリック。
発行されたBearerトークンを控えておく。
クラスターを作成する
クラスターを追加する
トークンが取得できたので、さっそくクラスターを作成していきます。利用するAPI Resourcesは/v3/cluster
です。
クラスター構成情報
- クラスター名:sample-cluster
- クラスタータイプ:IDCFクラウド
- ゾーン:ampere
- VMタイプ:HighCPU.M4
- ノード構成:
- MasterNode (etcd, controlPlane)× 3
- WorkerNode (worker) × 3
今回は、コンテナコンソールからクラスターを作成する際のデフォルト設定と同じ設定でリクエストボディを準備しました。
※clusterTemplateRevisionId": "cattle-global-data:ctr-dtg7x
は2022/4時点の最新リビジョン情報となり、今後バージョンアップ等で変更となる可能性があります。
{ "answers":{ "values": { "rancherKubernetesEngineConfig.ingress.provider": "none", "rancherKubernetesEngineConfig.kubernetesVersion": "v1.19.15-rancher1-1", "rancherKubernetesEngineConfig.monitoring.provider": "metrics-server", "rancherKubernetesEngineConfig.services.etcd.backupConfig.intervalHours": 12, "rancherKubernetesEngineConfig.services.etcd.backupConfig.retention": 6, "rancherKubernetesEngineConfig.services.kubeApi.secretsEncryptionConfig.enabled": "false", "rancherKubernetesEngineConfig.services.kubeApi.serviceNodePortRange": "32000-32767", "rancherKubernetesEngineConfig.upgradeStrategy.drain": "false", "rancherKubernetesEngineConfig.upgradeStrategy.nodeDrainInput.deleteLocalData": "false", "rancherKubernetesEngineConfig.upgradeStrategy.nodeDrainInput.force": "false" } }, "clusterTemplateId": "cattle-global-data:ct-djcqr", "clusterTemplateRevisionId": "cattle-global-data:ctr-dtg7x", "name": "sample-cluster" }
これをcurlで投げれるよう、スクリプト(add_cluster.sh)にして、
※api_token
には、先に控えておいたBearerトークンを入力してください。
#!/bin/bash api_url='https://container.idcfcloud.com' api_token='token-wxxt:nf4jzxxxxxxxxxxxxxxxxxxxxxxxxxxxxwcnk27' create_cluster_data() { cat <<EOF { "answers":{ "values": { "rancherKubernetesEngineConfig.kubernetesVersion": "v1.19.15-rancher1-1", "rancherKubernetesEngineConfig.services.etcd.backupConfig.intervalHours": 12, "rancherKubernetesEngineConfig.services.etcd.backupConfig.retention": 6, "rancherKubernetesEngineConfig.services.kubeApi.secretsEncryptionConfig.enabled": "false", "rancherKubernetesEngineConfig.services.kubeApi.serviceNodePortRange": "30000-32767", "rancherKubernetesEngineConfig.upgradeStrategy.drain": "false", "rancherKubernetesEngineConfig.upgradeStrategy.nodeDrainInput.deleteLocalData": "false", "rancherKubernetesEngineConfig.upgradeStrategy.nodeDrainInput.force": "false" } }, "clusterTemplateId": "cattle-global-data:ct-djcqr", "clusterTemplateRevisionId": "cattle-global-data:ctr-dtg7x", "name": "sample-cluster" } EOF } curl -s -k -X POST \ -H "Authorization: Bearer ${api_token}" \ -H "Content-Type: application/json" \ -d "$(create_cluster_data)" $api_url/v3/cluster?_replace=true
レスポンスボディにノード追加時に必要となるclusterIDが含まれるのでjqコマンドで抜き出す形で、スクリプトを実行します。
$ ./add_cluster.sh | jq .id "c-rj62l"
コンテナコンソールを見て、ノードが0のクラスターができていればOKです。
クラスターにノードを追加する
続けてノードプール(ノード)を追加していきます。
利用するAPI Resourcesは/v3/nodepool
です。
先程同様、まずはリクエストボディを準備します。
※clusterId
には先程出力されたidを入力してください。
MasterNode用
{ "type": "nodePool", "clusterId": "c-rj62l", "hostnamePrefix": "master", "nodeTemplateId": "idcfcloud_jp-east-3_ampere_highcpu.M4_v1", "controlPlane": true, "etcd": true, "worker": false, "quantity": 3, "drainBeforeDelete": false, "deleteNotReadyAfterSecs": 0 }
WorkerNode用
{ "type": "nodePool", "clusterId": "c-rj62l", "hostnamePrefix": "worker", "nodeTemplateId": "idcfcloud_jp-east-3_ampere_highcpu.M4_v1", "controlPlane": false, "etcd": false, "worker": true, "quantity": 3, "drainBeforeDelete": false, "deleteNotReadyAfterSecs": 0 }
同じく、curlで投げれるようにして、
MasterNode用(add_nodepool_master.sh)
#!/bin/bash api_url='https://container.idcfcloud.com' api_token='token-wxxt:nf4jzxxxxxxxxxxxxxxxxxxxxxxxxxxxxwcnk27' add_node_data() { cat <<EOF { "type": "nodePool", "clusterId": "c-rj62l", "hostnamePrefix": "master", "nodeTemplateId": "idcfcloud_jp-east-3_ampere_highcpu.M4_v1", "controlPlane": true, "etcd": true, "worker": false, "quantity": 3, "drainBeforeDelete": false, "deleteNotReadyAfterSecs": 0 } EOF } curl -s -k -X POST \ -H "Authorization: Bearer ${api_token}" \ -H "Content-Type: application/json" \ -d "$(add_node_data)" $api_url/v3/nodepool
WorkerNode用(add_nodepool_worker.sh)
#!/bin/bash api_url='https://container.idcfcloud.com' api_token='token-wxxt:nf4jzxxxxxxxxxxxxxxxxxxxxxxxxxxxxwcnk27' add_node_data() { cat <<EOF { "type": "nodePool", "clusterId": "c-rj62l", "hostnamePrefix": "worker", "nodeTemplateId": "idcfcloud_jp-east-3_ampere_highcpu.M4_v1", "controlPlane": false, "etcd": false, "worker": true, "quantity": 3, "drainBeforeDelete": false, "deleteNotReadyAfterSecs": 0 } EOF } curl -s -k -X POST \ -H "Authorization: Bearer ${api_token}" \ -H "Content-Type: application/json" \ -d "$(add_node_data)" $api_url/v3/nodepool
それぞれ実行。
$ ./add_nodepool_master.sh $ ./add_nodepool_worker.sh
ノード数が6となりProvisioningが進み出せばOK。
クラスターを削除する
利用するAPI Resourcesは/v3/clusters
です。
削除はシンプルにclusterIdを指定したcurlコマンドの実行だけでOKです。
$ curl -s -k -X DELETE \ -H "Authorization: Bearer token-wxxt:nf4jzxxxxxxxxxxxxxxxxxxxxxxxxxxxxwcnk27" \ -H "Content-Type: application/json" \ https://container.idcfcloud.com/v3/clusters/c-rj62l
最後に
今回紹介した以外にも、RancherAPIには非常に多くのResourcesが用意されてますが、
反面 公式ドキュメントでの取り扱い情報が少なく、利用には若干のハードルを感じました。
IDCFとしても現状公式サポート対象外ではありますが、API活用方法などは引き続き当blogでご紹介いたしますのでご期待ください!
*1:2022年4月時点の情報です。