$30 off During Our Annual Pro Sale. View Details »

telepresence handson

telepresence handson

@ジュジュ

August 08, 2019
Tweet

More Decks by @ジュジュ

Other Decks in Technology

Transcript

  1. Telepresenceハンズオン
    2019/08/08 岡野兼也(@Juju_62q)

    View Slide

  2. Telepresenceハンズオンにようこそ
    2
    2

    View Slide

  3. 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

    View Slide

  4. アンケート
    4
    4

    View Slide

  5. コンテナ使っている人?
    5
    5

    View Slide

  6. Kubernetes使っている人?

    6
    6

    View Slide

  7. マイクロサービスやってる人?
    7
    7

    View Slide

  8. 開発めっちゃ楽になった人?
    8
    8

    View Slide

  9. 正直しんどい人?
    9
    9

    View Slide

  10. 今日はそんな悩みを少しでも
    解決できたらと思ってます!
    10
    10

    View Slide

  11. 本日の予定
    ● Telepresenceってなんですか?
    ● K8sでの開発はなぜしんどい?
    ● 開発手法から見るTelepresence
    ● How to work Telepresence?
    ● 試してわかるTelepresence
    ● まとめ
    11
    11

    View Slide

  12. 本日の予定
    ● Telepresenceってなんですか?
    ● K8sでの開発はなぜしんどい?
    ● 開発手法から見るTelepresence
    ● How to work Telepresence?
    ● 試してわかるTelepresence
    ● まとめ
    12
    12

    View Slide

  13. Telepresenceってなんですか?
    13
    13

    View Slide

  14. Telepresenceってなんですか?
    14
    14
    ● CNCFのSandboxプロジェクト
    ● Pythonで作られたOSS
    ● Kubernetes上で”楽に”マイクロサービスを開発するため
    のツール
    ● 環境の差分を極力減らすためのツール

    View Slide

  15. 具体的にはなんですか?
    15
    15
    あなたの開発機とKubernetesをいい感じに接続します

    View Slide

  16. 具体的にはなんですか?
    16
    16
    ローカルマシンで動作しているものをKubernetesの
    Deploymentとして動かせます

    View Slide

  17. つまり!
    17
    17

    View Slide

  18. 開発機をK8sクラスタの一部と見立てることで
    環境差分の影響を減らし,簡単に開発をするためのツール
    (正確な物言いではありません)
    18
    18

    View Slide

  19. 本日の予定
    ● Telepresenceってなんですか?
    ● K8sでの開発はなぜしんどい?
    ● 開発手法から見るTelepresence
    ● How to work Telepresence?
    ● 試してわかるTelepresence
    ● まとめ
    19
    19

    View Slide

  20. Microservice, K8sをなぜ使う?
    20
    20
    ● 開発速度の向上
    ● dev, stg, prdでの環境一致
    ● 抽象化された基盤利用での可搬性の担保
    ● 柔軟なスケール
    ● Declarativeなリソース作成

    View Slide

  21. Microservice, K8sをなぜ使う?
    21
    21
    ● 開発速度の向上
    ● dev, stg, prdでの環境一致
    ● 抽象化された基盤利用での可搬性の担保
    ● 柔軟なスケール
    ● Declarativeなリソース作成
    Operatorが嬉しい

    View Slide

  22. Microservice, K8sをなぜ使う?
    22
    22
    ● 開発速度の向上
    ● dev, stg, prdでの環境一致
    ● 抽象化された基盤利用での可搬性の担保
    ● 柔軟なスケール
    ● Declarativeなリソース作成
    Developerが嬉しい…?

    View Slide

  23. 開発速度について
    23
    23

    View Slide

  24. K8sで動くアプリの開発サイクル
    24
    24
    ① コンテナで動く
      アプリケーションを開発
    ② CIがコンテナレジストリに
      イメージをPush
    ③ K8sのyamlを編集
      (自動化してる場合もある)
    ④ 更新したyamlをapply

    View Slide

  25. VMで動くアプリの開発サイクル
    25
    25
    ① アプリケーションを開発
    ② CDやsshによるデプロイ

    View Slide

  26. VMで動くアプリの開発サイクル
    26
    26
    ① アプリケーションを開発
    ② CDやsshによるデプロイ
    アプリケーションエンジニアからみた
    試行錯誤の速度の低下

    View Slide

  27. さらに?
    27
    27

    View Slide

  28. GitOps(CIOps含む)
    28
    28
    ● weaveworksが提唱した,K8sの運用,管理手法
    ● kubectlを人間が使わず,ツールで変更を行う
    ● PRベースでクラスタの状態を変更する
    ● GitリポジトリをSingle Source of Truthとして扱う

    View Slide

  29. GitOpsでの開発サイクル
    29
    29
    ① コンテナで動く
      アプリケーションを開発
    ② CIがコンテナレジストリに
      イメージをPush
    ③ K8sのyamlを編集
      (自動化してる場合もある)
    ④ 変更をPRに出す

    View Slide

  30. GitOpsでの開発サイクル
    30
    30
    ① コンテナで動く
      アプリケーションを開発
    ② CIがコンテナレジストリに
      イメージをPush
    ③ K8sのyamlを編集
      (自動化してる場合もある)
    ④ 変更をPRに出す
    ● ちょっと新しいイメージで試したいだけ
    なのに…
    ● サービス間の疎通確認をサクッと
    とりたいんだけど
    ● 試行錯誤の記録が全部Gitに残っちゃう

    View Slide

  31. K8sの導入で?
    31
    31
    ● やらなきゃならないことが増えた
    ● 試したいだけなのに自分以外が関わることが増えた
    開発のサイクルの速度低下…?

    View Slide

  32. 環境一致について
    32
    32

    View Slide

  33. コンテナ,K8sの導入で?
    33
    33
    ● 同一イメージをdev, stg, prdで同じように使うように
    ● 12 Factor Appsやステートレスなアプリを意識,
    どこでも同じように走り出すアプリケーション
    ● イミュータブルインフラストラクチャによるわかりやすさ

    View Slide

  34. Microserviceを取り巻く開発環境
    34
    34
    ● サービスをスケールさせることが大事
    ● 運用,開発コストを下げていく
    ● パブリッククラウドのマネージドサービスをフル活用
    ● コンテナにより動作環境の差を保証…?

    View Slide

  35. Microserviceを取り巻く開発環境
    35
    35
    ● サービスをスケールさせることが大事
    ● 運用,開発コストを下げていく
    ● パブリッククラウドのマネージドサービスをフル活用
    ● コンテナにより動作環境の差を保証…?
    結局ここに強く依存しているのでlocalに閉じた開発とクラ
    ウドで動かした時の挙動は必ずしも一致しない

    View Slide

  36. 環境一致,本当にできてる?
    36
    36
    ● マネージドサービスの利活用によって生まれる
    オンプレと実環境の違い
    ● ローカルでそれっぽいものを動かすツールは確かにある
    ○ LocalStack
    ○ datastore-emulator
    ○ microk8s, kind

    View Slide

  37. 環境一致,本当にできてる?
    37
    37
    ● localと実際の環境の違い
    ○ 実際にはK8sで動かすが開発はdocker-compose
    ○ 実際にはCloudSQLやAuroraだけどMySQL
    ● さらに,データストアやエミュレータを使うと開発機が
    エフェメラルに保てない
    ● 開発機で環境変数管理するのアンセキュア

    View Slide

  38. 従来の開発での問題点まとめ
    38
    38
    ● 開発速度
    ○ K8sやDockerの利用でアプリ開発者の責務は
    大きくなっている
    ○ ちょっと試したい時にもGitリポジトリの書き換え?
    ● 環境一致
    ○ マネージド環境の利用により生まれる開発機と実際に
    動作する環境の差異
    ○ 開発機のストレージに動作が依存している場合も

    View Slide

  39. その他の問題点
    39
    39
    ● マイクロサービスの開発をする際に複数のアプリを起動
    しなければならず煩わしい
    ● localstackなどを起動すると開発機のリソースを
    めちゃくちゃくう
    ● 開発機唸りがち(特にSimply PayではKotlinを採用してい
    るせいでひどく唸る)

    View Slide

  40. 本日の予定
    ● Telepresenceってなんですか?
    ● K8sでの開発はなぜしんどい?
    ● 開発手法から見るTelepresence
    ● How to work Telepresence?
    ● 試してわかるTelepresence
    ● まとめ
    40
    40

    View Slide

  41. Telepresenceは
    これらの問題を緩和しうるツールです
    41
    41

    View Slide

  42. 開発速度について
    42
    42

    View Slide

  43. GitOpsでの開発サイクル
    43
    43
    ① コンテナで動く
      アプリケーションを開発
    ② CIがコンテナレジストリに
      イメージをPush
    ③ K8sのyamlを編集
      (自動化してる場合もある)
    ④ 変更をPRに出す

    View Slide

  44. Telepresenceでできること
    44
    44
    ローカルマシンで動かしているコンテナを
    任意の場所にあるK8sのPodとして動かせます

    View Slide

  45. Telepresenceを使った開発サイクル
    45
    45
    ① コンテナで動く
      アプリケーションを開発
    ② ローカルマシンに
      コンテナがあればいい
    ③ イメージの差し替えを
      せずにクラスタで動作確認
    ④ Telepresenceコマンド
      で動作確認

    View Slide

  46. Telepresenceを使った開発サイクル
    46
    46
    ① コンテナで動く
      アプリケーションを開発
    ② ローカルマシンに
      コンテナがあればいい
    ③ イメージの差し替えを
      せずにクラスタで動作確認
    ④ Telepresenceコマンド
      で動作確認
    telepresence \
    --swap-deployment ${deployment_name} \
    --docker-run --rm \
    -p ${container_port}:${local_port} \
    ${container_image}

    View Slide

  47. 環境一致について
    47
    47

    View Slide

  48. Telepresenceでできること
    48
    48
    あなたの開発機とKubernetesをいい感じに接続します

    View Slide

  49. アプリケーションを考える
    49
    49

    View Slide

  50. アプリケーションを考える
    50
    50

    View Slide

  51. Telepresenceを使ってみる
    51
    51

    View Slide

  52. クラウドの資源を使いながら
    開発機の変更を反映可能
    52
    52

    View Slide

  53. Telepresenceの恩恵
    53
    53
    ● K8sのSecretリソースに定義のままアクセス可能
    ● 開発機で走るコンテナはあくまで1つだけ
    ● マイクロサービスの前後関係を含むE2Eテストが容易
    ● 開発機でデータを持つ必要がないのでエフェメラルに
    保てる

    View Slide

  54. 本日の予定
    ● Telepresenceってなんですか?
    ● K8sでの開発はなぜしんどい?
    ● 開発手法から見るTelepresence
    ● How to work Telepresence?
    ● 試してわかるTelepresence
    ● まとめ
    54
    54

    View Slide

  55. Telepresenceの基本的な挙動
    55
    55
    App 1 App 2

    View Slide

  56. Telepresenceの基本的な挙動
    56
    56
    App 1 App 2
    App 2の挙動を確かめるぞ

    View Slide

  57. Telepresenceの基本的な挙動
    57
    57
    App 1 App 2
    App 2へのアクセスをジャック
    クラスタと開発機の間に
    双方向プロキシは確立

    View Slide

  58. Telepresenceの基本的な挙動
    58
    58
    App 1 App 2
    Deploymentに当てられている
    ConfigMap,Secretを取得

    View Slide

  59. Telepresenceの基本的な挙動
    59
    59
    App 1 App 2
    プロキシを経由してK8sで動く
    別サービスにアクセス可能

    View Slide

  60. Telepresenceの基本的な挙動
    60
    60
    App 1 App 2
    ここにアクセスすればE2Eで
    動作確認可能

    View Slide

  61. 本日の予定
    ● Telepresenceってなんですか?
    ● K8sでの開発はなぜしんどい?
    ● 開発手法から見るTelepresence
    ● How to work Telepresence?
    ● 試してわかるTelepresence
    ● まとめ
    61
    61

    View Slide

  62. ハンズオン
    https://github.com/Juju-62q/telepresence-handson
    62
    62

    View Slide

  63. 注意事項
    63
    63
    ● 各人で進められるようにはしておいてあるので,全体で
    同期を取ることはあまりしません.
    ● 詰まったらなんでも聞いてください.
    ● 時間余った人はメンターお手伝いか,advancedなもの,
    試してみたいことをやってみましょう!
    ● Dockerfileやアプリケーションの品質については
    何も言わないでください

    View Slide

  64. Setup
    64
    64
    書いてある通りにやればクラスタ立ち上がると信じてます

    View Slide

  65. 時間かかるのでTips
    65
    65
    ● プロキシの通信経路確保の都合上localhostへの
    アクセスは開発機へのアクセスになる
    (Pod IPを指定すればアクセス可能)
    ● ファイアウォールが悪さをする場合があるので設定注意
    ● 複数コンテナを同時に変化させるのは難しい
    参考: https://www.telepresence.io/reference/limitations
    割とマメに更新されてる印象です

    View Slide

  66. swap-deployment
    66
    66
    既存のdeploymentを更新してみましょう
    telepresence \
    --swap-deployment ${deployment_name} \
    --docker-run --rm \
    -p ${container_port}:${local_port} \
    ${container_image}
    docker runのオプションは概ね使えます

    View Slide

  67. use-secret
    67
    67
    環境変数を持たずとも,変数を利用できることを確認する
    telepresence \
    --swap-deployment ${deployment_name} \
    --docker-run --rm \
    -p ${container_port}:${local_port} \
    -e TEST=hogehoge \
    ${container_image}
    -eオプションで上書きもできる

    View Slide

  68. use-secret
    68
    68
    環境変数を持たずとも,変数を利用できることを確認する
    telepresence \
    --swap-deployment ${deployment_name} \
    --docker-run --rm \
    -p ${container_port}:${local_port} \
    -e TEST=hogehoge \
    ${container_image}
    -eオプションで上書きもできる

    View Slide

  69. 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がクラスタに生える

    View Slide

  70. advanced
    70
    70
    ● ぜひ色んなことを試してみて欲しいです!(下記は例)
    ○ secretやconfigMapのファイル版を作成して,それがpodから読み取れ
    ることを確認する
    ○ Telepresenceから同一Podへの通信がlocalhostでできないことを
    確認する(PodIPによる指定も確認してみる)
    ○ 複数のコンテナがあるポッドでデフォルトコンテナじゃないコンテナを
    入れ替えてみる
    ○ --docker-runではなく,shellで動くアプリをdeploymentにしてみる

    View Slide

  71. こんなときどうする?
    71
    71
    ● 複数のコンテナを同時に試したい
    -> 基本的には無理,docker-composeで無理やりなら
    ● コンテキストを切り替えたいんだけど
    -> `--context=${context_name}`で可能です!
    ● デフォルトコンテナ以外を変更したいんだけど
    -> `${deployment_name}:${container_name}`で可能です

    View Slide

  72. 本日の予定
    ● Telepresenceってなんですか?
    ● K8sでの開発はなぜしんどい?
    ● 開発手法から見るTelepresence
    ● How to work Telepresence?
    ● 試してわかるTelepresence
    ● まとめ
    72
    72

    View Slide

  73. まとめ
    73
    73
    ● K8s,マイクロサービスの導入で開発が大変になっている
    部分があり,技術で対応する必要がある
    ● TelepresenceはK8s上のマイクロサービスを素早く,
    環境差異を減らしつつ開発するための便利ツール
    ● 本当に大変なのは布教です

    View Slide