IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

IDCFクラウドコンテナサービスのAPIを使ってみた。

はじめまして、オペレーション本部サービス運用部の荒木です。 普段は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

事前準備(トークンの取得)

  1. コンテナコンソールのアカウントメニューからAPI & キーをクリック。
    f:id:karaki_idcf:20220322170251p:plain

  2. キーを追加をクリック。
    f:id:karaki_idcf:20220322170246p:plain

  3. 詳細情報・失効日・スコープを任意で設定し、作成をクリック。
    f:id:karaki_idcf:20220322170249p:plain

  4. 発行されたBearerトークンを控えておく。
    f:id:karaki_idcf:20220322165529p:plain

クラスターを作成する

クラスターを追加する

トークンが取得できたので、さっそくクラスターを作成していきます。利用する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です。
f:id:karaki_idcf:20220323145334p:plain

クラスターにノードを追加する

続けてノードプール(ノード)を追加していきます。 利用する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。
f:id:karaki_idcf:20220323145337p:plain

クラスターを削除する

利用する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月時点の情報です。

【国内初】高負荷サーバー向けリアドア空調システムの本格導入について

はじめまして。データセンターサービス本部 技術開発部の山口です。

私はデータセンターの企画設計開発~構築監理を担当しています。 IDCフロンティアでは、データセンターにおける顧客ニーズや要望にこたえるため、さまざまな開発と新技術のチャレンジを行い、顧客満足を念頭にサービス構築を進めております。

色々な顧客要望がある中で、”悩み”の共通部分は、機器台数増大と同時に個々機器の情報処理量が急速な増加の一途をたどる中、設置スペースの効率化と高負荷の熱処理をどうするのか?・・ということです。現在、重要な課題定義の1つとして上げられています。

特にブロードバンド(高速大容量通信サービス)の普及等を背景に、コンテンツ配信や電子商取引の分野で取り扱う情報量から更に人工知能(AI)、医薬組成システム情報技術分野・・などでも、電力消費量が大きく増大する事は、並行に”高熱の空気”(高負荷/排熱風量)も同時に発生致します。

そこで、IDCフロンティアでは高負荷(高集積化)サーバー顧客のニーズを背景に、高集積/高温空気向けの最適な冷却を行うための色々な冷却装置方式(リアドア/In-Rowなど)について比較検証開発を行った結果、本格的な事業展開としては国内初であるリアドア冷却装置を用いた“高負荷サーバー向けリアドア空調システム”(リアドア+モール構成)を構築して顧客ニーズに沿った最適環境制御サービスの提供をする事となりました。

今回は、【国内初】高負荷サーバー向けリアドア空調システムの本格導入についてと題しまして、 リアドア空調システムの構成概要についてご紹介したいと思います。

続きを読む

「IDCFクラウド コンテナ」サービスで作るプライベートレジストリ

はじめまして、事業推進本部SE部の横田です。 普段はセールスエンジニアとしてIDCフロンティア サービスのご提案や導入支援などを行っています。

今回は「IDCFクラウド コンテナ」環境内に、カタログ(Helm Chart)を利用したプライベートレジストリ構築についてご紹介したいと思います。

続きを読む

Kubernetes 環境におけるコンテナログの扱い

今回のテーマは Kubernetes 環境におけるコンテナ(アプリケーション)のログについてです。Docker と Kubernetes でのロギングについておさらいした上で、IDCFクラウド コンテナでログ収集の仕組みを実際に構築してみます。

続きを読む

IDCFクラウドコンテナサービス モニタリング機能と永続ストレージについて

こんにちは。 IDCフロンティア 事業推進本部SE部の掛田(@skakeda)です。 普段はセールスエンジニアとして、IDCFクラウドなど当社サービスのご提案や導入支援を行っております。本記事では前回に引き続き、IDCFクラウドコンテナサービスについて、ご紹介します。

www.idcf.jp

続きを読む

IDCFクラウドコンテナサービス パーシステントボリュームの使い方・作り方

はじめまして、事業推進本部SE部の市川です。
普段はセールスエンジニアとして、IDCFクラウドなどサービスのご提案や導入支援を行っています。

今回はIDCFクラウドコンテナサービスでのパーシステントボリュームの利用方法、
さらにはNFSをパーシステントボリュームとして利用する方法をご紹介します。

www.idcf.jp

続きを読む

SSLサーバー証明書 HTTPファイル認証方法変更について!とレンタルサーバー中の人の対応

はじめまして。 オペレーション本部サービス基盤部の西岡です。

私はホスティングサービスZenlogicの仮想マシンやドメイン、証明書といったリソースの調達や管理を行うシステムの開発を担当しています。
特に証明書については業界全体の流れによる仕様変更やトラブルも多く、社内ではなんか証明書で苦労してるやつとして認知されています。

今回は先日あった証明書取得時のドメイン使用権確認のHTTPファイル認証の審査方法変更について、前提知識とZenlogicとしての対応も含めつつおさらいしたいと思います。

続きを読む
Copyright © IDC Frontier Inc.