はじめに
これまでオンプレ(PC上のVM)でKubernetesの検証をしていました。
kubernetesを触ってみたい!と思った時に、試せる環境としては他に以下のようなものがあります。
今回はクラウドサービスのうち、IBM Cloudを利用してみたいと思います。
IBM Cloudには無料枠があって、無料でもKubernetesのクラスタを作成することができます。
無料でできることは以下に記載されています。
マネージドと非マネージド
「クラウドでKubernetes」と言っても、マネージドと非マネージドの大きく2つあります。
マネージドはMaster Nodeまでをクラウドベンダーが面倒を見てて、非マネージドはHypervisorまでをクラウドベンダーが面倒を見ています。(IaaSの場合)
非マネージドは、クラウドでVMを払い出してから自分でKubernetesをインストール、セットアップしていきますので、Kubernetesのセットアップに関してはオンプレミスとあまり変わりません。
今回はIBM CloudでマネージドなKubernetesを利用したいと思います。
クラスタの作成
ドキュメントには色々と書かれているのですが、こちらに沿って進めていきます。
CLIのセットアップ
IBM CloudのCLIとプラグインをローカルPCにインストールします。
使用するPCは以下のOSになります。
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.4
BuildVersion: 19E287
インストール
MACのターミナルから実行します。
% curl -sL https://ibm.biz/idt-installer | bash
[main] --==[ IBM Cloud Developer Tools for Linux/MacOS - Installer, v1.2.3 ]==--
[install] Starting Installation...
・・・
プラグイン名 バージョン 状況
cloud-functions/wsk/functions/fn 1.0.39
cloud-object-storage 1.1.3
container-registry 0.1.471
container-service/kubernetes-service 1.0.57
dev 2.4.0 更新が使用可能です
・・・
[install_plugins] Finished installing/updating plugins
[env_setup] WARN: Please restart your shell to enable 'ic' alias for ibmcloud!
[install] Install finished.
[main] --==[ Total time: 674 seconds ]==--
私のPCだと10分ほどかかりました。
インストールの確認
% ibmcloud dev help
プラグイン 'dev 2.4.7' が現在使用可能です (2.4.0 をご利用中です)。
'ibmcloud plugin update dev' を使用してプラグインをアップグレードしてください。
'ibmcloud config --check-version=false' を使用して更新チェックを無効にしてください。
名前
ibmcloud dev - アプリケーションの作成、開発、デプロイ、およびモニターを行います
使用法:
ibmcloud dev command [arguments...] [command options]
バージョン:
2.4.0
・・・
インストールは成功していますが、新しいバージョンがあると出てきましたので、メッセージ通りにアップデートします。
% ibmcloud plugin update dev
プラグイン 'dev 2.4.0' がインストールされました。
リポジトリー 'IBM Cloud' からプラグイン 'dev' のアップグレードを確認しています...
'dev 2.4.0' から 'dev 2.4.7' へ更新
バイナリー・ファイルをダウンロードしようとしています...
27.35 MiB / 27.35 MiB [====================================================================================] 100.00% 3m26s
28680688 バイトがダウンロードされました
バイナリーを更新しています...
OK
プラグインは正常にアップグレードされました。
ログイン
IBM Cloudにログインしてみます。
% ibmcloud login -sso
API エンドポイント: https://cloud.ibm.com
https://identity-1.ap-north.iam.cloud.ibm.com/identity/passcode からワンタイム・コードを取得して、続行します。
デフォルトのブラウザーで URL を開きますか? [Y/n] > y
-ssoを指定すると、ワンタイムパスワードでログインできます。
メッセージの後に「y」を入力すると、以下のようにブラウザにパスワードが表示されます。
このパスワードを入力すると、ログインできます。
One Time Code >
認証中です...
OK
クラスタの作成
コマンドラインでも作成できるようなのですが、クラウドですのでブラウザから作成していきます。
IBM Cloudにログイン後、以下の順に辿ります。
ダッシュボード > カタログ > Kubernetes Service
アカウントを作成していない場合は、「アカウントの作成」から作成します。
辿ると以下の画面になります。
デフォルトでは有料プランになっているので、「無料」に変更します。
無料に変更すると、以下の様になり変更/選択できるところがほとんどなくなります。
ここでは全てデフォルト設定で「作成」をクリックします。
この画面でしばらく待ちます。
作成できると「通常」と表示されます。
環境の確認
構築できたら、まずはダッシュボードを見てみます。
右上の「Kubernetesダッシュボード」をクリックします。
次にCLIでもログインしてみます。
右上の「Actions...」->「CLIを介した接続」の通りにログインします。
% ibmcloud login -sso -a cloud.ibm.com -r us-south -g Default
API エンドポイント: https://cloud.ibm.com
https://identity-2.ap-north.iam.cloud.ibm.com/identity/passcode からワンタイム・コードを取得して、続行します。
デフォルトのブラウザーで URL を開きますか? [Y/n] > y
One Time Code >
認証中です...
OK
% ibmcloud ks cluster config --cluster br2vvt2d0xxxxxxxxxxxxx
Kubernetes version 1.16 has removed deprecated APIs. For more information, see <http://ibm.biz/k8s-1-16-apis>
If you have IBM Cloud Kubernetes Service clusters that run versions 1.13 or 1.14, update them now to continue receiving important security updates and support. Version 1.14 is deprecated and will be unsupported 31 May 2020. Versions 1.13 and earlier are already unsupported. For more information and update actions, see <https://ibm.biz/iks-versions>
OK
br2vvt2d0xxxxxxxxxxxxx の構成は正常にダウンロードされました。
br2vvt2d0xxxxxxxxxxxxx のコンテキストを現在の kubeconfig ファイルに追加しました。
これで、クラスターに対して「kubectl」コマンドを実行できます。 例えば、「kubectl get nodes」を実行します。
ログインできたら、クラスタの構成を確認します。
% kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
10.47.64.113 Ready <none> 56m v1.16.9+IKS 10.47.64.113 173.xxx.xx.xx Ubuntu 16.04.6 LTS 4.4.0-178-generic containerd://1.3.4
% kubectl config current-context
mycluster-free/br2vvt2d0usec1kcn730
% kubectl version --short
Client Version: v1.16.2
Server Version: v1.16.9+IKS
Worker Nodeが一台だけ構成されていますね。Master Nodeは表示されていないです。
無料枠だと、1台のみのクラスタになります。
Service/Podのデプロイ
せっかくなので、Podをデプロイしてアクセスできることを確認したいと思います。
NodePortの作成
以下のマニフェストのNodePortを作成します。
apiVersion: v1
kind: Service
metadata:
name: node-port
spec:
type: NodePort
ports:
- name: node-port
protocol: TCP
port: 8080
targetPort: 80
nodePort: 30001
selector:
app: nginx-dep
% kubectl apply -f nodeport.yaml
service/node-port created
% kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 172.21.0.1 <none> 443/TCP 78m
node-port NodePort 172.21.151.109 <none> 8080:30001/TCP 11s
Podの作成
以下のマニフェストのPodを作成します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx-dep
template:
metadata:
labels:
app: nginx-dep
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
% kubectl apply -f nginx.yaml
deployment.apps/nginx created
% kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-6c4975c9f5-8c6cp 1/1 Running 0 11s
nginx-6c4975c9f5-fxxh4 1/1 Running 0 11s
Podのデプロイもできましたので、疎通を確認します。
接続するIPアドレスは、WorkerNodeの「EXTERNAL-IP」です。
ローカルPCから接続を確認します。
% curl -s http://173.xxx.xx.xx:30001
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
接続できました!
まとめ
今回はIBM Cloudの無料枠で作成できるKubernetesクラスタを作成しました。
環境が限られていますのでKubernetsのすべての機能は使えませんが、「とりあえず触ってみたい」という方にはよいのではないでしょうか。
Katacodaはブラウザで簡単に試せますが、決まった操作しかできません。minikubeは自分のPCにインストールする必要があります。
クラウドサービスを活用すると自分のPCにインストールすることなく(クライアントツールをインストールする必要はありますが)Kubernetesをある程度自由に触れます。
今回はIBM Cloudを例にしましたが、他のクラウドサービスにも無料枠がありますので色々試してみるにはいいですね。
なお、今回作成したクラスタは、30日経ったら自動で削除されてしまうようです。
追伸
無料アカウント(ライトアカウント)で作成できると思っていたのですが、ライトアカウントでは作成できませんでした。
自分はトライアルのアカウントのようです。
ご指摘いただいた方、ありがとうございました。