在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,以真实体验容器是什么以及它如何运作。
本次所建構的環境
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账号
アカウントの作成が終わったら、クレジットカード情報を登録します。
ログイン後のダッシュボード画面から「管理」-「アカウント」-「アカウント設定」を選択して「クレジット・カードの追加」を選択してください。
クレジットカード情報を登録し、アカウント・タイプが「従量課金」になると、無償のKubernetesが使用可能となります。
クレジットカード情報登録はためらわれるところがあるのですが、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服务。
如果选择”免费”计划,您将进入输入Kubernetes创建参数的页面,然后您可以默认创建,无需进行其他操作。
作成後、準備中画面に遷移するのでしばらく待機します。最短数分~最長数十分くらいで作成は完了すると思います。気長に待ちましょう。
遷移先の画面に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
显示了WordPress的初始设置页面。
只有这个信息还不能确认只有WordPress容器正在运行,因此我们需要确认MariaDB容器是否也在运行并且可以连接。
在WordPress的初始设置界面上,选择“日本语”,然后选择“继续”,在下一个界面上选择“让我们开始吧!”。在输入以下内容后选择“发送”,确保WordPress和MariaDB可以进行通信。
如果可以正常通信,应该会显示以下屏幕。
以上の手順を完了したら、引き続き「インストール実行」を選択し、ブログのタイトルやパスワードを設定し、ブログが正常に開設できるか確認してみてください。ただし、この無料の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美元免费信用额度。