猫でもわかる rkt + Kubernetes #ichigayageek

332f89cc697355902a817506b6995f2b?s=47 y_taka_23
December 20, 2017

猫でもわかる rkt + Kubernetes #ichigayageek

市ヶ谷 Geek☆Night #16「Kubernetes Christmas!」で使用したスライドです。Anti-Docker なコンテナ技術 rkt と Kubernetes の連携を題材として、Container Runtime Interface (CRI) の位置づけや、新しく開発中のアダプタ rktlet について解説しました。

イベント概要:https://ichigayageek.connpass.com/event/74057/
ブログ:http://ccvanishing.hateblo.jp/entry/2017/12/23/082635

332f89cc697355902a817506b6995f2b?s=128

y_taka_23

December 20, 2017
Tweet

Transcript

  1. 猫でもわかる rkt + Kubernetes チェシャ猫 (@y_taka_23) 市ヶ谷 Geek☆Night #16 (2017/12/20)

    #ichigayageek
  2. rkt [rocket] https://github.com/rkt/rkt #ichigayageek

  3. CNCF のプロジェクト群 https://www.cncf.io/projects/ #ichigayageek

  4. Docker / rkt コマンド対応 Docker rkt docker images rkt image

    list docker pull rkt fetch (+ trust) docker run rkt run docker ps rkt list docker stop rkt stop docker rm rkt rm #ichigayageek
  5. Hello, rkt ! • コンテナ黎明期からのプロダクト ◦ CoreOS から CNCF に寄贈

    • Docker とほぼ対応するコマンド ◦ 使う上で新しく覚えることはほとんどない ◦ ただし build には別ツール (acbuild) を使用 • 従来の Docker イメージも動かせる ◦ DockerHub 上のイメージも使用可能 #ichigayageek
  6. 新規性その 1:シンプルなプロセスモデル #ichigayageek

  7. systemd docker run runC application systemd rkt run application containerd

    Docker rkt #ichigayageek
  8. 新規性その 2:Pod のネイティブサポート #ichigayageek

  9. rkt run coreos.com/app1 coreos.com/app2 #ichigayageek

  10. rkt Pod app1 app2 Stage 0 Stage 1 Stage 2

    #ichigayageek
  11. rkt Pod app1 app2 chroot (fly) KVM systemd-nspawn Stage 0

    Stage 1 Stage 2 #ichigayageek
  12. rkt の特徴 • シンプルなプロセスモデル ◦ 中央集権的なデーモンを持たない ◦ rkt は単なるコマンド、systemd がコンテナ管理

    • Pod のネイティブサポート ◦ 複数コンテナを rkt run すると Pod 込みで起動 ◦ 選べる隔離レベル (chroot / systemd-nspawn / KVM) ◦ Pod 内のコンテナは immutable #ichigayageek
  13. Kubernetes と相性良さそう! #ichigayageek

  14. rktnetes in Kubernetes v1.3 http://blog.kubernetes.io/2016/07/rktnetes-brings-rkt-container-engine-to-Kubernetes.html #ichigayageek

  15. そこに突然の CRI #ichigayageek

  16. Container Runtime Interface (CRI) • Kubernetes v1.5 で導入 ◦ v1.7

    で Docker 呼び出しが完全移行 • コンテナランタイムを抽象化 ◦ 再コンパイルなしでコンテナ実装を入れ替え • 2 種類の gRPC サービス ◦ イメージの操作 / コンテナの操作 ◦ Kubelet の引数に Unix ソケットを指定 #ichigayageek
  17. CRI は命令型 • 宣言型 (declarative) インタフェース ◦ 例:Pod が n

    個 Running になっているべき ◦ Kubernetes 自体の基本思想 • 命令型 (imperative) インタフェース ◦ 例:Pod を作成、コンテナを追加・起動 ◦ CRI が採用 ◦ ランタイム側でのロジック再実装を避けるため #ichigayageek
  18. CRI の例 • ImageService: イメージの操作 ◦ PullImage: イメージ DL ◦

    RemoveImage: イメージ削除 • RuntimeService: コンテナの操作 ◦ RunPodSandbox:(空の)Pod 作成 ◦ CreateContainer: コンテナ作成 ◦ StartContainer: コンテナ起動 #ichigayageek
  19. rkt の特徴(再掲) • シンプルなプロセスモデル ◦ 中央集権的なデーモンを持たない ◦ rkt は単なるコマンド、systemd がコンテナ管理

    • Pod のネイティブサポート ◦ 複数コンテナを rkt run すると Pod 込みで起動 ◦ 選べる隔離レベル (chroot / systemd-nspawn / KVM) ◦ Pod 内のコンテナは immutable #ichigayageek
  20. CRI と相性悪そう… #ichigayageek

  21. rktlet https://github.com/kubernetes-incubator/rktlet #ichigayageek

  22. kubelet rktlet rkt CRI (gRPC) 外部コマンド #ichigayageek

  23. rkt app サブコマンド • 現在 (v1.29.0) はまだ開発者版 ◦ 環境変数で RKT_EXPERIMENT_APP

    を指定 • 稼働中の Pod の状態を変更できる ◦ rkt app sandbox-> RunPodSandbox ◦ rkt app add -> CreateContainer ◦ rkt app start -> StartContainer • rktlet が gRPC を受け、rkt app を叩く #ichigayageek
  24. kubelet rktlet rkt systemd CRI (gRPC) #ichigayageek

  25. kubelet rktlet rkt RunPodSandbox rkt app sandbox systemd systemd-run Pod

    #ichigayageek
  26. 空の Pod の作成 $ export RKT_EXPERIMENT_APP=true $ sudo -E rkt

    app sandbox $ sudo -E rkt list UUID APP IMAGE NAME STATE ... NETWORKS 86037dba - - running ... default:ip4=172.16.28.2 $ systemctl list-units | grep rkt var-lib-rkt-pods-run-86037dba... loaded active mounted ... #ichigayageek
  27. kubelet rktlet rkt StartContainer rkt app add systemd container Pod

    #ichigayageek #ichigayageek
  28. Pod 内にコンテナ追加 $ sudo -E rkt app add 86037dba coreos.com/etcd:v3.1.7

    $ sudo -E rkt list UUID APP IMAGE NAME STATE ... 86037dba etcd coreos.com/etcd:v3.1.7 running ... $ sudo -E rkt app add 86037dba docker://redis $ sudo -E rkt list UUID APP IMAGE NAME STATE ... 86037dba etcd coreos.com/etcd:v3.1.7 running ... redis registry-1.docker.io/library/redis #ichigayageek
  29. まとめ • rkt の特徴 ◦ デーモン不要、シンプルな実行モデル ◦ ネイティブ Pod、可変な隔離レベル •

    早すぎた rktnetes、後から来た CRI • CRI 対応は現在進行形 ◦ rktlet による CRI 提供 ◦ rkt app サブコマンド群 #ichigayageek
  30. It’s not rtk science! Presented by チェシャ猫 (@y_taka_23) #ichigayageek