Upgrade to Pro — share decks privately, control downloads, hide ads and more …

telepresence handson

telepresence handson

@ジュジュ

August 08, 2019
Tweet

More Decks by @ジュジュ

Other Decks in Technology

Transcript

  1. 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
  2. Microservice, K8sをなぜ使う? 20 20 • 開発速度の向上 • dev, stg, prdでの環境一致

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

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

    • 抽象化された基盤利用での可搬性の担保 • 柔軟なスケール • Declarativeなリソース作成 Developerが嬉しい…?
  5. K8sで動くアプリの開発サイクル 24 24 ① コンテナで動く   アプリケーションを開発 ② CIがコンテナレジストリに  

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

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

    イメージをPush ③ K8sのyamlを編集   (自動化してる場合もある) ④ 変更をPRに出す • ちょっと新しいイメージで試したいだけ なのに… • サービス間の疎通確認をサクッと とりたいんだけど • 試行錯誤の記録が全部Gitに残っちゃう
  8. コンテナ,K8sの導入で? 33 33 • 同一イメージをdev, stg, prdで同じように使うように • 12 Factor

    Appsやステートレスなアプリを意識, どこでも同じように走り出すアプリケーション • イミュータブルインフラストラクチャによるわかりやすさ
  9. Microserviceを取り巻く開発環境 35 35 • サービスをスケールさせることが大事 • 運用,開発コストを下げていく • パブリッククラウドのマネージドサービスをフル活用 •

    コンテナにより動作環境の差を保証…? 結局ここに強く依存しているのでlocalに閉じた開発とクラ ウドで動かした時の挙動は必ずしも一致しない
  10. 環境一致,本当にできてる? 37 37 • localと実際の環境の違い ◦ 実際にはK8sで動かすが開発はdocker-compose ◦ 実際にはCloudSQLやAuroraだけどMySQL •

    さらに,データストアやエミュレータを使うと開発機が エフェメラルに保てない • 開発機で環境変数管理するのアンセキュア
  11. 従来の開発での問題点まとめ 38 38 • 開発速度 ◦ K8sやDockerの利用でアプリ開発者の責務は 大きくなっている ◦ ちょっと試したい時にもGitリポジトリの書き換え?

    • 環境一致 ◦ マネージド環境の利用により生まれる開発機と実際に 動作する環境の差異 ◦ 開発機のストレージに動作が依存している場合も
  12. GitOpsでの開発サイクル 43 43 ① コンテナで動く   アプリケーションを開発 ② CIがコンテナレジストリに  

    イメージをPush ③ K8sのyamlを編集   (自動化してる場合もある) ④ 変更をPRに出す
  13. Telepresenceを使った開発サイクル 45 45 ① コンテナで動く   アプリケーションを開発 ② ローカルマシンに  

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

    コンテナがあればいい ③ イメージの差し替えを   せずにクラスタで動作確認 ④ Telepresenceコマンド   で動作確認 telepresence \ --swap-deployment ${deployment_name} \ --docker-run --rm \ -p ${container_port}:${local_port} \ ${container_image}
  15. swap-deployment 66 66 既存のdeploymentを更新してみましょう telepresence \ --swap-deployment ${deployment_name} \ --docker-run

    --rm \ -p ${container_port}:${local_port} \ ${container_image} docker runのオプションは概ね使えます
  16. use-secret 67 67 環境変数を持たずとも,変数を利用できることを確認する telepresence \ --swap-deployment ${deployment_name} \ --docker-run

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

    --rm \ -p ${container_port}:${local_port} \ -e TEST=hogehoge \ ${container_image} -eオプションで上書きもできる
  18. 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がクラスタに生える
  19. advanced 70 70 • ぜひ色んなことを試してみて欲しいです!(下記は例) ◦ secretやconfigMapのファイル版を作成して,それがpodから読み取れ ることを確認する ◦ Telepresenceから同一Podへの通信がlocalhostでできないことを

    確認する(PodIPによる指定も確認してみる) ◦ 複数のコンテナがあるポッドでデフォルトコンテナじゃないコンテナを 入れ替えてみる ◦ --docker-runではなく,shellで動くアプリをdeploymentにしてみる
  20. こんなときどうする? 71 71 • 複数のコンテナを同時に試したい -> 基本的には無理,docker-composeで無理やりなら • コンテキストを切り替えたいんだけど ->

    `--context=${context_name}`で可能です! • デフォルトコンテナ以外を変更したいんだけど -> `${deployment_name}:${container_name}`で可能です