在IBM Cloud上尝试使用免费Kubernetes构建WordPress的入门教程

你好,我是torippy1024。
这是我第一次在Qiita上写文章。
今天,我想针对那些想要尝试但觉得容器太复杂并且不太理解的人,介绍一个可以免费试用的容器编排服务——IBM Cloud上的Kubernetes,并提供初学者试用步骤。
在这个步骤中,我们会在IBM Cloud上部署Kubernetes服务,并在此之上运行wordpress。
这篇文章的目标读者是那些听说过Kubernetes的概要,却没有实际操作过实体机器的经验,对于Pod和Service等术语是什么以及它们的工作原理一无所知的人。

关于IBM云上的Kubernetes

这里不会对Kubernetes进行解释。
在IBM Cloud上,虽然有一个限定期为30天(超过30天将转为收费项目不再提供),但您可以免费使用Kubernetes。
今天,我们将使用这个免费的Kubernetes来启动一个为期30天的wordpress,以真实体验容器是什么以及它如何运作。

本次所建構的環境

20200802_k8sonIBMCloud.jpg

Kubernetesを構成する土台となるサーバーにはMaster NodeとWorker Nodeがあります。
ユーザーはAPI/CLIを通してMaster Nodeに指示を行い、Master NodeがWorker Nodeを管理します。Worker Nodeは、通常冗長化のため複数台用意しますが、無償Kubernetesでは2vCPU 4GBメモリーのサーバー1台のみです。
この上にKubernetesというコンテナオーケストレーションツールが動作しており、その上でPod(コンテナ機能を実装したもの)が作成され、Pod内のアプリケーションが動作しているという構成です。
Pod同士が通信を行う際は、Serviceによって通信ポリシーの制限を行います。
またServiceは、Pod上で動作しているアプリケーションApp(wordpress)を外部に公開するときにも使用します。

IBM CloudのKubernetes Serviceは、このMaster NodeやWorker Nodeの構築や設定を一通り終えた状態でユーザーに提供してくれるサービスです。ユーザーは、Kubernetesの構築作業に時間をかけることなく、すぐにKubernetes上でアプリケーションを動作させることに集中することができます。

前提

以下是必要的东西:
– IBM Cloud 账户
– 信用卡(仅需注册以创建免费的 Kubernetes 集群)
– 能使用 git、Docker 和 IBM Cloud CLI 的工作终端

IBM Cloudのサイトを見ると、IBM Cloud CLIが使用できるOSは、Windows 10 ProまたはMacまたはLinuxと書かれています。
Windows 10 Homeは動作対象とされていませんが、私の環境では問題なく動作しました。

安装IBM Cloud CLI时,以下软件也会作为前提软件一同安装:
– git
– Docker Desktop

~稍微闲聊一下~

考虑到IBM Cloud CLI要求使用的Docker Desktop在Windows 10 Home上不受支持,因此Windows 10 Home没有通过验证。但是目前(截至2020年8月),预计Docker Desktop也将在Windows 10 Home上正常运行。这是因为Docker Desktop for Windows使用的后端WSL2已经被修改以支持Windows 10 Home,尽管在过去尚未受到支持。

创建IBM账号

pic_01.JPG

アカウントの作成が終わったら、クレジットカード情報を登録します。
ログイン後のダッシュボード画面から「管理」-「アカウント」-「アカウント設定」を選択して「クレジット・カードの追加」を選択してください。
クレジットカード情報を登録し、アカウント・タイプが「従量課金」になると、無償のKubernetesが使用可能となります。

pic02.JPG

クレジットカード情報登録はためらわれるところがあるのですが、30日間の無償期間が終了した後は自動削除されるため、通常請求が行われることはありません。
また「従量課金プラン」になると、登録から30日間限定で$200分の無償クレジットが付与されるので、これも覚えておきましょう。

安装IBM Cloud CLI

接下来,按照IBM Cloud网站上的指令执行,并安装IBM Cloud CLI。
在Windows系统和Mac或Linux系统上,指令是不同的。
如果尚未安装git和Docker,它们将在安装IBM Cloud CLI的过程中自动安装。

对于Mac或Linux的情况下的命令:

$ curl -sL https://ibm.biz/idt-installer | bash

如果您使用的是Windows系统,请以管理员权限打开Powershell并执行以下命令:

$ [Net.ServicePointManager]::SecurityProtocol = "Tls12, Tls11, Tls, Ssl3"; iex(New-Object Net.WebClient).DownloadString('https://ibm.biz/idt-win-installer')

如果使用Windows 10 Home,在安装Docker Desktop时没有安装WSL2可能会显示错误。在这种情况下,可以通过以下链接安装WSL2,并重新启动操作系统以继续安装Docker Desktop:
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-kernel

如果同时安装IBM Cloud CLI和Docker,安装Docker过程中会导致操作系统重新启动。在这种情况下,IBM Cloud CLI的安装会被中断,请在操作系统重新启动后再次运行IBM Cloud CLI命令。

