明後日シリーズとは、「明日からは無理でも、明後日ぐらいからは使えるようになるといいな」と言うノンビリとした目標を設定し、書かれている本です。
元々、書店にて、どの本を選んでよいかわからずに困っているエンジニアから、声をかけられたことで始まりました。「知識を得たいけれど、どんな本を買って良いかわからない」。そんなふうに困ったことはありませんか。
この本を読むことで、技術の概要を掴み、自分の必要としている知識を理解して、次のステップへ進めることを目標としています。当然、この本だけですべての知識を得ることはできません。ただし、「自分が何を理解しなければならないのか」「次に学ぶべき内容は何なのか」はわかるはずです。
最近、いろいろな若手エンジニアから「勉強しなくちゃいけないと、とは思っているんですけど」と懺悔するような言葉を聞きます。意識が高いことは良いことですが、そんなに「勉強」というものはしなくてはいけないのでしょうか。
我々の若い頃は、パソコンを触って仕事をすることは半分遊びのように見られる向きもありました。パソコンを使った仕事に、周囲が慣れていなかったこともありますが、我々が楽しそうに技術に触っていたことも理由の一つでしょう。
本来は、技術や知識の習得というものは楽しいものであるはずです。皆さんだって、好きな漫画やアニメを見たり、趣味のことをやっている時は楽しいでしょう?そうやって楽しんで得た知識だってたくさんありますよね。そもそも、本の読み方や言葉の意味だって、そうやって覚えてきたのではないでしょうか。
技術を仕事にしていると、どうしても「しなくてはならない」になりがちです。でも、できれば「しなくてはならない」ではなく「面白そうだから調べていたら自然と身についた」となっていって欲しいなと思っています。
表紙に描かれているネコは、モウフカブールのキャラクターである「カブール団長」です。
そして、本文中に時々出てくるネコは「にゃごろう」君です。なんと別人なんですね。
にゃごろう君は、将来的に256代目の将軍になる予定なのですが、あいにく知識が足りません。せいぜい、親に言えないサイトをコッソリ運営している程度です。
それでは困るので、じいや(伊豆守)に教えてもらいながら、IT業界の将軍を目指して学んでいます。
という、(実質)ニートのネコが昼寝しながら知識を増やすシリーズです。皆さんもぜひベッドにゴロっと横になってお読みください。お風呂で本を湿気させながらでも良いですよ!ヨレヨレになるかもしれませんが。
はじめに
第1章 Kubernetesとは
第2章 Kubernetesの仕組み
今回の明後日シリーズ*1は、Kubernetes(クーベネティス*2)です。K8s*3とも略すアレです。
Kubernetesと言えば、Dockerとセットで語られることが多く、「エンジニアになんだか必須っぽいもの」だけど、正体はよく知らないという方も多いのではないでしょうか。
まあ、そりゃそうです。
1ページ目から何ですが、現時点でKubernetesをガチで使うエンジニアって少ないでしょうから。正直なところ、僕もガチで使っているとは言いがたい。中小企業なら、使っている会社も少ないでしょう。使っている人が少ないということは、それだけ現場で知識が広まっておらず、「先輩、Kubernetesって何ですか?」と尋ねたところで、明確な返事が返ってきづらいということです。
そんなKubernetesのお話です。
Kubernetesは何かと、一言で言えば、コンテナのオーケストレーションツールです。
コンテナもオーケストレーションも知らんぞなもしという声が聞こえてきそうです。
コンテナって何だよと思われる方は、「Kubernetesとは、Dockerを良い感じに操作できるツール」とでもイメージしてください。あくまでイメージね!! 全然正確じゃないから!! Kubernetesガチ勢の世界線に住むリドル君*4が耳にしたら、首をはねられるレベルの暴言だから!!
ただ、何もわからずに読み進めても辛いと思うので、コンテナが何かわからない人は、正確ではないですが、とりあえずそんなイメージを持って下さい。
リドル君がKubernetesに詳しいかどうかは別として、Kubernetesの話をするには、まずDockerの話から始めねばなりません。正確ではないのですが、おおよそKubernetesはDockerを良い感じに操作するものに近い感じだからです。Dockerに詳しい人はこの項目を読み飛ばして良いです。
Dockerとは何かですが、一言で表せば、「データやプログラムを隔離できる仕組み」です。
パソコンやサーバでは、複数のプログラムが動いています。皆さんのパソコンでも、WordとExcelを同時に使ったりするでしょう。同じように、サーバでは、Apache(Webサイトの機能を提供するソフトウェア)や、MySQLやPostgreSQL、MariaDB(いずれもデータベースの機能を提供するソフトウェア)が同時に動いています。
Dockerとは、パソコンやサーバ上の環境を、イナバの物置のような細かい部屋に分けるようなものなので、独立した環境(部屋)に、特定のプログラムを入れられるようになります。それまで一つの部屋で雑魚寝していたApacheとMySQLが個別に部屋を持てるわけです。イカガワシイ本も隠し放題!!夢の一人部屋!!というわけです。
このイナバの物置部屋のことをコンテナ(container)と言います。
Dockerとコンテナは、以下の図のような構成になっています。
Dockerの機能は、「Docker Engine」というソフトウェアを入れると使えるようになります。
まず物理マシンがあるとすると、その物理マシンの中にLinuxOSがあり、そのLinuxOSの上にDocker Engine(Dockerのソフトウェア)をのせ、Docker Engineの上でコンテナが動きます。コンテナの中には、さらにコンテナ専用のLinuxOSっぽいものと、アプリケーションが入っています。
何故「Linux」ではなく、「Linuxっぽいものなのか」について色々お話したいこともありますが、Kubernetesの本題ではないので、詳しくは「明後日Docker*5」を読んで下さい(宣伝)。Dockerについてモチャモチャ書いております。
コンテナが何者か薄らわかったところで、Kubernetesの話に戻りましょう。
Kubernetesは最初に書いた通り、コンテナのオーケストレーションツールです。
オーケストレーションツールとは、システム全体の統括をし、複数のコンテナを管理できるものです。
その名のとおり、オーケストラを思い浮かべてください。楽団員を指揮者が指揮するように、複数のコンテナたちを指揮できるツールがKubernetesです。
コンテナというものは、複数で使うのが基本です。
一つだけしか使わないのであれば、コンテナのメリットが生かせないからです。そんなもの、適当に物理的なマシン買ってぶち込んでおけば用が足ります。
そうではなく、1つのサーバに複数の環境を作りたいとか、隔離したいという時に使うものなので、コンテナは複数*6なのです(簡単に言うと)。
それで通常、コンテナを作るのには、Dockerのコマンドを打って作るのですが、Kubernetesを使うと、定義ファイルに従って自動でコンテナを作ったり消したりできます。ポチポチと一つずつ作る必要はありません。
この仕組みがあると、最初にコンテナを大量生産する時にも便利ですが、運用中にコンテナが一人お亡くなりになっても、すぐに代わりのコンテナを作ってくれるのもありがたい機能です。人間が、夜中のメールに叩き起こされて、サーバを作り直す必要もありません。
[*1] 先に言っておくと、この明後日シリーズはどうでも良い脚注が入りまくるスタイルなので、脚注はいちいち真面目に読まなくても良いです。大した内容が書いてないどころか、関係ない雑談が書かれています。同人故の緩さだとお目こぼし下され。(戻る)
[*2] 日本人はクバネティスと発音することも多いようだが、OSS(旧LinuxCon)では、外国人勢も翻訳のお姉さんも「クーベネティス」「クーベルネティス」と発音するので、それに倣う。なお、お姉さんはこの手のイベントをよく担当している人がいて、一人称を勝手に「僕」にしたりする人なので、「僕っ子のお姉さん」と呼んでいる。訳がわかりやすい。(戻る)
[*3] Kubernetesは、「k」と「s」の間に8文字あるので、K8sと略すようだが、僕は時々K9sと書いてしまう。一度間違えて覚えると取り返しがつかない例。(戻る)
[*4] 最近、大澤君が夢中なツイステッドワンダーランドのキャラ。すぐ首をはねるらしい。大澤君によると、「リドル君は、人気の出るキャラだと思うよ!!マザコンで格好良いし、かわいいしね。あと、変態じゃないし、DVしそうじゃないから」らしい。なお、作中にリドル君がKubernetesガチ勢である記述などない。当然のことながら。(戻る)
[*5] 明後日シリーズ第1段。「明後日から使えるDocker入門」。なお、マイナビ出版から「仕組みと使い方がわかる Docker&Kubernetesのきほんのきほん」として商業誌化されました。僕の気まぐれにより、ほぼ書き直しているので、きほんのきほんの方がよりオススメ。いつものクダラナイ脚注はオールカットで、大変読みやすくなっております。(戻る)
[*6] 戦隊ものの合体ロボが、1つのパーツだけだと、パッとしないでしょ?あれと同じ。合体してこそメリットがある。1つのパーツだけでセンターが務まるのは、サンダーバード2号だけ。(戻る)