Advertisement

今さら聞けない人のためのK8s超入門 Big Sur対応版

VirtualTech Japan Inc./Begi.net Inc.
Sep. 22, 2021
Advertisement

More Related Content

Slideshows for you(20)

Similar to 今さら聞けない人のためのK8s超入門 Big Sur対応版(20)

Advertisement

More from VirtualTech Japan Inc./Begi.net Inc.(18)

Recently uploaded(20)

Advertisement

今さら聞けない人のためのK8s超入門 Big Sur対応版

  1. 今さら聞けない人のための K8s超入門 Big Sur対応版 日本仮想化技術株式会社 代表取締役社長兼CEO 宮原 徹(@tmiyahar) http://VirtualTech.jp
  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. 日本仮想化技術株式会社 概要 • 社名:日本仮想化技術株式会社 – 英語名:VirtualTech Japan Inc. – 略称:日本仮想化技術/VTJ • 設立:2006年12月 • 資本金:3,000万円 • 売上高:2億6499万円(2021年7月期) – 2020年7月期は2億1千万円(+25%成長) • 本社:東京都渋谷区渋谷1-8-1 • 取締役:宮原 徹(代表取締役社長兼CEO) • 伊藤 宏通(取締役CTO) • スタッフ:9名(うち、7名が仮想化技術専門エンジニアです) • URL:http://VirtualTech.jp/ • 仮想化技術に関する研究および開発 – 仮想化技術に関する各種調査 – 仮想化技術を導入したシステムの構築・運用サポート – OpenStackの導入支援・新規機能開発・運用サポート – 5G活用のためのインフラ・サービス研究開発 – 自動化・DevOps支援 ベンダーニュートラルな 独立系仮想化技術の エキスパート集団 3
  4. 売上推移 4 ¥0 ¥50,000,000 ¥100,000,000 ¥150,000,000 ¥200,000,000 ¥250,000,000 ¥300,000,000 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ここ3年で急成長中
  5. 会社のご紹介 仲間募集のお知らせ エンジニアが幸せになれる 会社を考える
  6. 日本仮想化技術株式会社は • 仮想化技術のエキスパート集団 • 進取の精神 • 豊富な検証機材で新技術を追求 • 自由な雰囲気の職場 6
  7. エンジニアの幸せとは? • 給料が沢山もらえる • 仕事が面白い • 仕事場の環境が良い • 新しい技術に触れられる • 残業が少ない • 健康的な生活がおくれる 7 各人によって価値観はそれぞれ
  8. 会社としてできること • 新しい技術に積極的に取り組む – そもそも「仮想化技術」が新しい技術だった • できるだけ給与を多く – 年間昇給率5%目標 – 決算賞与による利益分配を厚く • 仕事のしやすい環境を提供 – 可能な限り最高の環境を提供 – 制約はできるだけ少なく 8
  9. 経営方針 • 大きい会社が手を出せない新しいことや違 うやり方にどんどん挑戦する • 新しくて面白いことをやるために – 仕事そこそこ(遊ぶための時間の確保) – 売上そこそこ(売上至上主義にならない) – 利益トントン(会社が潰れない程度でOK) 9
  10. 新しい技術への取り組み • 通信キャリアと共同R&Dが事業の主な柱 • 次期インフラのための調査研究 – コンテナ – GPU – 5G • 次期サービスのための基礎技術 – VR/AR/xR – 映像配信 10 このあたりは当然のように 業務として取り組んでいます このあたりは趣味だったが 業務として扱うようになってきた
  11. できるだけ給与を多く 従来の報酬方針から転換中 • 従来:月々の給与をほどほどに抑えつつ、 最終的な決算の賞与を手厚く • 課題:会社としての売上利益が増えてきた ため、給与と決算賞与がアンバランスに・・ • 今後:月々の給与を厚くしつつ、決算賞与 もしっかり支給 11
  12. 仕事のしやすい環境 2020年3月から完全在宅勤務に移行 • 在宅勤務手当て2万円支給 – 通勤費+オフィス福利厚生費相当 • 自宅環境整備費用無制限 – アーロンチェア支給(デカくて置けない、と断られ ることも・・) – 液晶モニター支給(27インチ以上・4K) – M1 Mac支給(追加配備開始) • その他、業務に必要なもの・書籍はもちろん、 面白そうなものも購入無制限(に近い) 12
  13. 面白いものをみんなで試す制度 面白いガジェットなどを経費で購入して希望 者が試す制度 • Oculus Quest 2 • CO2測定器 • スマートフォン/タブレット 13 常に好奇心を持つことが大事
  14. テレワークも可能 263956 私たちはテレワー クを実施し、 働き方改革、危機管理を実現します。 令和3年7月14日 日本仮想化技術株式会社 -我が社のテレワー クルー ル - 遠方の人材にも勤務してもらえるように 感染症(コロナウイルス、インフルエンザ等)の拡大時は原則テレワー クとします 地震等の災害時に社員の安全を考慮しつつ、事業継続を実施します -メガイベント開催時のテレワー クルー ル - 東京2020大会等の期間中はテレワー クや時差出勤を積極的に実施します • 「テレワーク東京ルー ル」実践企業 • 社員9人中、北海道か ら2名がテレワーク • 完全テレワークを 2020年3月より実践中 • 長崎サテライトオフィ ス勤務希望者募集中 14
  15. 今募集している仕事 • R&D系の仕事 – サーバー、ネットワーク等のインフラ構築・運 用経験者 – K8sを活用したコンテナインフラ – GPUなどを活用したAIインフラ – SDNを活用したネットワークインフラ • DevOpsの仕事 – Opsチームとして開発サポート&本番運用 – アジャイル開発チームの立ち上げ 15
  16. お問い合わせ先 メールにて recruit@VirtualTech.jp 履歴書、職務経歴書をご用意ください ご紹介も是非。きっと何かいいことあります。 16
  17. 本日のアジェンダ 1. Kubernetes (K8s )とは 2. K8sの導入(Minikubeを使って) 3. K8sを動かしてみる 4. K8sの仕組みを少し探ってみる • コンテナオーケストレーションツールであるKubernetes (K8s)を 講師なりに勉強して仕組みを理解できるように解説します • 各種情報を参照すれば(私でも)分かるレベルの説明は省略 しています • 説明自体もかなりザックリです • 8月に弊社から出した『Kubernetes雑にまとめてみた 2020年8 月版』やブログも合わせてご参照ください – https://www.slideshare.net/VirtualTech-JP/kubernetes-20208 – https://tech.virtualtech.jp/ 17
  18. Kubernetes (K8s)とは 18
  19. Kubernetes(K8s)とは • 『Kubernetes (K8s)は、デプロイやスケーリ ングを自動化したり、コンテナ化されたアプ リケーションを管理したりするための、オー プンソースのシステムです。』 • デプロイ:アプリケーションを配備すること。 ここではアプリケーションが実行されるコン テナを動作させること • スケーリング:複数コンテナを実行すること 19 ※ https://kubernetes.io/ja/
  20. Podとは • Podは、アプリケーションのコンテナ(いくつか の場合においては複数のコンテナ)、ストレー ジリソース、ユニークなネットワークIP、および コンテナの実行方法を管理するオプションを カプセル化します。 • Podはデプロイメントの単位、すなわち Kubernetesのアプリケーションの単一インスタ ンス で、単一のコンテナ または密結合なリ ソースを共有する少数のコンテナで構成され る場合があります。 20 ※ https://kubernetes.io/ja/docs/concepts/workloads/pods/pod-overview/
  21. なぜK8s? • コンテナオーケストレーション – 複数のコンテナ(その他ネットワークなど)を一元 管理したい • 自動回復 – デプロイしたコンテナが障害などで停止した時に コンテナを再実行する • CI/CD – 素早くデプロイできるコンテナ環境 • マイクロサービス化 – APIのアクセス先をコンテナで構築 21
  22. K8sの導入(Minikubeを使って) 22
  23. K8sを使うには A) クラウド上のサービスを使う – 実は一番現実的? – 色々なサービスがある B) 自分で構築する – 仕組みをしっかりと理解したいならコレ – 思ったよりも情報が少ない C) Minikubeを使う – コマンド練習用 – VirtualBoxに入れたり、Katacoda使ったり • Katacoda:ブラウザで試せる学習環境 23
  24. VirtualBoxでMinikubeを動かす • 公式ドキュメントの手順に従って導入 – https://kubernetes.io/ja/docs/tasks/tools/install-minikube/ • 使用環境:macOS Big Sur(11.2.1) – 標準シェルがzshなのでプロンプトは% – MinikubeはWindows、Linuxでも導入可能ですが、手順や環境、本資料 での記述が一部異なりますのでご注意ください 1. VirtualBoxのインストール – https://www.virtualbox.org/ 2. Homebrewのインストール – https://brew.sh/index_ja 3. Minikubeのインストール – % brew install minikube – Minikubeとkubectlコマンドがインストールされる 24
  25. Minikubeの起動 1. minikubeコマンドで起動 – Podを実行するハイパーバイザーにVirtualBox を指定 – % minikube start --driver=virtualbox 2. 起動完了までに時間がかかる – ISOイメージやKubernetesもダウンロード – VMが作成され、Kubernetesをインストール 3. 起動完了したら状態を確認 – % minikube status 25 ※--driverオプションは以前の--vm-driverオプション
  26. Minikubeのインストールと起動 26 --driverオプションを省略したが、 VirtualBoxしかないとvirtualboxが選ばれた。 Parallelsが入っているとparallelsが選択された
  27. K8sを動かしてみる 27
  28. ダッシュボードを使う • WebブラウザでKubernetesの状態確認や 操作が行えます • コマンドを実行するとWebブラウザで自動 的にアクセス – % minikube dashboard & 28
  29. ダッシュボード画面 29
  30. 簡単な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にアクセス – 例:http://192.168.99.106:32242 30
  31. Podにアクセス 31
  32. Kubernetesオブジェクト • Deployment – Pod(≒コンテナ)の状態を宣言したオブジェクト – Deploymentをcreateしただけでは外部からは アクセスできない(内部からはアクセスできる) • Service – Podのアプリケーションを外部にサービスとし て公開するオブジェクト 32
  33. Kubernetesオブジェクト 基本オブジェクト • Pod • Service • Volume • Namespace 上位オブジェクト • Deployment • DaemonSet • StatefulSet • ReplicaSet • Job 33 上位オブジェクトの説明:コントローラーに依存して基本オブジェクトを構築し、 追加の機能と便利な機能を提供する高レベルの抽象化も含まれています https://kubernetes.io/ja/docs/concepts/#kubernetes-objects
  34. サービスの情報取得 • サービス一覧を取得 – % kubectl get svc • サービス詳細を取得 – % kubectl describe svc • サービスのエンドポイントを取得 – % kubectl get ep 34 参考
  35. スケールさせる • Podの数を増やす – % kubectl scale deployment hello-minikube --replicas=2 – ダッシュボードからも実行可能 • Podの状態を確認 – % kubectl get pods -o wide – % kubectl describe pods • Podの数を減らして、確認 – % kubectl scale deployment hello-minikube --replicas=1 – % kubectl get pods -o wide 35
  36. スケールさせた状態 36 ポッドが2つ ここからスケール させることもできる
  37. 仕組みを少し探ってみる 37
  38. MinikubeのVMにSSH • minikubeコマンドでログイン可能 – % minikube ssh • IPアドレスを調べてログインする場合 – % minikube ip – % ssh docker@IPアドレス – パスワードは tcuser 38
  39. Minikubeのネットワークは? • ホストからVMへの接続:VirtualBoxのホス トオンリーネットワークを使用 – VM初回起動時に作成される – ホストが192.168.99.1、VMが192.168.99.100〜 • VMからコンテナへの接続:Dockerの仮想 ブリッジ – 仮想ブリッジdocker0は172.l7.0.1 – コンテナは172.17.0.x 39 参考
  40. Minikubeのネットワーク構成図 40 ホスト VM vboxnet1 ブラウザ docker0 Dockerコンテナ eth0 eth1 192.168.99.1 192.168.99.106:32242 DNAT 172.17.0.1 172.17.0.5:8080
  41. Dockerのネットワーク構成例 41 Dockerコンテナ eth0 eth0 docker0 veth veth Dockerコンテナ eth0 仮想的に直結 ブリッジ接続 NAPT接続(IPマスカレードやポート転送) 外部 参考 ※「今さら聞けない人のためのDocker超入門」より
  42. NodePortのiptables設定 • 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 32242 -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.5:8080 42 ※HELLOMINIKUBEは実際にはユニークID
  43. スケールした場合 43 ホスト VM vboxnet1 ブラウザ docker0 Dockerコンテナ eth0 Dockerコンテナ eth0 eth1 192.168.99.1 192.168.99.106:32242 DNAT 172.17.0.1 172.17.0.6:8080 172.17.0.5:8080 アクセスを振り分け
  44. スケール時のiptables設定 iptablesの設定が変更され、Pod内の複数コンテナに 振り分けされるようになる 1. -A KUBE-SVC-HELLOMINIKUBE --mode random --probability 0.50000000000 -j KUBE- SEP-HELLOMINIKUBE5 2. -A KUBE-SVC-HELLOMINIKUBE -j KUBE- SEP-HELLOMINIKUBE6 3. -A KUBE-SEP-HELLOMINIKUBE5 -p tcp -j DNAT --to-destination 172.17.0.5:8080 4. -A KUBE-SEP-HELLOMINIKUBE6 -p tcp -j DNAT --to-destination 172.17.0.6:8080 44 ※HELLOMINIKUBExは実際にはユニークID
  45. Minikubeの停止と削除 • K8sがバージョンアップした際 – 起動時に警告が出る – HomeBrew側のminikubeのバージョンアップ – Minikubeそのもののバージョンアップ – なんか動作が微妙な感じがするので、クリーンインス トールした方が良さそう 1. Minikubeのノード停止 – % minikube stop 2. MinikubeのノードVMの削除 – % minikube delete 45
  46. HomeBrewでMinikubeを削除 minikube stopとdeleteをした状態で • インストールされているものの確認 – % brew list • インストールされているものの削除例 – % brew uninstall kubernetes-cli minikube • キャッシュのクリーンナップ – % brew cleanup --prune=all 46
  47. 今後の課題 • 環境を色々と変えてみる – minikube startのオプションで変更可能 – Kubernetesのバージョンの変更 – ネットワークの変更(CNI) – コンテナランタイムの変更(--driver) – リソース量(CPU・メモリ)の変更 • アプリケーションの実行 – 公式のドキュメントにもあります • 使用していない機能の利用 – ボリューム • 複数ノードの構成 – Minikubeでもできる(Minikube 1.10.1以上) – K3sとかMicroK8sとか 47
  48. マルチノードを試す • 公式ドキュメントの手順に従って – https://minikube.sigs.k8s.io/docs/tutorials/multi_node/ • 動かすのは結構簡単 • 少し制限 – ダッシュボード負荷 – SSHできない 48
  49. 個人的な課題 • Raspberry Pi 4クラスタで動かす 49 Raspberry Pi 4クラスタ 4GB×1+8GB×3 LED冷却ファン装備
  50. Raspberry Pi 4でやってみた • Raspberry Pi OSをインストール • ARM用Dockerをインストール • Minikubeをインストール • 一応動いた、っぽい? • Macで動作している状況と勝手が違う Raspberry Piで動かすには研究が必要 50
  51. ありがとうございました 51
Advertisement