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

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