タケハタのブログスマートフォン用の表示で見るタケハタのブログプログラマの生き方、働き方、技術について雑多に書いていくブログです。2019-03-17Kubernetesでローカル環境を構築してHTTP通信できるまで先月書いた記事でDcokerでローカルにコンテナの作成をしましたが、今度はそれをKubernetesで作ってみたいと思います。参考にした資料は下記の書籍です。gihyo.jpKubernetesとは?「コンテナオーケストレーションエンジン」と言われています。現代のWebサービスなどでは、アプリケーションサーバーを複数並べてロードバランサーで分散したり、データベースをはじめとするミドルウェアごとにサーバーを立て、それぞれ分散する作りがほとんどだと思います。Dockerがこのサーバー1台ごとのコンテナを作成するものとすると、Kuernetesはそのコンテナ化された環境を複数台並べた時の、デプロイやスケーリングなどを自動化するようなものです。Macが入っていない場合は、下記からダウンロード、インストールしてください。Kubernetes」を選択し、Applyを押してください。ここから有効化するまでに少し時間がかかります。running」と表示されます。Kubernetesで環境構築Kubernetesのリソースの構成Kubernetesはリソースと呼ばれるものの単位で管理をするのですが、今回は動かすのに最低限必要な、下記のリソースについて書きます。いう関係性になります。Serviceに関しては、これらで作られた環境に対しての、ロードバランシング等を提供するリソースです。言葉だけだと理解しづらいと思うので、実際に作っていきましょう。PodPodは、Kubernetesのリソースの最小単位です。実際にコンテナを立てるのはこのPodの中になります。マニフェストファイルの記述Kubernetesは、マニフェストファイルと呼ばれるYAMLファイルで、リソースの情報を記述します。前回の記事の最後にdocker-composeで作ったものと同じ環境をKubernetesのPodとして作ります。docker-composeは下記のxmlで作成しました。80:80Kubernetesでは「マニフェストファイル」と呼ばれるYAMLファイルを記述し、リソースを作成します。次のマニフェストファイルを作ってください。ここではsample-pod.yamlという名前にしています。作成するリソースの種類を指定します。今回の場合はPodになります。配下はPod内に作成するコンテナの設定です。docker-composeと似たような感じですね。コンテナのイメージと受け付けるポートを指定しています。いうコマンドでPodを作成します。指定した名前のリソースが存在しなければ新規作成、存在すれば更新をしてくれます。対象のマニフェストファイルのファイル名やディレクトリ名を指定するオプションです。ここではファイル名を指定していますが、ディレクトリ名をしていすると、そのディレクトリ配下にある全てのマニフェストファイルに対して実行されます。作成されたPodを確認します。いうコマンドを使います。いうパラメータを付けています。付ければ確認できます。下記のようにカンマで区切って複数のリソースをまとめて確認することもできます。pods,replicasets,deploymentesPod内のコンテナに接続して確認Podは作成しただけではlocalhostからHTTP等で接続することはできません。これをリクエストを受けれるようにする方法は後述するので、一旦下記のコマンドで動作確認します。いうコマンドを使うと、Pod上でコマンドを実行することができます。ここではsample-pod上でcurlコマンドを実行し、hello.goを呼び出しています。オプションで指定しているのは、Pod内のアクセスしたいコンテナ名です。単一のコンテナしかないPodの場合は、このオプションは不要です。下記のようにすることで、Pod内のコンテナに擬似的にログインしたように操作することもできます。/bin/bashroot@sample-pod:/go#下記のように、コマンドを実行して起動の確認もできます。いうコマンドを実行します。deletedパラメータとしてリソースの種類、名前を渡します。ReplicaSetReplicaSetは、複数のPodの集合体のようなイメージです。Podを指定した個数作成し、障害が発生した時は新たなPodを作成して入れ替えて復旧して、指定の個数をキープしてくれます。ReplicaSetの作成ReplicaSetのマニフェストファイルは、下記のようになります。指定している数値がそのPodの数(レプリカ数)になります。配下はPodのマニフェストファイルと同じ内容になります。コマンドを実行します。コマンドで確認すると、下記のようになります。38ssample-replicasetというReplicaSetと、それに紐づくPodが3つ作成されています。app=sample-appselector、ラベル障害が発生した時は新たなPodを作成して入れ替えて復旧してくれると前述しましたが、落ちたかどうかの監視に「ラベル」の値が使われます。