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

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