Posted at

IBM Cloud Private k8sクラスターをCLIで操作してみる

More than 1 year has passed since last update.

前の投稿 IBM Cloud Private: Kubernetesをオンプレミス(IaaS)に導入してみる では,Kubernetes環境を構築した後,コンソール画面から少し操作をして終了としました。

今回はCLIを使ったクラスターへのアクセスについて書いてみたいと思います。

※既にIBM Cloud Private環境を構成済という前提で進めます。


コマンドラインからKubernetesクラスターを操作する

手元のPCから,IBM Cloud Private (Kubernetesクラスター)に接続し,操作・制御してみます。

そのために 2つのCLIと,1つのプラグインを導入します。


  • 1) kubectlコマンド: Kubernetes CLI [CLI]

  • 2) bxコマンド: IBM Cloud CLI [CLI]

  • 3) bx prプラグイン: IBM Cloud Private プラグイン [Plugin]


1) kubectlコマンド


1-1) kubectl: インストール

バイナリ取得,実行権限付与,OSのbinに移動。やることはそれだけです。

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.7.3/bin/darwin/amd64/kubectl

$ chmod +x ./kubectl
$ sudo mv ./kubectl /usr/local/bin/kubectl

参考: Install and Set Up kubectl

この他にも,IBM Cloud Privateのインストールイメージ内にあるkubectlコマンドをインストールすることもできます。

オフライン環境であったり,誰がやっても製品に対応したバージョンを導入できるという意味では便利かもしれません。

参考: Accessing your IBM Cloud Private cluster by using the kubectl CLI


1-2) IBM Cloud Privateへの接続,コマンド実行


  • IBM Cloud Privateコンソールにログイン


    • https://10.132.75.83:8443/console



  • [右上のユーザーアイコン]>[Configure client]のように辿ります (下図参照)


    • image.png



  • ポップアップ内の "kubectl config〜〜〜" 数行をコピーします (下図参照)


    • image.png



  • お手元のPCのターミナルにペーストして実行します

$ kubectl config set-cluster mycluster.icp --server=https://10.132.75.83:8001 --insecure-skip-tls-verify=true

Cluster "mycluster.icp" set.

$ kubectl config set-context mycluster.icp-context --cluster=mycluster.icp
Context "mycluster.icp-context" modified.

$ kubectl config set-credentials mycluster.icp-user --token=eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsImF0X2hhc2giOiJSZDJWSDh5Mjl3alBLNVJydjEtZjVRIiwiaXNzIjoiaHR0cHM6Ly9teWNsdXN0ZXIuaWNwOjk0NDMvb2lkYy9lbmRwb2ludC9PUCIsImF1ZCI6ImNiNmI2ZDg4YTA2MjIyYTRkZTQ0MjhmMWFmMmZlMmQyIiwiZXhwIjoxNTEyOTUxOTM4LCJpYXQiOjE1MTI5MDg3Mzh9.BYhO4iURwi0dhEqPn1DdWzNNzQZRb7-tnCXXKzdbyDOK_ChFxCC-3JdxE01JWNM3Xaku0Ji-SoII9UCbeQx_SCGabRHcvUJF2RAEbWAehykXFyB9SpyBA_W9CPUxr_s8NY3XlDD75-3EMXxad73FsgP64IgSMZD72Vm1jeS4UOge4oMkOIaAvjqud-kOYrKXib8J8oCEtI7yBNOLf8dA_puoYhl2HGD9BBrpFEpCsCkZj0m8WFeg0LAD-Km7uhI6pjsNLiWpOD4E2re82D7y7ZqGZAcGSNWh2WA07lJLlYLSbOOpwF38Z-CVCjbdqAr_Lsu0izfWYsbDPI_83W5lGA
User "mycluster.icp-user" set.

$ kubectl config set-context mycluster.icp-context --user=mycluster.icp-user --namespace=default
Context "mycluster.icp-context" modified.

