Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
telepresence handson
Search
@ジュジュ
August 08, 2019
Technology
2
4.7k
telepresence handson
@ジュジュ
August 08, 2019
Tweet
Share
More Decks by @ジュジュ
See All by @ジュジュ
チーム分割においていかれたアラートをチームで責任を持てる形に再設計した
juju62q
0
110
ボトムアップでSLOを導入 2年半運用して分かった失敗と変化
juju62q
2
940
Firecracker Snapshottingを調べてみた
juju62q
1
520
SLOを活用した技術的改善
juju62q
10
8.2k
IAM Role for Pods and Instance Meta Data Service
juju62q
1
1.4k
Wanna Use Vitess in Orientation
juju62q
6
1.2k
machine learning with rancher and K8s on prem
juju62q
5
430
docker-handson-for-researcher
juju62q
3
300
Getting Started to CRIU
juju62q
0
100
Other Decks in Technology
See All in Technology
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
370
生成AIのガバナンスの全体像と現実解
fnifni
1
180
多領域インシデントマネジメントへの挑戦:ハードウェアとソフトウェアの融合が生む課題/Challenge to multidisciplinary incident management: Issues created by the fusion of hardware and software
bitkey
PRO
2
100
スタートアップで取り組んでいるAzureとMicrosoft 365のセキュリティ対策/How to Improve Azure and Microsoft 365 Security at Startup
yuj1osm
0
210
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
4
550
マイクロサービスにおける容易なトランザクション管理に向けて
scalar
0
110
なぜCodeceptJSを選んだか
goataka
0
160
re:Invent 2024 Innovation Talks(NET201)で語られた大切なこと
shotashiratori
0
300
ハイテク休憩
sat
PRO
2
140
ガバメントクラウドのセキュリティ対策事例について
fujisawaryohei
0
530
MLOps の現場から
asei
6
630
podman_update_2024-12
orimanabu
1
260
Featured
See All Featured
RailsConf 2023
tenderlove
29
940
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Faster Mobile Websites
deanohume
305
30k
Six Lessons from altMBA
skipperchong
27
3.5k
A Tale of Four Properties
chriscoyier
157
23k
Documentation Writing (for coders)
carmenintech
66
4.5k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
VelocityConf: Rendering Performance Case Studies
addyosmani
326
24k
It's Worth the Effort
3n
183
28k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Adopting Sorbet at Scale
ufuk
73
9.1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
1.9k
Transcript
Telepresenceハンズオン 2019/08/08 岡野兼也(@Juju_62q)
Telepresenceハンズオンにようこそ 2 2
Okano Kenya / @Juju_62q Belonging: - “CyberAgent, Inc” Team: -
“OpenSaaS Studio” - “Simply Pay” Role: - “Site Reliability Engineer” - “EKS Cluster Admin” - “ほうれん草エバンジェリスト” Interest: - “CloudNative” - “Developer Experience” 3 3
アンケート 4 4
コンテナ使っている人? 5 5
Kubernetes使っている人? 6 6
マイクロサービスやってる人? 7 7
開発めっちゃ楽になった人? 8 8
正直しんどい人? 9 9
今日はそんな悩みを少しでも 解決できたらと思ってます! 10 10
本日の予定 • Telepresenceってなんですか? • K8sでの開発はなぜしんどい? • 開発手法から見るTelepresence • How to
work Telepresence? • 試してわかるTelepresence • まとめ 11 11
本日の予定 • Telepresenceってなんですか? • K8sでの開発はなぜしんどい? • 開発手法から見るTelepresence • How to
work Telepresence? • 試してわかるTelepresence • まとめ 12 12
Telepresenceってなんですか? 13 13
Telepresenceってなんですか? 14 14 • CNCFのSandboxプロジェクト • Pythonで作られたOSS • Kubernetes上で”楽に”マイクロサービスを開発するため のツール
• 環境の差分を極力減らすためのツール
具体的にはなんですか? 15 15 あなたの開発機とKubernetesをいい感じに接続します
具体的にはなんですか? 16 16 ローカルマシンで動作しているものをKubernetesの Deploymentとして動かせます
つまり! 17 17
開発機をK8sクラスタの一部と見立てることで 環境差分の影響を減らし,簡単に開発をするためのツール (正確な物言いではありません) 18 18
本日の予定 • Telepresenceってなんですか? • K8sでの開発はなぜしんどい? • 開発手法から見るTelepresence • How to
work Telepresence? • 試してわかるTelepresence • まとめ 19 19
Microservice, K8sをなぜ使う? 20 20 • 開発速度の向上 • dev, stg, prdでの環境一致
• 抽象化された基盤利用での可搬性の担保 • 柔軟なスケール • Declarativeなリソース作成
Microservice, K8sをなぜ使う? 21 21 • 開発速度の向上 • dev, stg, prdでの環境一致
• 抽象化された基盤利用での可搬性の担保 • 柔軟なスケール • Declarativeなリソース作成 Operatorが嬉しい
Microservice, K8sをなぜ使う? 22 22 • 開発速度の向上 • dev, stg, prdでの環境一致
• 抽象化された基盤利用での可搬性の担保 • 柔軟なスケール • Declarativeなリソース作成 Developerが嬉しい…?
開発速度について 23 23
K8sで動くアプリの開発サイクル 24 24 ① コンテナで動く アプリケーションを開発 ② CIがコンテナレジストリに
イメージをPush ③ K8sのyamlを編集 (自動化してる場合もある) ④ 更新したyamlをapply
VMで動くアプリの開発サイクル 25 25 ① アプリケーションを開発 ② CDやsshによるデプロイ
VMで動くアプリの開発サイクル 26 26 ① アプリケーションを開発 ② CDやsshによるデプロイ アプリケーションエンジニアからみた 試行錯誤の速度の低下
さらに? 27 27
GitOps(CIOps含む) 28 28 • weaveworksが提唱した,K8sの運用,管理手法 • kubectlを人間が使わず,ツールで変更を行う • PRベースでクラスタの状態を変更する •
GitリポジトリをSingle Source of Truthとして扱う
GitOpsでの開発サイクル 29 29 ① コンテナで動く アプリケーションを開発 ② CIがコンテナレジストリに
イメージをPush ③ K8sのyamlを編集 (自動化してる場合もある) ④ 変更をPRに出す
GitOpsでの開発サイクル 30 30 ① コンテナで動く アプリケーションを開発 ② CIがコンテナレジストリに
イメージをPush ③ K8sのyamlを編集 (自動化してる場合もある) ④ 変更をPRに出す • ちょっと新しいイメージで試したいだけ なのに… • サービス間の疎通確認をサクッと とりたいんだけど • 試行錯誤の記録が全部Gitに残っちゃう
K8sの導入で? 31 31 • やらなきゃならないことが増えた • 試したいだけなのに自分以外が関わることが増えた 開発のサイクルの速度低下…?
環境一致について 32 32
コンテナ,K8sの導入で? 33 33 • 同一イメージをdev, stg, prdで同じように使うように • 12 Factor
Appsやステートレスなアプリを意識, どこでも同じように走り出すアプリケーション • イミュータブルインフラストラクチャによるわかりやすさ
Microserviceを取り巻く開発環境 34 34 • サービスをスケールさせることが大事 • 運用,開発コストを下げていく • パブリッククラウドのマネージドサービスをフル活用 •
コンテナにより動作環境の差を保証…?
Microserviceを取り巻く開発環境 35 35 • サービスをスケールさせることが大事 • 運用,開発コストを下げていく • パブリッククラウドのマネージドサービスをフル活用 •
コンテナにより動作環境の差を保証…? 結局ここに強く依存しているのでlocalに閉じた開発とクラ ウドで動かした時の挙動は必ずしも一致しない
環境一致,本当にできてる? 36 36 • マネージドサービスの利活用によって生まれる オンプレと実環境の違い • ローカルでそれっぽいものを動かすツールは確かにある ◦ LocalStack
◦ datastore-emulator ◦ microk8s, kind
環境一致,本当にできてる? 37 37 • localと実際の環境の違い ◦ 実際にはK8sで動かすが開発はdocker-compose ◦ 実際にはCloudSQLやAuroraだけどMySQL •
さらに,データストアやエミュレータを使うと開発機が エフェメラルに保てない • 開発機で環境変数管理するのアンセキュア
従来の開発での問題点まとめ 38 38 • 開発速度 ◦ K8sやDockerの利用でアプリ開発者の責務は 大きくなっている ◦ ちょっと試したい時にもGitリポジトリの書き換え?
• 環境一致 ◦ マネージド環境の利用により生まれる開発機と実際に 動作する環境の差異 ◦ 開発機のストレージに動作が依存している場合も
その他の問題点 39 39 • マイクロサービスの開発をする際に複数のアプリを起動 しなければならず煩わしい • localstackなどを起動すると開発機のリソースを めちゃくちゃくう •
開発機唸りがち(特にSimply PayではKotlinを採用してい るせいでひどく唸る)
本日の予定 • Telepresenceってなんですか? • K8sでの開発はなぜしんどい? • 開発手法から見るTelepresence • How to
work Telepresence? • 試してわかるTelepresence • まとめ 40 40
Telepresenceは これらの問題を緩和しうるツールです 41 41
開発速度について 42 42
GitOpsでの開発サイクル 43 43 ① コンテナで動く アプリケーションを開発 ② CIがコンテナレジストリに
イメージをPush ③ K8sのyamlを編集 (自動化してる場合もある) ④ 変更をPRに出す
Telepresenceでできること 44 44 ローカルマシンで動かしているコンテナを 任意の場所にあるK8sのPodとして動かせます
Telepresenceを使った開発サイクル 45 45 ① コンテナで動く アプリケーションを開発 ② ローカルマシンに
コンテナがあればいい ③ イメージの差し替えを せずにクラスタで動作確認 ④ Telepresenceコマンド で動作確認
Telepresenceを使った開発サイクル 46 46 ① コンテナで動く アプリケーションを開発 ② ローカルマシンに
コンテナがあればいい ③ イメージの差し替えを せずにクラスタで動作確認 ④ Telepresenceコマンド で動作確認 telepresence \ --swap-deployment ${deployment_name} \ --docker-run --rm \ -p ${container_port}:${local_port} \ ${container_image}
環境一致について 47 47
Telepresenceでできること 48 48 あなたの開発機とKubernetesをいい感じに接続します
アプリケーションを考える 49 49
アプリケーションを考える 50 50
Telepresenceを使ってみる 51 51
クラウドの資源を使いながら 開発機の変更を反映可能 52 52
Telepresenceの恩恵 53 53 • K8sのSecretリソースに定義のままアクセス可能 • 開発機で走るコンテナはあくまで1つだけ • マイクロサービスの前後関係を含むE2Eテストが容易 •
開発機でデータを持つ必要がないのでエフェメラルに 保てる
本日の予定 • Telepresenceってなんですか? • K8sでの開発はなぜしんどい? • 開発手法から見るTelepresence • How to
work Telepresence? • 試してわかるTelepresence • まとめ 54 54
Telepresenceの基本的な挙動 55 55 App 1 App 2
Telepresenceの基本的な挙動 56 56 App 1 App 2 App 2の挙動を確かめるぞ
Telepresenceの基本的な挙動 57 57 App 1 App 2 App 2へのアクセスをジャック クラスタと開発機の間に
双方向プロキシは確立
Telepresenceの基本的な挙動 58 58 App 1 App 2 Deploymentに当てられている ConfigMap,Secretを取得
Telepresenceの基本的な挙動 59 59 App 1 App 2 プロキシを経由してK8sで動く 別サービスにアクセス可能
Telepresenceの基本的な挙動 60 60 App 1 App 2 ここにアクセスすればE2Eで 動作確認可能
本日の予定 • Telepresenceってなんですか? • K8sでの開発はなぜしんどい? • 開発手法から見るTelepresence • How to
work Telepresence? • 試してわかるTelepresence • まとめ 61 61
ハンズオン https://github.com/Juju-62q/telepresence-handson 62 62
注意事項 63 63 • 各人で進められるようにはしておいてあるので,全体で 同期を取ることはあまりしません. • 詰まったらなんでも聞いてください. • 時間余った人はメンターお手伝いか,advancedなもの,
試してみたいことをやってみましょう! • Dockerfileやアプリケーションの品質については 何も言わないでください
Setup 64 64 書いてある通りにやればクラスタ立ち上がると信じてます
時間かかるのでTips 65 65 • プロキシの通信経路確保の都合上localhostへの アクセスは開発機へのアクセスになる (Pod IPを指定すればアクセス可能) • ファイアウォールが悪さをする場合があるので設定注意
• 複数コンテナを同時に変化させるのは難しい 参考: https://www.telepresence.io/reference/limitations 割とマメに更新されてる印象です
swap-deployment 66 66 既存のdeploymentを更新してみましょう telepresence \ --swap-deployment ${deployment_name} \ --docker-run
--rm \ -p ${container_port}:${local_port} \ ${container_image} docker runのオプションは概ね使えます
use-secret 67 67 環境変数を持たずとも,変数を利用できることを確認する telepresence \ --swap-deployment ${deployment_name} \ --docker-run
--rm \ -p ${container_port}:${local_port} \ -e TEST=hogehoge \ ${container_image} -eオプションで上書きもできる
use-secret 68 68 環境変数を持たずとも,変数を利用できることを確認する telepresence \ --swap-deployment ${deployment_name} \ --docker-run
--rm \ -p ${container_port}:${local_port} \ -e TEST=hogehoge \ ${container_image} -eオプションで上書きもできる
create-new-deployment 69 69 新規のdeploymentをTelepresenceで作成できることを確認 telepresence \ --new-deployment ${deployment_name} \ --expose
${local_port}:${service_port} \ --docker-run --rm \ -p ${container_port}:${local_port} \ ${container_image} ClusterIPのServiceとDeploymentがクラスタに生える
advanced 70 70 • ぜひ色んなことを試してみて欲しいです!(下記は例) ◦ secretやconfigMapのファイル版を作成して,それがpodから読み取れ ることを確認する ◦ Telepresenceから同一Podへの通信がlocalhostでできないことを
確認する(PodIPによる指定も確認してみる) ◦ 複数のコンテナがあるポッドでデフォルトコンテナじゃないコンテナを 入れ替えてみる ◦ --docker-runではなく,shellで動くアプリをdeploymentにしてみる
こんなときどうする? 71 71 • 複数のコンテナを同時に試したい -> 基本的には無理,docker-composeで無理やりなら • コンテキストを切り替えたいんだけど ->
`--context=${context_name}`で可能です! • デフォルトコンテナ以外を変更したいんだけど -> `${deployment_name}:${container_name}`で可能です
本日の予定 • Telepresenceってなんですか? • K8sでの開発はなぜしんどい? • 開発手法から見るTelepresence • How to
work Telepresence? • 試してわかるTelepresence • まとめ 72 72
まとめ 73 73 • K8s,マイクロサービスの導入で開発が大変になっている 部分があり,技術で対応する必要がある • TelepresenceはK8s上のマイクロサービスを素早く, 環境差異を減らしつつ開発するための便利ツール •
本当に大変なのは布教です