はじめに
本記事は、以下の内容の続きになります。
前回、k8sクラスタを作成したので、そこにアプリケーションをデプロイしてみます。
前提条件
- k8sのクラスタが作成されており、ワーカーノードが稼働していること。
チュートリアル:Guestbook
Kubernetesのサンプルアプリケーションである Guestbook を利用します。
フロントエンドの画面と、Redis(マスター/スレーブ構成)からなるアプリケーションです。
Guestbook の詳細については、以下のページを参照してください。
Pod/Serviceの登録
PodやServiceの定義ファイルは、すでに上記GitHubに登録されているので、それを利用してデプロイしていきます。
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-master-controller.json
replicationcontroller/redis-master created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-master-service.json
service/redis-master created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-slave-controller.json
replicationcontroller/redis-slave created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/redis-slave-service.json
service/redis-slave created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/guestbook-controller.json
replicationcontroller/guestbook created
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/guestbook-go/guestbook-service.json
service/guestbook created
登録されたサービスの状態を確認すると、以下のようになっています。
$ kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
guestbook LoadBalancer 10.100.197.132 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxx.us-west-2.elb.amazonaws.com 3000:31789/TCP 10s app=guestbook
kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 63m <none>
redis-master ClusterIP 10.100.21.24 <none> 6379/TCP 43s app=redis,role=master
redis-slave ClusterIP 10.100.203.61 <none> 6379/TCP 26s app=redis,role=slave
登録したサービスが一通り確認できますが、 guestbook
のサービスのみ外部に公開される設定になっています。
また、kubectl get
コマンドにより、PodやNodeの情報を確認することができます。
Guestbook のアプリケーションをクラスタにデプロイした結果、Guestbookのコンテナは3つ動作しており(レプリカ:3)、Redisは、マスタのコンテナが1つ(レプリカ:1)、スレーブのコンテナが2つ(レプリカ:2)、動作していることが分かります。
$ kubectl get pod,node
NAME READY STATUS RESTARTS AGE
pod/guestbook-4gp4c 1/1 Running 0 13m
pod/guestbook-8d7k2 1/1 Running 0 13m
pod/guestbook-xfvck 1/1 Running 0 13m
pod/redis-master-q8568 1/1 Running 0 25m
pod/redis-slave-4g8c8 1/1 Running 0 14m
pod/redis-slave-xwjtn 1/1 Running 0 14m
NAME STATUS ROLES AGE VERSION
node/ip-192-168-0-148.us-west-2.compute.internal Ready <none> 73m v1.14.7-eks-1861c5
node/ip-192-168-61-197.us-west-2.compute.internal Ready <none> 73m v1.14.7-eks-1861c5
node/ip-192-168-88-66.us-west-2.compute.internal Ready <none> 73m v1.14.7-eks-1861c5
さらに kubectl describe
を使うことで、Podの構成や稼働状態などの詳細情報を確認できます。
$ kubectl describe pod guestbook
Web画面の表示
先の kubectl get services -o wide
コマンドで確認した内容で、guestbook
の EXTERNAL-IP
の部分をコピーしておきます。
また、PORT(S)
の部分を見ると、このアプリケーションが、3000番ポートで公開されていることが分かります。
そのため、ブラウザを開き、以下のURLでアクセスすると、Guestbookの画面が表示されます。
これで、k8s上にデプロイしたアプリケーションが動作していることを確認できました。
http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxx.us-west-2.elb.amazonaws.com:3000
まとめ
今回は、k8sクラスタにアプリケーションをデプロイしてみました。
k8sが生成するLoadBalancerを介して、冗長化構成で動作しているアプリケーションにアクセスすることができました。
PodやServiceの定義ファイルの内容は、ここでは説明しませんが、実際にデプロイした内容と定義の内容を、合わせて確認すると、定義されている内容も理解しやすいかと思います。
次は、k8sクラスタのモニタリングを行ってみます。