Upgrade to Pro — share decks privately, control downloads, hide ads and more …

10分くらいで雑に理解する KubernetesとEKS

10分くらいで雑に理解する KubernetesとEKS

(🌟) は改ページ

10分くらいで雑に理解する
KubernetesとEKSというテーマで発表させていただきます。
まさちゃこといいます。よろしくお願いします。
(🌟)
まずは、自己紹介ということで、まさちゃこといいます。
曲とか作ったりSIやったりするプログラマです。
最近よく使うプログラミング言語はJavaとnodejsです。
ニコニコ動画とかでミクさん達の曲を公開したりしているので、もしよければよろしくお願いします。
(🌟)
あー、宣伝です。Twitterとかで、ミクさんやゆかりさんの曲を公開しているのでもしよければ聞いていただけると幸いです。
(🌟)
今日は、以下のような流れでお話をさせていただければと思います。
(🌟)
はじめに、ということで、Kubernetesの話をさせてもらうのですが、技術を熟知している人が話すというよりも、
よく聞いたり、興味があったので調べたり使ってみた中での話が中心です。
なので、まだ実務で運用したことがなかったりするので、不確実だったり誤っている内容もあると思います。
間違い、ご指摘などありましたらTwitterやこの勉強会のハッシュタグで教えていただけると幸いです。
それでは本題に入りますー。
(🌟)
最近色々なところで、Kubernetesの話題を聞きますね。
今日のLT会の話題も結構コンテナ関連やKubernetesの話題が多いように思いました。
(🌟)
勉強会とか、カンファレンスとかでKubernetesの話が出てきたり、便利だよーって話を聞きます。
お話を伺っていると、どうやらコンテナというものをいい感じに管理してくれるようです。
そこで、実際Kubernetesが一体何をしてくれて、使ってくれる人が一体何を必要と思って使うのかもっと身近に知りたいなと思いました。
(🌟)
ということで、今回の動機です。
Kubernetesを触りだけでもいいから知りたい!
今後主流になりそうだけど、具体的にわからない!
開発する際にそこらへん意識して作れるようになりたい!
最新技術を使ってドヤ顔したい。大事ですねー。大事です。
はい、こんなモチベーションでやっていこうと思います。
(🌟)
じゃあ、まずは、Kubernetesがどんなことができるのか。
概要を知りたいと思いました。
(🌟)
なので
(🌟)
評判がとても良かったKubernetes完全ガイドを半分くらいよみつつ、
(🌟)
AmazonのKubernetesチュートリアルをやってみました。
(🌟)
最初に、抱いたKubernetesのイメージはこんな感じでした。
(🌟)
どうやらKubernetesは
(🌟)
コンテナ周りをいい感じに
(🌟)
管理してくれるらしい。
(🌟)
そもそもコンテナって何!?って話になると思います。
コンテナは、コンテナ型仮想化と呼ばれる仮想技術の一つです。
(🌟)
じゃあ、仮想化技術って?ってなると思うんですが
(🌟)
私が真っ先に抱いていた、仮想化技術の第一印象はこんな感じでした。
仮想化技術!OSの上でOSを動かすあれ!
でも、OSの上でOSを動かすからちょっと重いよね。みたいな。
(🌟)
ただ、それはどうやらKubernetesが扱うものとは少し違うようです。
仮想化技術にも種類があって、
どうやら最初にイメージしていた仮想化技術は、は仮想化技術の中でも「ホスト型仮想化」と呼ばれる物のようでした。
例えば、Windowsの上にCentOSをまるまる動かしたり、
Windowsの上でWindowsを動かす。のような。
(🌟)
それとは別にある、仮想化技術がコンテナ型仮想化と呼ばれる物でした。
コンテナというOSっぽいもののを構築してアプリを動かします。
カーネルとかはコンテナを動かしているOSのものを利用したり共有したりするので、ホスト型より軽く動かすことができるようです。
カーネルとかはホストが用意してくれるので、起動もホスト型より早いとか。
Kubernetesはこっちの仮想化技術を扱うようです。
(🌟)
コンテナ型仮想化。結構使ったことのある方も多いと思います。
Dockerの上でアプリを動かしたりとか。
ざっっくりこんな感じで動いています。
基盤となるOSがあって、その上でDockerが動いていて、さらにその上にOSっぽいコンテナが個別に動いている。
その、OSっぽいコンテナの中でアプリが動いている。
例えば、SpringBootとかのサーバサイドアプリとか、MySQLみたいなDBあぷりとか。
(🌟)
例えば、OS上にこれらのアプリを普通に動かすとなると、OSや他のアプリの影響で必要なディレクトリがないとか。
動かすために必要な物が揃ってないとかあるんですが、コンテナだとそのアプリの為の環境がコンテナの中にパッケージングされていて、
他のアプリの環境とは分断されているので影響を受けにくかったりします。
(🌟)
また、ホスト型の仮想化に比べてホストOSのリソースを使えて比較的軽い感じで動かすことができます。
(🌟)
じゃあ、そんなにいいなら、それをつかって本番利用してみようってことになると思いますが、
色々困りごとが出てきます。
(🌟)
実際に運用する時どうする!?
(🌟)
例えば
(🌟)
本番環境では、バックエンドサーバは3コンテナで動かして!
DBサーバは1コンテナで運用したいです。
できるだけ、各コンテナは地域を分散して配置されるようにしたいです。
みたいな。
(🌟)
AWSに手動で、コンテナを立ててみたらこんな感じでしょうか。
こっちの地域はバックエンドサーバ2つたててー。
こっちには、サーバと、DB1つ。みたいな。
うむ。こんな感じの構成。
(🌟)
ってそれ誰が管理するん!?
ってなると思います。もちろん、がんばれば手動でもできると思いますが、
だいぶ嫌ですね。
(🌟)
クラウド全体で動いているコンテナ数を把握したり、
新しくデプロイするときに、既存のコンテナを落としながら新しいコンテナを立ち上げる。
コンテナ周りに必要なストレージとか、ロードバランサとか用意したり。
コンテナごとの依存関係とか整理したり。
(🌟)
だいぶ胃が痛いですね!
手順書を書くとしても人の手でやるとしたら
だいぶ胃が痛い!
(🌟)
リージョンとか、サーバを跨いでもコンテナ周りの管理は何かで一元的に管理したい。
何かで。。。。一元的に。。。。
(🌟)
そこで
(🌟)
Kubernetesを使えばなんとかできそう!
(🌟)
ざっくりKubernetesを説明するとこんな感じです。
コンテナを一元的に管理するサーバ、(Kubernetes Masters)がいて
(🌟)
管理されるコンテナを動かすサーバが、ノードという単位でいて。
(🌟)
複数のコンテナがPodという単位で集まっています。
(🌟)
そのPodにいるコンテナを、このKubernetes Mastersがコンテナ立てたり止めたり更新したりします。
(🌟)
どうやらこの構成全体をKubernetesというらしいです。
Kubernetes Masterがコンテナ周りを運用・管理してくれるということはわかりました。
じゃあ、Kubernetesはどういう風にコンテナを管理するか、という情報をどこから持ってくるんでしょう。
(🌟)
どうやら、このKubernetes Mastersにyamlに書かれた内容を渡すことで、
各Nodeに構成を反映させて指定した通りのコンテナ実行環境を構築する。ということらしいです。
(🌟)
で、ymlに書いた内容はkubectlというコマンドを使って、反映させます。
(🌟)
コマンドはだいたいこんな感じで、
kubectrlというコマンドで、指定したこ内容を元に、Kubernetes Mastersに環境を構築・管理させるようです。
(🌟)
運用する人がこのコマンドを実行することもできますが、主にJenkinsとかCI/CD環境が実行したりするようでした。
(🌟)
じゃあ、Kubernetesが管理するコンテナ「周り」とはなんなんだろう、というと
例えば、アプリ以外のストレージとか、アプリに負荷分散するためのロードバランサとか。
アクセスする為のネットワークとか、コンテナへのアクセス権限とか。
それらがコンテナ周りに含まれるようで、Kubernetesが管理・構築してくれます。
(🌟)
この他にもいろいろとやってくれるらしいのですが、
Kubernetesの概要は一旦ここで終わりにしようと思います。
(🌟)
ここまで話して、きになるところとして
(🌟)
Kubernetesの運用が大変なんじゃない?
というのがあると思います。
(🌟)
例えば、リージョン跨いでコンテナ管理したり、ロードバランサ立てたり、ストレージ割り当てたりするシステムの運用って実際
(🌟)
大変❤️(らしいです)
(🌟)
なので
(🌟)
そこらへん、AWSさんとかクライドに任せようー!
ということで、AWSが管理するKubernetesサービスの、Amazon EKSを使ってみようと思いました。
(🌟)
Amazon EKSはだいたいここらへん。
Kubernetes Mastersをマネージドで管理してくれるものです。
なので、ユーザはKubernetes Mastersを使うだけです。
(🌟)
ただ、Node環境は自分で運用する必要があります。
(🌟)
ということで、百聞は一見にしかず。
案ずるより生むが易し。ということでチュートリアルをやってみました。
チュートリアルをやってみると、実際の使い方の感覚がつかめると思います。
AWS 公式のEKSチュートリアルドキュメントも詳しく書いてあってよかったです。
また、Classmethodさんのチュートリアル実践記事がわかりやすかったです。
(🌟)
使ってみて、EKSを使うメリットは、だいたいこんな感じでした
KubernetesMastersの管理やスケールをAWSに任せられる。
ロードバランサやストレージもAWSマネージドのものを使用できる。
ということはつまり、そこらへんの運用もAWSに任せられる。
権限管理とか、そこらへんもAWS標準のIAMの使用感に統一できる。
とかとか。大変、便利そうでした。
(🌟)
と、ここまで使ってみて実はAWSにはEKSと似てちょっと違うサービスがが別にあります。
(🌟)
それは、Amazon Elastic Container Service.Amazon ECSと呼ばれるものです。
特徴としては、Kubernetesより比較的シンプルにコンテナを運用できます。
Kubernetesと同じように、立ち上がっているコンテナの数を把握したり、更新したりできます。
また、fargateというサービスと連動させると、コンテナが動く環境。ノードのような環境を管理しなくても良くなります。
同じように、コンテナを管理するところと、コンテナを動かすところを管理してくれるんですね。
ただ、ロードバランサやストレージなどのコンテナ周りは、別サービスとして個別に管理する必要があります。
なので、コンテナ周りまで含めて一元的に管理するEKSに対して、ECSはコンテナ中心で管理する印象が強いです。
EKSと比べてシンプルに運用できるのですが、あまりコンテナの種類や数が増えると、各種個別に管理しないといけないので、運用が大変かなーという印象を受けました。
(🌟)
まとめです。
Kubernetesは複数コンテナを管理する必要がある時に、頼れる
コンテナ周りのネットワークやストレージも一元的に管理できる。
なので、多数の複数コンテナを扱う、マイクロサービス運用する場合とかに便利そう
AWSでコンテナの種類がそんなに多くなければ、もうちょっと簡素なECSの方がシンプルで良さそうという印象をうけました。
(🌟)
私もいつか、実環境で使ってみてイケてるマイクロサービスを作ってみたいですね!
ということで、ご静聴ありがとうございました!
(🌟)
注釈です。
チュートリアルを行う上での注意点というか、気になったところです。
現在、チュートリアルと東京リージョンで行うこともできます。
ですが、EKSのノードを動かすAMIなどは東京リージョンにないので、海外リージョンからコピーしてくる必要があります。
まぁ、東京リージョンを使ってチュートリアルやる場合、「AMI リージョン間コピー」でぐぐると解決すると思います!
(🌟)
また、チュートリアルをやる前に
「Kubernetes 完全ガイド」を読んでおくと、部分的に全体像が把握できてわかりやすいと思いました。
(🌟)

