Dockerを管理するKubernetesの基本的な動作や仕組みとは? Kubernetesを触ってみた。第20回 PaaS勉強会

2014年9月24日

Kubernetesは、数十から数百といったコンテナからなるアプリケーションのデプロイや管理、死活管理といった運用を支える機能を備えています。主な機能や仕組みを紹介します。


コンテナ型仮想化のDockerを管理するフレームワークとして、Googleがオープンソースとして公開したKubernetesが急速に注目を集めています。KubernetesのプロジェクトにはDocker本体はもちろん、マイクロソフトやレッドハット、IBM、VMwareなどが参加を表明しており、事実上の標準になりそうな勢いです。

Kubernetesはどのような機能を持ち、仕組みはどうなっているのか。有志により都内で開催された「第20回 PaaS勉強会」の草間一人氏のセッション「Kubernetesを触ってみた」の内容をダイジェストで紹介します。

Kubernetesを触ってみた

NTTコミュニケーションズという会社で、Cloudn PaaSというCloud Foundryを使ったクラウドサービスの開発リーダーをしていま草間です。よろしくおねがいします。

タイトルの「Kubernetesを触ってみた」の通り、Kubernetesを使い込んだり実戦投入しているわけではありませんが、触ってみてこんなでした、というのと仕組みなどを調べたので、発表して共有したいなと思っています。

最近Googleが、うちは仮想マシン使ってないから、全部コンテナで動いてるからと言ってましたし、Facebookも仮想化は効率悪いよねと言っていて、僕たちは「まじで?」と反応するわけです。

じゃあ仮想マシンを使わずにどうやってクラウドをやるかというと、コンテナというのがあって、その中でも昨年から流行し始めたのがDockerです。

Dockerが注目されたのは、コンテナでオーバーヘッドが小さいとか一瞬で立ち上がるといった特長の他に、差分ディスクイメージをシェアできたり、自分でさらに付け加えるとか、とても使いやすい。

Kubernetesの基本的な動作や仕組み Fig1

それからインフラのコード化。Dockerファイルを書けばその通りに構築される。こういうことでコンテナの技術が身近になったと。

Kubernetesの基本的な動作とは

じゃあDockerを使っていこう、というときにつまずくのが運用です。

コンテナを試しに立ち上げる程度ならdocker runコマンドを叩けば上がります。しかし何十何百というコンテナを立ち上げるとすると、どうやってホストにコンテナを配置するのか、稼働しているコンテナをどうやって管理するのか、死活管理はどうするのか、といったことを考えなくてはいけません。

そこでどうするのかというと、Dockerを管理するためのKubernetesという仕組みが発表されましたよと。

Kubernetesの基本的な動作や仕組み Fig2

Kubernetesのドキュメントによると、Kubernetesはコンテナ化されたアプリケーションのデプロイやメンテナンスを実現し、またスケールさせる仕組みを備えている、ということです。

まずはKubernetesのデモを見てもらいましょう。

Google Compute EngineのうえでKubernetesの環境を構築しました。kubernetes-masterがいて、kubernetes-minionが4つ。見て分かると思いますが、マスターが管理して、それ以外がDockerが動くノードにあたるものです。

Kubernetesの基本的な動作や仕組み Fig3

/cluster/kubecfg.shというのがkubernetesでいちばんよく使うコマンドです。-pで8080:80でポートフォワードして、runというコマンドをつけて、そのあとはDocker Hubのリポジトリを示していて、1は起動するコンテナの数、helloworldはアプリケーションの名前です。

Kubernetesの基本的な動作や仕組み Fig4

これを実行すると、おっとエラーになりました。already_existsって言われたので、さっき試して実行したものが残ってましたね。ま、実行したと思ってください。

Webブラウザから8080ポートにアクセスしてみると、Hello Worldが立ち上がってますね。

Kubernetesの基本的な動作や仕組み Fig5

これがKubernetesの基本的なデモです。