$ kubectl config use-context mycluster.icp-context
Switched to context "mycluster.icp-context".

これで手元のPC上のkubectlコマンドで,IBM Cloud Private上のkube-api-serverに対するAPI操作ができるようになりました。

いくつか実行してみましょう。


  • ノード情報を取得

$ kubectl get nodes

NAME STATUS AGE VERSION
10.132.75.83 Ready 1d v1.7.3-7+154699da4767fd


  • pod一覧を取得


    • カタログからnodejsを選択してデプロイしていたので,1つ表示されています



$ kubectl get pods

NAME READY STATUS RESTARTS AGE
appnodejs-ibm-nodejs-sam-2158423597-m9gmk 1/1 Running 0 1d


  • namespaceがkube-systemとして設定されているpodの一覧を取得


    • ざっくり言うとIBM Cloud Privateの管理機能のプロセス

    • クラスターコンポーネント,ネットワークや認証,コンテナの利用量計測,モニタリングなど



$ kubectl get pods -n kube-system

NAME READY STATUS RESTARTS AGE
auth-apikeys-vdlfx 1/1 Running 0 1d
auth-idp-m2tf3 3/3 Running 1 1d
auth-pap-p1qj7 1/1 Running 0 1d
auth-pdp-5tsm1 1/1 Running 0 1d
calico-node-amd64-5lzc2 2/2 Running 0 1d
calico-policy-controller-1048521425-s07tl 1/1 Running 0 1d
catalog-catalog-apiserver-18wtr 1/1 Running 0 1d
catalog-catalog-controller-manager-3100032879-56t5f 1/1 Running 0 1d
catalog-ui-rzn8b 1/1 Running 0 1d
default-http-backend-198681862-t48zl 1/1 Running 0 1d
elasticsearch-client-3479638665-n8pfj 2/2 Running 0 1d
elasticsearch-data-0 1/1 Running 0 1d
elasticsearch-master-1570256108-g7b31 1/1 Running 0 1d
filebeat-ds-amd64-4tnlw 1/1 Running 0 1d
heapster-1250025240-h1x2h 2/2 Running 6 1d
helm-api-2886503079-7g3wf 1/1 Running 0 1d
helmrepo-577444838-xk6mm 1/1 Running 0 1d
icp-ds-0 1/1 Running 0 1d
icp-router-0lbfp 1/1 Running 0 1d
image-manager-0 2/2 Running 0 1d
k8s-etcd-10.132.75.83 1/1 Running 0 1d
k8s-mariadb-10.132.75.83 1/1 Running 0 1d
k8s-master-10.132.75.83 3/3 Running 0 1d
k8s-proxy-10.132.75.83 1/1 Running 0 1d
kube-dns-1038623989-jsrs6 3/3 Running 0 1d
logstash-4245234969-q4l16 1/1 Running 0 1d
metering-dm-653503904-b1hw0 1/1 Running 0 1d
metering-reader-amd64-4tvx6 1/1 Running 0 1d
metering-server-1157299371-zr5n1 1/1 Running 0 1d
metering-ui-3198198023-pkb81 1/1 Running 0 1d
monitoring-exporter-3293343457-q5t8v 1/1 Running 0 1d
monitoring-grafana-2476181526-kz8v7 2/2 Running 0 1d
monitoring-prometheus-2422752664-fcx6t 2/2 Running 0 1d
monitoring-prometheus-alertmanager-3766402458-ts6ws 2/2 Running 0 1d
monitoring-prometheus-kubestatemetrics-3025976457-kwff6 1/1 Running 0 1d
monitoring-prometheus-nodeexporter-amd64-dg9rq 1/1 Running 0 1d
nginx-ingress-lb-amd64-zhrv0 1/1 Running 0 1d
platform-api-14t17 1/1 Running 0 1d
platform-ui-3mbrx 1/1 Running 0 1d
rescheduler-9flqh 1/1 Running 0 1d
tiller-deploy-2307655136-zjv3n 1/1 Running 0 1d
unified-router-lkgjr 1/1 Running 0 1d