安装完IBM Cloud CLI后,系统会要求重新启动,因此我会重新启动。

如果在重新启动后执行以下命令并显示帮助信息,则表示安装已完成。

$ ibmcloud dev help

创建一个免费的Kubernetes集群。

無事にアカウントを作成し、IBM Cloud CLIを端末にインストールすることができたら、無償Kubernetesクラスターを作成してみましょう。
IBM CloudのGUIで操作します。
https://cloud.ibm.com/login

在IBM Cloud上登录,在仪表盘界面选择“目录”-“服务”,然后在“类别”中选中“容器”进行勾选。
选择展示出来的Kubernetes服务。

pic03.JPG

如果选择”免费”计划,您将进入输入Kubernetes创建参数的页面,然后您可以默认创建,无需进行其他操作。

項目名値プランの選択無料オーケストレーション・サービスkubernetesクラスター名mycluster-freeリソースグループDefault
pic007.JPG

作成後、準備中画面に遷移するのでしばらく待機します。最短数分~最長数十分くらいで作成は完了すると思います。気長に待ちましょう。
遷移先の画面にIBM Cloud CLIツールに関する説明が表示されますが、すでにインストールしているため作業は不要です。

IBM云登录

ターミナル(又はコマンドプロンプト)を開き、以下のコマンドを実行してCLIでログインします。実行後、メールアドレスとパスワードの入力が求められるので、認証情報を入力します。

$ ibmcloud login -a cloud.ibm.com -r us-south -g Default

Email> yourmailladdress@sample.com

Password>
認証中です...
OK

-r选项指定的是Kubernetes运行的区域(地区)。基本上应该会在us-south创建,但如果在us-south区域不存在Kubernetes的话,请在IBM Cloud资源列表页面找出Kubernetes运行的位置,并确定该位置属于哪个区域。

运行以下命令以获取Kubernetes配置信息。

$ ibmcloud ks cluster config -c mycluster-free
:
(メッセージが表示されることがあるが記載を省略)
:
OK
mycluster-free の構成は正常にダウンロードされました。

mycluster-free のコンテキストを現在の kubeconfig ファイルに追加しました。
これで、クラスターに対して「kubectl」コマンドを実行できます。例えば、「kubectl get nodes」を実行します。
$

如果屏幕上显示如上,那就表示成功。
如果想了解更多关于Kubernetes配置信息的信息,请参考以下链接:
https://cloud.ibm.com/docs/containers?topic=containers-cli-plugin-kubernetes-service-cli#cs_cluster_config

获取Kubernetes信息

首先,执行以下命令,确认能够获取到Kubernetes集群的信息。

$ ibmcloud ks cluster get -c mycluster-free

确认显示Kubernetes运行的位置、状态、资源组等,除了群集名称和ID外。

接下来,执行以下命令以获取Worker节点的信息。

$ ibmcloud ks worker ls --cluster mycluster-free
ID                                        パブリック IP     プライベート IP   フレーバー  状態     状況    ゾーン  バージョン
kube-XXXXXX-myclusterfr-default-00000012  184.173.46.245  10.76.216.46     free      normal   Ready   hou02  1.17.9_1532

在标识符X中,会包含随机的小写字母和数字。
请将上方显示的”公共IP”记录下来,在从外部连接到Kubernetes内部的应用程序时,需指定该IP地址。

wordpressアプリケーションのデプロイ

それでは、Kubernetes上にwordpressをデプロイしてみましょう。
デプロイ対象となるのはアプリケーションが動いているコンテナである「Pod」と、Podの通信ポリシーを設定する「Service」です。
冗長化した複数のPodをまとめてデプロイするためのデプロイ単位を「Deployment」と言います。

仮想化の世界で例えると、PodがVM、ServiceがVLAN、DeploymentがVMクラスターのようなイメージで考えるとよいと思います。(厳密には異なりますが・・・・・・)

以下のコマンドを実行して、wordpressが入ったコンテナ(Pod)「wordpress」、MariaDBが入ったコンテナ(Pod)「mariadb」をデプロイし、それぞれのアプリケーションを接続するためのServiceをデプロイします。

$ kubectl run wordpress --image=wordpress:latest
deployment.apps/wordpress created

上記を実行すると、上記コマンドは後日削除されるため非推奨であるとエラーメッセージが出力されますが、ここでは無視してください。

$ kubectl run mariadb --image=mariadb:latest --env MYSQL_ROOT_PASSWORD=P@ssw0rd --env MYSQL_DATABASE=wordpress --env MYSQL_USER=wpuser --env MYSQL_PASSWORD=wppassword
deployment.apps/mariadb created

同じくエラーメッセージが出力されますが、無視してください。データベース名やMYSQLユーザ名、パスワード等は自分で変更しても構いません。

