Kubernetes(k8s)を学ぼう! Microservices編~PodとService操作~

こんにちは。KOUKIです。k8s学習中のWebエンジニアです。

KubernetesでMicroservicesのデプロイ方法を学びましょう。

本記事では、PodとServiceの立ち上げ方法を解説します。

尚、今回もMinikubeを使いますので、以下の記事でインストール&起動してください。
※ MacおよびChromeで検証します。

参考

Udemyの「Kubernetes Hands-On – Deploy Microservices to the AWS Cloud」コースを参考にしています。

解釈は私が勝手に付けているので、本物をみたい場合は受講してみてください。

Docker Hubはこちらです。richardchesterwood/k8s-fleetman-webapp-angular

API OVERVIEWも参考になります。

Podとは

Podは、Kubernetesアプリケーションの基本的な実行単位です。クラスターで実行されているプロセスを表します。

このPodの中には単一もしくは複数のDockerコンテナが動いていて、Podはそれらを包むカプセルのような働きをします。

開発の規模が大きくなってくると、このPodの数が増えていくことになるの為、管理が必要になります。

それを担うのがKubernetesの各マネージドサービスというわけです。

Podの作成

Pod v1 coreを参考に、Podを作成してみましょう。

これがPodを起動する最小単位です。Podの中に単一なコンテナが一つ起動するイメージです。

Podの起動

下記のコマンドでPodを起動します。

起動確認コマンドは以下です。

Podの削除

下記のコマンドで、Podを削除します。

簡単ですね。

Pod内でコンテナを複数起動する

次に、Pod内でコンテナを複数起動してみましょう。

containersにもう一つコンテナを追加しました。また、metadataのnameをappにしています。

webappのままだと複数コンテナ時にはエラーが発生するようです。

applyします。

しかし、現在は複数のコンテナを起動する必要はないので設定は戻しておきましょう

通信確認

下記のコマンドでminikubeのipアドレスを取得してください。

これをブラウザに打ち込んでみます。

Podにアクセスできませんね。

実は、ローカルPCとMinikubeの間には防波堤のようなものがあって、今のままだと通信ができません。

ただし、Pod内に入ることはできます。

Podの中からだとhttp://localhost:80にアクセスできます。

Podから抜けるには、「exit」コマンドを叩いてください。

Service

ブラウザからPod内のアプリケーションにアクセスすることはできない一方、Pod内からはアクセス可能であることはわかりました。

それでは、どうやってブラウザからアクセスすれば良いのでしょうか?

その答えは、KubernetesのServiceにあります。これは、Podの集合で実行されているアプリケーションをネットワークサービスとして公開する一般的な方法です。

Serviceの作成

公式リファレンスを参考に、Serviceを作成しましょう。

Serviceの公開タイプには、以下の3つがあります。(公式参照)

  • ClusterIP: クラスター内部のIPでServiceを公開する。このタイプではServiceはクラスター内部からのみ疎通性があります。このタイプはデフォルトのServiceTypeです。
  • NodePort: 各NodeのIPにて、静的なポート(NodePort)上でServiceを公開します。そのNodePort のServiceが転送する先のClusterIP Serviceが自動的に作成されます。<NodeIP>:<NodePort>にアクセスすることによってNodePort Serviceにアクセスできるようになります。
  • LoadBalancer: クラウドプロバイダーのロードバランサーを使用して、Serviceを外部に公開します。クラスター外部にあるロードバランサーが転送する先のNodePortClusterIP Serviceは自動的に作成されます。

ここでは、NodePortを指定しました。

下記のコマンドで、Serviceを作成します。

以下のコマンドで、アプリケーションを起動することができます。

Labelの設定

ServiceとPodを紐づけるために、Pod側の設定にLabelを入れておきましょう。

この機能は後々重要になってきます。

applyします。

下記のコマンドを使って、ブラウザからアプリが表示できるか確認してください。

新しいバージョンをリリースする方法

新しいDockerイメージのアプリをリリースする方法を確認しましょう。

Selectorを使えば、簡単です!

まず、新しいPodを追加します。

コメントにも書きましたが、「—」で区切ることで複数記述できます。

また、ここではLabelsが重要です。新しく「release」ラベルを追加しました。

このラベルをService側で指定します。

以下のコマンドで、PodとServiceを更新してください。

以下のコマンドで、アプリケーションを立ち上げてください。

これだけで新しいバージョンのアプリを起動できます。すごく便利ですよね^^

切り戻しも簡単です。

ブラウザにはキャッシュが残っているので、スーパーリロードでキャッシュクリアをすると切り戻したバージョンのアプリケーションが確認できます。※Macの場合は「command + r」でスーパーリロードができます

PodにLabelを付けてServiceのSelectorでそれを指定する、そういった流れですね。

ラベルを確認したいときは、下記のコマンドが便利です。

次回

次回は、ActiveMQのPodとServiceを構築しましょう。

記事まとめ

参考

コメントを残す