このブログは、コンテナのオーケストレーターであるkubernetesについて
自分の知識をまとめることを目的として記事を書いています。
もともとはなが~くvSphereのあれやこれやに携わってきたのでvSphereとの類似点や相違点についてもちょっと混ぜていけたりしたらいいかなぁとかも思っています。
まずは基本的な解説から行っていこうと思いますが最終的には、ネットワークポリシー等にも触れていきたいと思います。
今回は、kubernetesに入る前にコンテナとは何かについて軽く解説します。
kubernetesはコンテナの技術を利用しているので、軽くでも知っておくと理解がしやすいかと思います。
◆コンテナについて
まずコンテナですが、難しく言うとLinux OSのカーネルを使用して複数のアプリケーションを独立して利用する。
こんな感じになると思います。
『Linux OSのカーネルを使用して』ここは問題ないと思います。
『複数のアプリケーションを』ここも問題ないと思います。
『独立して利用する』ここです、『独立って』どういうこと? となると思います。私はそうなりました。
実際に使ってみて理解した内容を簡単な言葉で表現すると以下になります。
『LinuxOSのカーネルを分身させて、分身をアプリケーションに使わせる』
どういうことかといいますと、ふつうのLinuxOSであればnginxを入れてSQLを入れると1つのLinuxOS上で2つの
アプリケーションが動くことになります。
当然、2つのアプリケーションは同じIPアドレスを共有する形となります。
コンテナ技術を使うと、2つのアプリケーションは1つのLinuxOS上にで動いてはいるものの、お互いに一緒のLinuxOS
ではなく別々のLinuxOS上で動いているとだまされるわけです。
どうやってだましているのかというと、LinuxOSのカーネルを分身させてその分身をアプリケーションに使わせているとなります。
なので、コンテナでnginx、SQLを使うとそれぞれIPアドレスを持つ独立したLinuxOS上で動作していると言えるわけです。
◆コンテナはどうやってLinuxOS上に展開されるのか
コンテナはイメージという、LinuxOSとアプリケーションがセットになった状態を利用して展開します。
普通のOSだとまずハードにインストールしてアプリケーションをインストールすることになると思いますが、
そのOSインストールとアプリケーションインストールが終わった状態からはじめられるということです。
LinuxOSとアプリケーションのセットというとそこそこ容量が大きいんじゃないの?
と思うかもしれませんが、じつはLinuxOS部分はコンテナを動かすホストOSの物を利用して使うので
イメージには含まれずとても軽量です。
で、そのイメージってどこにあるのかというと、DockerHubというところにアプリの公式が用意してたり、
個人がアップロードして公開しているものがあるのでそれを使うのが基本となります。
もちろん、イメージを1から作って使うこともできます。
なのでどこかしらからダウンロードしてくることになるのですが、1度ダウンロードしてローカルにあるものは
ローカルから使うのでダウンロードも各イメージ毎に最初の一回のみとなります。
◆コンテナのネットワーク
コンテナにもIPアドレスが付くと書きましたが、そのIPで通信できるのはあくまで内部。
コンテナ同士でのみ有効となります。
外部にある作業用の端末などからはそのIPアドレスではアクセスできません。
ではどうするかというと、コンテナを起動するときにホストOSのポートとコンテナのポートをくっ付けて
『ホストOSのポート8080に届いた通信はコンテナAのポート80に転送する』というルールを作成します。
これはiptablesでNATをしようしています。
なのでiptablesが動いてないとちゃんと動いてくれません。
気を付けましょう(n敗
◆コンテナのストレージ
コンテナを起動させてファイルを内部に作成したりすることは可能です、コンテナを削除すると当然その
データも削除されます。
そりゃぁそうでしょうということなのですが、コンテナって基本的には作って壊してを繰り返すものなので
そのたびにデータがなくなってしまうと困ります。
そこで、コンテナのデータを外部で保存しましょうという仕組みがあります。
簡単に説明するとホストOSのローカル領域やストレージ装置のディレクトリをコンテナにくっ付けるイメージです。
以上でものすごく簡単にコンテナってどんな感じのものなのかの説明を終わります。
次回からは、コンテナオーケストレーターkubernetesって何なの? コンテナのオーケストレーションってどういうこと?
といった内容を書きたいと思います。