masa_charcoal (masachaco)

March 07, 2019
Tweet

More Decks by masa_charcoal (masachaco)

Other Decks in Technology

Transcript

  1. ࣗݾ঺հ HN:·ͪ͞Ό͜ • ۂͱ͔࡞ΔϓϩάϥϚ ܥ SIer • ϓϩάϥϛϯάݴޠ: Java /

    node.js • αʔόαΠυΞϓϦɺεϚʔτεϐʔΧʔΞϓϦͷ։ൃ • ٶͪΌΜͷসإۦಈ։ൃ • χίχίಈըͰϛΫ͞ΜୡͷۂΛެ։தʂ • Twitter • @masachaco • GitHub • https://github.com/masachaco • SoundCloud • https://soundcloud.com/masa_charcoal • niconico • https://www.nicovideo.jp/mylist/11613193
  2. Kubernetesͷͬ͘͟Γߏ੒ Kubernetes Masters ̍αʔό୯Ґͷ ࣮ߦ؀ڥ %PDLFSͱ͔ ಈ͍ͯΔ Kubernetes Node Kubernetes

    Node Pod Pod ଞͷPod ଞͷPod ̍αʔό୯Ґͷ ࣮ߦ؀ڥ %PDLFSͱ͔ ಈ͍ͯΔ
  3. Kubernetesͷͬ͘͟Γߏ੒ Kubernetes Masters Kubernetes Node Kubernetes Node Pod Pod ଞͷPod

    ଞͷPod /PEF1PEͷঢ়گʹ Αͬͯ ίϯςφཱͯͨΓ ͢Δ ίϯςφ ࢭ·ͬͯͨΒ ࠶࡞੒ͨ͠Γ͢Δ
  4. Ұ෦ڝ߹ͱͷൺֱ • Amazon ECS (Elastic Container Service) • EKSಉ༷ʹAWS ϚωʔδυͰίϯςφΛ؅ཧͰ͖ΔαʔϏε

    • KubernetesΑΓൺֱతγϯϓϧʹίϯςφΛӡ༻Ͱ͖Δ • ίϯςφΛಈ͔͢αʔόΛɺ؅ཧ͠ͳ͍͍ͯ͘ڧྗͳFargete͕࢖͑Δ • ෳ਺ͷίϯςφΛѻΘͳ͍͍ͯ͘γϯϓϧߏ੒ͳΒɺECSָ͕ͦ͏ • ϩʔυόϥϯαͳͲɺωοτϫʔΫपΓ΍ετϨʔδ͸ผαʔϏεͱ͠ ͯ؅ཧ͢Δඞཁ͕͋Δ Amazon ECS
  5. νϡʔτϦΞϧΛߦ͏্Ͱͷ஫ҙ • ݱঢ়౦ژϦʔδϣϯͰ΋ɺEKSͷνϡʔτϦΞϧ͸Ͱ͖Δ • aws-cliͱɺEKSߏஙʹඞཁͳcredential(ೝূ৘ใ)͕ઃఆࡁΈͰ͋ Δඞཁ͕͋Δ • ϊʔυΛߏங͢ΔͨΊͷɺEKS༻AMI (EKS࠷దԽAMI) ͸

    • ౦ژϦʔδϣϯʹͳ͍ɻϦʔδϣϯؒίϐʔ͢Δඞཁ͕͋Δɻ • ৄ͘͠͸ʮAMI ϦʔδϣϯؒίϐʔʯͰݕࡧʂ ※ CloudFormationͰɺVPSͷߏஙͳͲओ୊͡Όͳ͍ͱ͜Ζ͸ָʹεΩοϓͰ͖ΔͷΊͬͪΌؾ͍͍࣋ͪ