複雑な構成をJSONファイルで設定

先ほどはコマンドラインから、アプリケーションを取得するDocker Hubのリポジトリやポートの指定などを行いましたが、JSONファイルで設定しておくこともできます。

ここではキーバリューストアのRedisのDockerイメージを取得して6379ポートで走らせて、redis-masterというラベルを付けて、といった指定をしています。

これはredis-masterのJSONファイルで、ほかにもredis-slave用、フロントエンド用のPHPアプリケーションのJSONファイルなどがあって、それぞれをさっきのkubercfg.shに-cオプションでファイル名を渡すと実行できます。

Kubernetesの基本的な動作や仕組み Fig6

実際に実行させると時間がかかるので、ここでは実行されたと思って、あらかじめ用意していた環境を見てください。Webブラウザからアクセスできるようになっています。

Kubernetesの基本的な動作や仕組み Fig7

これはPHPとRedisで構成されているデモアプリの「Guestbook」です。コメントを書き込むとRedisに保存されると。

フロントエンドのコンテナは3つ、Redisのマスターが1つ、Redisのスレーブが2つ、という構成をKubernetesで作りました。

Kubernetesの基本的な動作や仕組み Fig8

Kubernetesの仕組みを知るための4つのキーワード

Kubernetesの仕組みを知るために4つの言葉を理解してください。

Kubernetesの基本的な動作や仕組み Fig9

「Pod」というのはコンテナの集まりです。今回のデモでは1Podで1コンテナしかあげていませんが、Podには複数のコンテナをまとめられます。

Pod内のコンテナは必ず同じホストにデプロイされます。ストレージやIPアドレスなど、複数のコンテナで共有しなければならないリソースがあるときに、1つのPodとして定義しておくと同一ホスト上でまとめられるわけです。

「Label」は、イメージするとおりPodにラベルを付けることができます。文字列なら何でもいいので、ProductionとかDevelopmentとかStagingとか、FrontendとかBackendとか。コンテナには複数ラベルが付けられるので、Production、Backendといったラベルを1つのコンテナに付けて分かりやすくできます。

「Replication Controllers」は何かというと、Podのテンプレートから指定された数のレプリカを作成して維持する仕組みです。起動中のPodの監視をしていて何らかの原因でPodが減ったり増えたりしたら、元の数に戻すようにしてくれます。

今回のデモでは、3つのフロントエンド、2つのRedisスレーブなどはこれで管理されています。

「Service」は、L3で動くプロキシみたいなものです。今回のデモでは、2つのRedisスレーブはポート6379で立ち上がっているので、その手前にRedis Slave Serviceをポート10000で立ち上げて、ここにフロントエンドからアクセスするとRedisスレーブに配分されるという動作になっています。負荷分散に便利、という感じです。

Kubernetesの基本的な動作や仕組み Fig10

KubernetesはPaaSではない

さて、KubernetesはPaaSなのかと言えば、そうではありません。例えばこのコンテナはどのユーザーのものかといったユーザー管理の仕組みやログ収集の仕組みもないですし。だからKubernetesはPaaSではなく、あくまでもスケジューラです、という位置づけにいまのところはなっているようです。

いまKubernetesのような仕組みを下図にあるようないろんなところが提供しようとしています。ただし点線から右側はKubernetesに協力していきますと表明しています。

Kubernetesの基本的な動作や仕組み Fig11

会場から質問 PHPからRedisにつなぐところはどう設定しているの?

いい質問で、実際にコードを見せます。これがPHPのコードなのですが、環境変数で渡しています。Dockerのコンテナのリンクという機能を使われた方は分かると思いますが、これはその仕組みを使っているらしいです。

Kubernetesの基本的な動作や仕組み Fig12

草間氏は本セッションの続きとして、ブログで「Kubernetesの中身を追おう その1」を書いています。

Kubernetesを触ってみた from Kazuto Kusama

あわせて読みたい

Docker Kubernetes コンテナ型仮想化




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本