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

猫でもわかる rkt + Kubernetes #ichigayageek

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

y_taka_23

December 20, 2017
Tweet

More Decks by y_taka_23

Other Decks in Technology

Transcript

  1. 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
  2. Hello, rkt ! • コンテナ黎明期からのプロダクト ◦ CoreOS から CNCF に寄贈

    • Docker とほぼ対応するコマンド ◦ 使う上で新しく覚えることはほとんどない ◦ ただし build には別ツール (acbuild) を使用 • 従来の Docker イメージも動かせる ◦ DockerHub 上のイメージも使用可能 #ichigayageek
  3. rkt の特徴 • シンプルなプロセスモデル ◦ 中央集権的なデーモンを持たない ◦ rkt は単なるコマンド、systemd がコンテナ管理

    • Pod のネイティブサポート ◦ 複数コンテナを rkt run すると Pod 込みで起動 ◦ 選べる隔離レベル (chroot / systemd-nspawn / KVM) ◦ Pod 内のコンテナは immutable #ichigayageek
  4. Container Runtime Interface (CRI) • Kubernetes v1.5 で導入 ◦ v1.7

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

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

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

    • Pod のネイティブサポート ◦ 複数コンテナを rkt run すると Pod 込みで起動 ◦ 選べる隔離レベル (chroot / systemd-nspawn / KVM) ◦ Pod 内のコンテナは immutable #ichigayageek
  8. 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
  9. 空の 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
  10. 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
  11. まとめ • rkt の特徴 ◦ デーモン不要、シンプルな実行モデル ◦ ネイティブ Pod、可変な隔離レベル •

    早すぎた rktnetes、後から来た CRI • CRI 対応は現在進行形 ◦ rktlet による CRI 提供 ◦ rkt app サブコマンド群 #ichigayageek