Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

今さら聞けない人のためのK8s超入門

836 views

Published on

今さら聞けない人のためのK8s超入門

Published in: Engineering
  • Be the first to comment

今さら聞けない人のためのK8s超入門

  1. 1. 今さら聞けない人のための K8s超入門 日本仮想化技術株式会社 代表取締役社長兼CEO 宮原 徹(@tmiyahar) http://VirtualTech.jp
  2. 2. 自己紹介 • 本名:宮原 徹 • 1972年1月 神奈川県生まれ • 1994年3月 中央大学法学部法律学科卒業 • 1994年4月 日本オラクル株式会社入社 – PCサーバ向けRDBMS製品マーケティングに従事 – Linux版Oracle8の日本市場向け出荷に貢献 • 2000年3月 株式会社デジタルデザイン 東京支社長および株 式会社アクアリウムコンピューター 代表取締役社長に就任 – 2000年6月 (株)デジタルデザイン、ナスダック・ジャパン上場(4764) • 2001年1月 株式会社びぎねっと 設立 • 2006年12月 日本仮想化技術株式会社 設立 • 2008年10月 IPA「日本OSS貢献者賞」受賞 • 2009年10月 日中韓OSSアワード 「特別貢献賞」受賞 • ガンダム勉強会主宰・好きなモビルスーツはアッガイ 2
  3. 3. 3 『Software Desgin』で毎月 「宮原徹のオープンソース放浪記」連載中
  4. 4. 日本仮想化技術株式会社 概要 • 社名:日本仮想化技術株式会社 – 英語名:VirtualTech Japan Inc. – 略称:日本仮想化技術/VTJ • 設立:2006年12月 • 資本金:3,000万円 • 売上高:18,167万円(2019年7月期) • 本社:東京都渋谷区渋谷1-8-1 • 取締役:宮原 徹(代表取締役社長兼CEO) • 伊藤 宏通(取締役CTO) • スタッフ:8名(うち、6名が仮想化技術専門エンジニアです) • URL:http://VirtualTech.jp/ • 仮想化技術に関する研究および開発 – 仮想化技術に関する各種調査 – 仮想化技術を導入したシステムの構築・運用サポート – OpenStackの導入支援・新規機能開発・運用サポート – 自動化・DevOps支援 ベンダーニュートラルな 独立系仮想化技術の エキスパート集団 4
  5. 5. 会社のご紹介 仲間募集のお知らせ
  6. 6. 日本仮想化技術株式会社は • 仮想化技術のエキスパート集団 • 進取の精神 • 豊富な検証機材で新技術を追求 • 自由な雰囲気の職場 6
  7. 7. 一緒に頑張ってくれる仲間を募集中 • サーバー、ネットワークエンジニア – 新卒からキャリアアップしたい経験者まで – クラウド技術、自動化技術に興味がある人 – DevOpsソリューション開発をやっています – リモートワークもOK(現在1名、北海道在住) • コンサルタント – 5G、MECなど次世代通信ソリューションに興味の ある方 • インターン – 学生(春夏)はもちろん、社会人も可 – 遠方の方もOK 7
  8. 8. 主な業務内容 • 仮想化技術を活かしたコンサルティング – オンプレからクラウドまで – DevOps案件のOpsとして運用・IaC開発 • 新技術のコンサルティング・PoC – 新しい仮想化技術に関する調査 – PoCによる実証検証 – 5G、MEC、GPU、コンテナなど幅広く 8
  9. 9. どんなオフィス? • 渋谷駅より徒歩5分 – 現在は全員在宅勤務 • 全員がゆったりデスクとアーロンチェア – 在宅勤務者にもアーロンチェア購入 9
  10. 10. オフィスは渋谷駅徒歩5分 10 日本仮想化技術 オフィス ハ チ 公 渋谷駅東口 交差点 渋 谷 駅 ヒカリエの中を通ると 雨の日にあまり濡れません 渋 谷 郵 便 局 スクランブル 交差点 渋谷ストリーム (Google) スクランブル スクエア
  11. 11. 優れた環境が優れた成果を生む 渋谷駅徒歩5分の新オフィス 幅140cmのゆったりデスクとアーロンチェア MacBook Pro/Airと4Kモニタが標準 キーボード・マウスも自由 クラウドからDC、オンプレまで 充実の検証環境 最新機材で作業11
  12. 12. 充実の福利厚生 • マッサージチェア • 充実のフリードリンクコーナー – お茶、ネスプレッソなど多種多様に取り揃え • 誕生日はケーキでお祝い • 雑誌年間購読制度 – 何でも好きな雑誌を1誌年間購読 • 書籍購入支援制度 – 技術書の購入は無制限(当然) – 好きな書籍(漫画も可)を1万円/年購入 12
  13. 13. お問い合わせ先 メールにて recruit@VirtualTech.jp 履歴書、職務経歴書をご用意ください ご紹介も是非。きっと何かいいことあります。 13
  14. 14. 本日のアジェンダ 1. Kubernetes (K8s )とは 2. K8sの導入(Minikubeを使って) 3. K8sを動かしてみる 4. K8sの仕組みを少し探ってみる • コンテナオーケストレーションツールであるKubernetes (K8s) の使用方法を講師なりに勉強して仕組みを理解できるように 解説します • 各種情報を参照すれば(私でも)分かるレベルの説明は省略 しています • 説明自体もかなりザックリです • 昨年12月に弊社から出した『Kubernetes雑にまとめてみた 2020年8月版』も合わせてご参照ください – https://www.slideshare.net/VirtualTech-JP/kubernetes-20208 14
  15. 15. Kubernetes (K8s)とは 15
  16. 16. Kubernetes(K8s)とは • 『Kubernetes (K8s)は、デプロイやスケーリ ングを自動化したり、コンテナ化されたアプ リケーションを管理したりするための、オー プンソースのシステムです。』 • デプロイ:アプリケーションを配備すること。 ここではアプリケーションが実行されるコン テナを動作させること • スケーリング:複数コンテナを実行すること 16 ※ https://kubernetes.io/ja/
  17. 17. Podとは • Podは、アプリケーションのコンテナ(いくつか の場合においては複数のコンテナ)、ストレー ジリソース、ユニークなネットワークIP、および コンテナの実行方法を管理するオプションを カプセル化します。 • Podはデプロイメントの単位、すなわち Kubernetesのアプリケーションの単一インスタ ンス で、単一のコンテナ または密結合なリ ソースを共有する少数のコンテナで構成され る場合があります。 17 ※ https://kubernetes.io/ja/docs/concepts/workloads/pods/pod-overview/
  18. 18. なぜK8s? • コンテナオーケストレーション – 複数のコンテナ(その他ネットワークなど)を一元 管理したい • 自動回復 – デプロイしたコンテナが障害などで停止した時に コンテナを再実行する • CI/CD – 素早くデプロイできるコンテナ環境 • マイクロサービス化 – APIのアクセス先をコンテナで構築 18
  19. 19. K8sの導入(Minikubeを使って) 19
  20. 20. K8sを使うには A) クラウド上のサービスを使う – 実は一番現実的? – 色々なサービスがある B) 自分で構築する – 仕組みをしっかりと理解したいならコレ – 思ったよりも情報が少ない C) Minukubeを使う – コマンド練習用 – VirtualBoxに入れたり、Katacoda使ったり • Katacoda:ブラウザで試せる学習環境 20
  21. 21. VirtualBoxでMinikubeを動かす • 公式ドキュメントの手順に従って導入 – https://kubernetes.io/ja/docs/tasks/tools/install-minikube/ • 使用環境:macOS Catalina(10.15) – 標準シェルがzshなのでプロンプトは% – MinikubeはWindows、Linuxでも導入可能ですが、手順や環境、本資料 での記述が一部異なりますのでご注意ください 1. VirtualBoxのインストール – https://www.virtualbox.org/ 2. Homebrewのインストール – https://brew.sh/index_ja 3. Minikubeのインストール – % brew install minikube – Minikubeとkubectlコマンドがインストールされる 21
  22. 22. Minikubeの起動 1. minikubeコマンドで起動 – Podを実行するハイパーバイザーにVirtualBox を指定 – % minikube start --driver=virtualbox 2. 起動完了までに時間がかかる – ISOイメージやKubernetesもダウンロード – VMが作成され、Kubernetesをインストール 3. 起動完了したら状態を確認 – % minikube status 22 ※--driverオプションは以前の--vm-driverオプション
  23. 23. Minikubeのインストールと起動 23
  24. 24. K8sを動かしてみる 24
  25. 25. ダッシュボードを使う • WebブラウザでKubernetesの状態確認や 操作が行えます • コマンドを実行するとWebブラウザで自動 的にアクセス – % minikube dashboard & 25
  26. 26. ダッシュボード画面 26
  27. 27. 簡単なPodを起動 1. Podの起動 – % kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10 2. Podをアクセス可能にする – % kubectl expose deployment hello-minikube --type=NodePort --port=8080 3. アクセス用のURLを取得する – % minikube service hello-minikube --url 4. 取得したURLでPodにアクセス 27
  28. 28. Podにアクセス 28
  29. 29. Kubernetesオブジェクト • Deployment – Pod(≒コンテナ)の状態を宣言したオブジェクト – Deploymentをcreateしただけでは外部からは アクセスできない(内部からはアクセスできる) • Service – Podのアプリケーションを公開するオブジェクト 29
  30. 30. Kubernetesオブジェクト 基本オブジェクト • Pod • Service • Volume • Namespace 上位オブジェクト • Deployment • DaemonSet • StatefulSet • ReplicaSet • Job 30 ※上位オブジェクトの説明:コントローラーに依存して基本オブジェクトを構築し、 追加の機能と便利な機能を提供する高レベルの抽象化も含まれています https://kubernetes.io/ja/docs/concepts/#kubernetes-objects
  31. 31. サービスの情報取得 • サービス一覧を取得 – % kubectl get svc • サービス詳細を取得 – % kubectl describe svc • サービスのエンドポイントを取得 – % kubectl get ep 31
  32. 32. スケールさせる • Podに含まれる実行コンテナの数を増やす – % kubectl scale deployment hello-minikube --replicas=2 – ダッシュボードからも実行可能 • Podの状態を確認 – % kubectl get pods -o wide – % kubectl describe pods • コンテナ数を減らして、確認 – % kubectl scale deployment hello-minikube --replicas=1 – % kubectl get pods -o wide 32
  33. 33. 仕組みを少し探ってみる 33
  34. 34. MinikubeのVMにSSH • minikubeコマンドでログイン可能 – % minikube ssh • IPアドレスを調べてログインする場合 – % minikube ip – % ssh docker@IPアドレス – パスワードは tcuser 34
  35. 35. Minikubeのネットワークは? • ホストからVMへの接続:VirtualBoxのホス トオンリーネットワークを使用 – VM初回起動時に作成される – ホストが192.168.99.1、VMが192.168.99.100〜 • VMからコンテナへの接続:Dockerの仮想 ブリッジ – 仮想ブリッジdocker0は172.17.0.1 – コンテナは172.17.0.2〜 35
  36. 36. Kubernetesのネットワーク • NodePortで起動した場合のiptables設定 – % kubectl expose deployment hello-minikube -- type=NodePort --port=8080 – iptables-saveの前後で追加されるルールから抜粋 1. -A PREROUTING -j KUBE-SERVICES 2. -A KUBE-SERVICES --dst-type LOCAL -j KUBE- NODEPORTS 3. -A KUBE-NODEPORTS -p tcp --dport 31529 -j KUBE- SVC-HELLOMINIKUBE 4. -A KUBE-SVC-HELLOMINIKUBE -j KUBE-SEP- HELLOMINIKUBE 5. -A KUBE-SEP-HELLOMINIKUBE -p tcp -j DNAT --to- destination 172.17.0.2:8080 36 ※HELLOMINIKUBEは実際にはユニークID
  37. 37. Dockerのネットワーク構成例 37 Dockerコンテナ eth0 eth0 docker0 veth veth Dockerコンテナ eth0 仮想的に直結 ブリッジ接続 NAPT接続(IPマスカレードやポート転送) 外部 参考 ※「今さら聞けない人のためのDocker超入門」より
  38. 38. Minikubeのネットワーク構成図 38 ホスト VM vboxnet1ブラウザ docker0 Dockerコンテナ eth0 eth1 192.168.99.1 192.168.99.100:31529 DNAT 172.17.0.1 172.17.0.2:8080
  39. 39. スケールさせると iptablesの設定が変更され、Pod内の複数コンテナに 振り分けされるようになる 1. -A KUBE-SVC-HELLOMINIKUBE --mode random --probability 0.50000000000 -j KUBE- SEP-HELLOMINIKUBE2 2. -A KUBE-SVC-HELLOMINIKUBE -j KUBE- SEP-HELLOMINIKUBE4 3. -A KUBE-SEP-HELLOMINIKUBE2 -p tcp -j DNAT --to-destination 172.17.0.2:8080 4. -A KUBE-SEP-HELLOMINIKUBE4 -p tcp -j DNAT --to-destination 172.17.0.4:8080 39 ※HELLOMINIKUBEは実際にはユニークID
  40. 40. Minikubeのネットワーク構成図 40 ホスト VM vboxnet1ブラウザ docker0 Dockerコンテナ eth0 Dockerコンテナ eth0 eth1 192.168.99.1 192.168.99.100:31529 DNAT 172.17.0.1 172.17.0.4:8080172.17.0.2:8080 アクセスを振り分け
  41. 41. 今後の課題 • 環境を色々と変えてみる – Kubernetesのバージョンの変更 – ネットワークの変更 – コンテナランタイムの変更 – リソース量(CPU・メモリ)の変更 • アプリケーションの実行 • 使用していない機能の利用 – ボリューム • 複数ノードの構成 – Minikubeではできない – K3sとかMicroK8sとか 41
  42. 42. 個人的な課題 • Raspberry Pi 4クラスタで動かす 42 Raspberry Pi 4クラスタ 4GB×1+8GB×3 LED冷却ファン装備
  43. 43. DevOpSaaSに向けて こういうことをしたいので 誰か一緒にやって欲しいお気持ち 43
  44. 44. DevOpsの想定される進め方 1. ToBeモデルの構築 2. 現時点での課題の抽出 3. 優先順位の策定 4. PoC環境の構築と運用 5. PoC環境からのフィードバックと改善 6. 小規模社内展開 44 自社だけではスピード感のある DevOps推進は困難
  45. 45. DevOpsを始める時に悩むこと • どのインフラを使うの? • どのリポジトリを使うの? • 情報共有方法は? 45
  46. 46. DevOpSaaSが解決する課題 標準リファレンスモデル提供によるDevOpsの加速 • 各種ツールの組み合わせテスト済みパッケージの提供 – 標準機能はあらかじめ設定済み • 各種ツールのバージョンアップ追従 – 既存開発・運用環境からの移行支援 • 独自機能の提供 – 可視化ツール、既存ツールのカスタマイズなど • 開発運用担当者の教育・サポート – 標準ドキュメント、教育コースの提供 • サンプルの提供 – 自動化・テストスクリプトのサンプル
  47. 47. 提供される主な機能 • チケット管理 • ソースコード管理 • テスト自動化 • デプロイ自動化 • プロジェクトマネジメント • コミュニケーション 47
  48. 48. サポートされる環境 • 開発:GitHub/GitLab/Jenkins/Redmine – CircleCI • 構成自動化:Ansible – CloudFormation • インフラ:Kubernetes – AWS EKS • 運用監視:Prometheus – DataDog • テスト自動化:Serverspec/Selenium 48※実案件で実績あり
  49. 49. 改めて大募集 • 一緒にDevOpsにチャレンジする企業 – 一緒にカイゼンしていきませんか? • 一緒にDevOpsにチャレンジするエンジニア – 一緒に成長していきませんか? – 沢山の開発者を支えるお仕事です – マジで人手が足りてません – このままだと掛け声倒れになりかねない 49
  50. 50. ありがとうございました 50

×