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.6k
telepresence handson
@ジュジュ
August 08, 2019
Tweet
Share
More Decks by @ジュジュ
See All by @ジュジュ
チーム分割においていかれたアラートをチームで責任を持てる形に再設計した
juju62q
0
100
ボトムアップでSLOを導入 2年半運用して分かった失敗と変化
juju62q
2
900
Firecracker Snapshottingを調べてみた
juju62q
1
510
SLOを活用した技術的改善
juju62q
10
8k
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
プロダクトエンジニアが活躍する環境を作りたくて 事業責任者になった話 ~プロダクトエンジニアの行き着く先~
gimupop
1
480
独自ツール開発でスタジオ撮影をDX!「VLS(Virtual LED Studio)」 / dx-studio-vls
cyberagentdevelopers
PRO
1
180
ガバメントクラウド単独利用方式におけるIaC活用
techniczna
3
270
【若手エンジニア応援LT会】AWSで繋がり、共に成長! ~コミュニティ活動と新人教育への挑戦~
kazushi_ohata
0
180
Automated Promptingを目指すその前に / Before we can aim for Automated Prompting
rkaga
0
110
日経電子版におけるリアルタイムレコメンドシステム開発の事例紹介/nikkei-realtime-recommender-system
yng87
1
500
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間
oracle4engineer
PRO
27
12k
ABEMA のコンテンツ制作を最適化!生成 AI x クラウド映像編集システム / abema-ai-editor
cyberagentdevelopers
PRO
1
180
visionOSでの空間表現実装とImmersive Video表示について / ai-immersive-visionos
cyberagentdevelopers
PRO
1
110
顧客が本当に必要だったもの - パフォーマンス改善編 / Make what is needed
soudai
24
6.7k
とあるユーザー企業におけるリスクベースで考えるセキュリティ業務のお話し
4su_para
3
320
ExaDB-D dbaascli で出来ること
oracle4engineer
PRO
0
3.6k
Featured
See All Featured
Designing for humans not robots
tammielis
249
25k
Intergalactic Javascript Robots from Outer Space
tanoku
268
27k
Measuring & Analyzing Core Web Vitals
bluesmoon
1
40
KATA
mclloyd
29
13k
5 minutes of I Can Smell Your CMS
philhawksworth
202
19k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
Six Lessons from altMBA
skipperchong
26
3.5k
Gamification - CAS2011
davidbonilla
80
5k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Building Adaptive Systems
keathley
38
2.2k
The Power of CSS Pseudo Elements
geoffreycrofte
72
5.3k
RailsConf 2023
tenderlove
29
880
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上のマイクロサービスを素早く, 環境差異を減らしつつ開発するための便利ツール •
本当に大変なのは布教です