2) bxコマンド (IBM Cloud CLI)


2-1) IBM Cloud CLI のインストール

IBM Cloud CLI Installer のページから,お使いのOSにあったものを選択しダウンロードします。(下図参照)

image.png

macOSの場合だと,"Bluemix_CLI_0.6.2.pkg" のようなファイルがダウンロードできますので,オープンしてウィザードに従ってインストールしましょう。

$ bx --help  // ヘルプで使いかたも確認しておきましょう

bxコマンドは,IBM Cloud (旧Bluemix)を操作できます。

IBM Cloud Privateでは,次のステップで導入するプラグインを追加して使用します。


3) bx prプラグイン (IBM Cloud Privateプラグイン)


3-1) IBM Cloud Private プラグインのインストール

IBM Cloud PrivateのKubernetesクラスターのノード操作や,helm charをロードする際などに使用します。

詳細は以下のCLIリファレンスを参照ください。

参考: IBM Cloud Private CLI command reference

以下の手順で,prプラグインをコンソール画面から取得し,お使いのPCに導入します。


  • IBM Cloud Privateコンソールにログイン


    • https://10.132.75.83:8443/console



  • [メニュー]>[Tools]>[Command line]を選択


    • image.png



  • お使いのOSにあったものをクリックしてダウンロード


    • image.png



  • bxコマンドで,上記でダウンロードしたファイル(icp-darwin-amd64)を指定してインストール


    • $ bx plugin install icp-darwin-amd64

    • 参考: $ bx pr --help で使いかたを確認できます




3-2) bx prプラグインでクラスターを操作してみる

せっかくなので,いくつかコマンドを叩いてみましょう。

クラスターにログインします。

今回はシングルノードなので,masterノードのIPは 10.132.75.83 ですので以下のように指定します。

$ bx pr login -a https://10.132.75.83:8443 --skip-ssl-validation

Login method invokedAPI endpoint: https://10.132.75.83:8443

Username> admin

Password>
Authenticating...
OK

Select an account:
1. ICP Account (8733008909db59ca880939cfa1a17509)
Enter a number> 1
Targeted account: ICP Account (8733008909db59ca880939cfa1a17509)

APIエンドポイントや,APIバージョンを確認してみます。

$ bx pr api

API Endpoint: https://10.132.75.83:8443/api
API Version: v1
Skip SSL Validation: true

masterの一覧を出力してみましょう。

$ bx pr masters mycluster

OK
ID Public IP Private IP State
mycluster-00000000-m1 10.132.75.83 10.132.75.83 deployed


まとめ

(...というか余談がほとんど)

今回はCLIでのクラスターアクセスについて記述しました。

といっても高度なことは何もしていなくて,kubectlとIBM Cloud PrivateのCLIを導入,少し試しただけです。

CLIの使い分けという意味では,

アプリ(Pod/Deployment/Service)を直接デプロイしたい時は,きっとkubectlコマンドを使いますよね。

パッケージとしてhelm chartをロードする時や,IBM Cloud Privateそのもののクラスター操作については,bx prコマンド(プラグイン)を使用する方向性かと思われます。今は正直言ってかなり非力なCLIですが,kubeadmでやれることや,もっと便利に使えるように拡張されることを期待します。

ちなみにbxコマンドというのがそもそもIBM Cloud(旧Bluemix)を操作するコマンドだったりします、

つまり,bxコマンドでパブリッククラウド(IBM Cloud Container Service)と,プライベートクラウド(IBM Cloud Private)両方を制御できちゃう,そんな方向性でしょうか。

(BOSHでCloud Foundry Application RuntimeもCloud Foundry Container Runtimeも両方制御するよーというのと同じイメージですかね。)

ほぼコマンドインストール編のような感じでしたが,今回はこの辺りで。