$ kubectl expose deployment wordpress --type=NodePort --port=80 --target-port=80 --name=wordpress --labels="app=wp"
service/wordpress exposed
$ kubectl expose deployment mariadb --type=ClusterIP --port=3306 --target-port=3306 --name=mariadb --labels="app=wp"
service/mariadb exposed

問題なくデプロイが完了したか、コマンドを実行して状態を確認します。

确认指令的部署

$ kubectl get deploy
NAME        READY  UP-TO-DATE  AVAILABLE  AGE
maridb      1/1    1           1          4m8s
wordpress   1/1    1           1          4m25s

确保「WordPress」和「MariaDB」的部署正在运行。

确认Pod命令

$ kubectl get pod
NAME                       READY  STATUS   RESTARTS  AGE
mariadb-XXXXXXXXX-XXXXX     1/1    Running  0         5m6s
wordpress-XXXXXXXXX-XXXXX   1/1    Running  0         5m16s

「wordpress-XXXXXXXXX-XXXXX」と「mariadb-XXXXXXXXX-XXXXX」のPodが動作していることを確認します。

确认服务的命令

$ kubectl get svc
NAME        TYPE          CLUSTER-IP      EXTERNAL-IP  PORTS(S)       AGE
kubernetes  Cluster-IP    172.21.0.1      <none>       443/TCP        61m
mariadb     Cluster-IP    172.21.224.113  <none>       3306/TCP       7m10s
wordpress   NodePort      172.21.196.71   <none>       80:32049/TCP   7m17s

「kubernetes」、「wordpress」、「mariadb」のServiceが動作していることを確認します。
ここで、「wordpress」、「mariadb」が先程コマンドを実行して作成したServiceです。「Kubernetes」はデフォルトで稼働しているServiceです。

「wordpress」の「PORT(S)」のみ、2つのポートが表示されていることが確認できます。
:で区切られた右のポートが外部公開されているポート、左のポートがポート変換されてwordpressに接続されるときに使用するポートを表しています。

请记下上述输出中的“wordpress”的“PORT(S)”和“mariadb”的“Cluster-IP”。以后在进行互联网连接或进行wordpress的初始设置时会用到它们。

どうやら問題なくデプロイされているようです。
では、実際にwordpressが使えることを外部から接続して試してみましょう!

请确认外部连接

我們將使用「Kubernetes資訊取得」中確認到的「公有IP」以及「部署WordPress應用程式」中確認到的「PORT(S)」,在瀏覽器中輸入,嘗試透過網際網路連接到WordPress應用程式。
以下是一個示例。

http://184.173.46.245:32049
pic04.JPG

显示了WordPress的初始设置页面。
只有这个信息还不能确认只有WordPress容器正在运行,因此我们需要确认MariaDB容器是否也在运行并且可以连接。

在WordPress的初始设置界面上,选择“日本语”,然后选择“继续”,在下一个界面上选择“让我们开始吧!”。在输入以下内容后选择“发送”,确保WordPress和MariaDB可以进行通信。

項目名値データベース名wordpressユーザー名wpuserパスワードwppasswordデータベースのホスト名「kubectl get svc」で確認した「mariadb」ServiceのCluster-IPテーブル接頭辞wp_
pic05.JPG

如果可以正常通信,应该会显示以下屏幕。

pic06.JPG

以上の手順を完了したら、引き続き「インストール実行」を選択し、ブログのタイトルやパスワードを設定し、ブログが正常に開設できるか確認してみてください。ただし、この無料のKubernetesは30日後に自動的に削除されるため、実際のブログサイトとして運用することは困難です。

删除部署或服务

完成任务后,您需要删除已创建的部署和服务。虽然这些会在30天后自动删除,但是不建议将设置了简单密码的WordPress发布到互联网上并让其保持开放状态。

输入以下命令以卸载WordPress和MariaDB。

$ kubectl delete deploy wordpress
deployment.apps "wordpress" deleted
$ kubectl delete deploy mariadb
deployment.apps "mariadb" deleted
$ kubectl delete svc wordpress
service "wordpress" deleted
$ kubectl delete svc mariadb
service "mariadb" deleted

执行完毕后,使用以下命令确认已删除部署和服务。

$ kubectl get deploy
No resource found in default namespace.
$ kubectl get svc
NAME        TYPE          CLUSTER-IP      EXTERNAL-IP  PORTS(S)       AGE
kubernetes  Cluster-IP    172.21.0.1      <none>       443/TCP        70m

如果没有显示”Deployment”且只输出了一行针对Kubernetes服务的”Service”,那么工作完成了。辛苦了。

最终时刻

这次执行的是非常简单的任务,将WordPress部署并使其可用。
我们没有特意添加创建Pod副本以实现冗余,或将部署参数记录在yaml文件中的步骤。
如果你对此感兴趣,我建议你试一试,毕竟还有为期30天的200美元免费信用额度。

广告
将在 10 秒后关闭
bannerAds