こんにちは。今回は、Kubernatesに関する記事です。ずっと気になるなぁ気になるなぁと思っていながら手がついてきていなかったので、今年こそは・・!ということで触ってみましたので、手順など忘れぬようまとめておこうと思います。
それではまいります
Contents
前提
- Mac OS
- Gitがインストールされていること
参考書籍
今回、以下の書籍のハンズオンをベースに手元で動かしてみました。(一部うまく動かないコマンドがあったりしたのでそこは変えています)。
この本では、これからご紹介する「とりあえずKubernetes動かしてみた」レベルではない、登場の背景から運用のプラクティス、Kubernetes活用をDevOpsに昇華させていくまでとても分かりやすく解説されていて個人的にはとても良書でした。おすすめです。
*Amazon レビューでも評価とても良いですね・・!
Kubernatesでアプリを動かすまで
デモアプリケーションのDockerイメージを作成する
Docker Desktopをインストールする
https://www.docker.com/products/docker-desktop
docker desktopをインストールすると、Dockerもインストールされます。Desktopインストールが完了したら、以下のコマンドを打ってDockerがインストールされたことを確認しておきます。
docker version
コンテナイメージのダウンロードと実行
今回は、上のテキストで紹介されているコンテナイメージを拝借して、これを実行してみようと思います。
ローカルのターミナルで、以下のコマンドを実行します。
docker run -p 9999:8888 --name hello cloudnatived/demo:hello
この状態でブラウザにアクセスすると、アプリの実行結果が表示されていることが確認できます。
また、このコマンドを打った後、Docker Desktopをみると、ダウロードしてきたイメージが一覧に追加されていることが確認できます。
イメージのビルド
一応、一通りのプロセスを試すという意味で、上のコードをローカルに落としてきて、これをもとに独自のイメージを作ってみたいと思います。
コード
https://github.com/cloudnativedevops/demo
コマンド
## リポジトリのクローン
git clone https://github.com/cloudnativedevops/demo.git
## イメージのビルド
cd demo/hello
docker image build -t myhelloworld
作成したイメージは、Docker Desktop上からも確認できるようになりました!
Docker ImageをDocker Hubにプッシュ
最後に、ローカルで作成したイメージをコンテナレジストリ(Docker Hub)にPushして公開します。
docker login #Dockerアカウントがなければ作成します。
docker image tag myhelloworld <DOCKER ID>/myhelloworld
docker image push <DOCKER ID>/myhelloworld
これで、Docker Hub上にイメージが公開されました。最後に、このイメージを実行してみます。
docker run <DOCKER ID>/myhelloworld
Kubernetes上でアプリイメージを実行する
いよいよKubernetesの登場です。なんとDocker HubではKubernetesがサポートされているため、設定画面からボタン一つでKubernetesのインストールを行うことができます。
有効化して待つこと数分。。
有効化が完了したら、kubernetesのコマンドが使えるようになっているので、以下のコマンドを実行していきます。
## アプリケーションの実行
kubectl run demo --image=<DOCKER ID>/myhelloworld --port=8888 --labels app=demo
## ポートフォワーディング(ローカルの9999ポートをコンテナの8888ポートに割り当てる)
kubectl port-forward pods/demo 9999:8888
すると以下のログが出てきて、ポートフォワードが開始されたことが分かります。
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888
この状態で、先ほどと同様にブラウザでlocalhost:9999にアクセスしてみると、同様にアプリの実行結果が確認できました。これで、Kubernetesを介してコンテナ上のアプリにアクセスすることができました!
ちなみに、この時Kubernetesクラスターで実行されているアプリは以下のコマンドで確認することができます。
kubectl get pods
さて、ここで初めて出てきたPods。なんやそら、ということでちょっと調べてみました。
これはKubernetesの公式ドキュメントに説明がありました。
https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/explore/explore-intro/
なるほど、アプリの単位、ということなのかな・・?(複数のコンテナがまとまって一つのアプリを構成している場合、そのまとまりのことをPodという?)
そしてこのPodは、Kubernetesのノード上、つまりワーカーマシン上で動作するとのこと。