Successfully reported this slideshow.
Your SlideShare is downloading. ×

Introduction to Magnum (JP)

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 47 Ad

More Related Content

Slideshows for you (20)

Viewers also liked (11)

Advertisement

Similar to Introduction to Magnum (JP) (20)

Recently uploaded (20)

Advertisement

Introduction to Magnum (JP)

  1. 1. Introduction to Magnum NEC Solution Innovators, OpenStack Community Team
  2. 2. 目次 • 私は誰? • Magnum とは? • Magnum の使い方 • アーキテクチャ • 開発環境 • デモ
  3. 3. 私は誰?
  4. 4. 5 © NEC Corporation 2015 私は誰? ▌Motohiro/Yuanying Otsuka Twitter @yuanying http://www.fraction.jp ▌NEC ソリューションイノベータ OpenStack コミュニティ対応チーム ▌OpenStack コミュニティ Magnum コア開発者 (2014/12/31~) ▌言語 Ruby (2007~) Python (2014~) ▌趣味 ロードバイク (2009~) トライアスロン (2010~)
  5. 5. 6 © NEC Corporation 2015 趣味: ロードバイク沼 (2009 – 2015) Colnago em Willier La Triestina Bianchi Via Nirone Cervelo S1 Cervelo Soloist Carbon Cannondale CAAD9 Cervelo P3 Cervelo Super Prodigy Cervelo P4 Cervelo S5 Team Speedvagen CX Team Speedvagen Road
  6. 6. 7 © NEC Corporation 2015 当社 OpenStack コミュニティ対応チーム ▌グループ員 日本人開発者 5名 中国人開発者 1名 インド人開発者 3名 ▌OpenStack コア開発者 Nova 1名 Tempest 3名 Magnum 2名 1名 Ironic-inspector 1名 Senlin 1名
  7. 7. 8 © NEC Corporation 2015 OpenStack との関わり ▌2011/10 Cloud Foundry の調査業務 • OpenStack 上にて Cloud Foundry の構築。 ▌2014/06 グループ方針として Cloud Foundry から戦略的撤退 • 昨今の Cloud Foundry の盛り上がりを見ると、なぜこの時期に撤退したのか意味不明。 ▌2014/07 OpenStack コミュニティ対応チームに配属 • Python? なにそれ。 • コミュニティの人間関係その他さっぱりわからない状態。 TripleO の調査 ▌2014/11 Magnum の調査・開発 ▌2014/12 Magnum コア開発者
  8. 8. 9 © NEC Corporation 2015 OpenStack との関わり 17:47 yuanying: at least one hour. 17:47 sdake: think I am unblocked and have stack working 17:47 sdake: so I'll start tackling the baremetal launch 17:47 yuanying: using larks/kube? 17:48 yuanying: if you have heat-template knowledge, I think its easy. 17:48 sdake: I was ptl of heat for 3 cycles 17:48 sdake: led team that wrote heat initially 17:48 sdake: fairly well versed ;-) 17:48 yuanying: really?? 17:48 sdake: yup 17:49 yuanying: cool 17:49 sdake: thanks :)
  9. 9. Magnum とは?
  10. 10. 11 © NEC Corporation 2015 関連技術 -- Docker Docker Engine ▌ コンテナ型仮想化ソフトウェア  Namespace • マウント名前空間、PID名前空間、ユーザ名前空間 …  cgroup • cpu, memory, devices …  chroot • ディレクトリの隔離  netns • ネットワークの隔離 ▌ アプリケーションのポータビリティ  Write Once, Run Anywhere !  Docker コンテナ = アプリケーション + 実行環境 これらの Linux がもとも と持っていた技術を組みわ せて利用している。 テスト環境 実行環境 App library 1 library 2 ステージング環境 実行環境 App library 1 library 2 商用環境 実行環境 App library 1 library 2
  11. 11. 12 © NEC Corporation 2015 関連技術 – コンテナ管理 Kubernetes ▌複数ホストに配備された Docker コンテナをどう管理するか? コンテナをどこに配備するべきか?(スケジューリング) 配備したコンテナはどのホストにいるのか? コンテナ間の連携は? • アプリケーションコンテナはデータベースコンテナがどこに配備されたのかを知りたい。 コンテナのオートスケールはどう対応する?
  12. 12. 13 © NEC Corporation 2015 Magnum とは ▌2013/11 OpenStack におけるコンテナ対応について言及 ▌2014/08 コンテナ API に関するドラフト • https://etherpad.openstack.org/p/openstack-containers-service-api Nova にてコンテナ対応 API にて提案 • https://review.openstack.org/#/c/114044 ▌2014/11 OpenStack Summit Paris のデザインサミットにて Magnum プロジェクトが始動 NEC の OpenStack 対応チームが Magnum にジョイン ▌2014/12 NEC からコア開発者が選出 ▌2015/03 Magnum が OpenStack プロジェクトに昇格 ▌2015/05 OpenStack Summit Vancouver にて次期 Experimental プロジェクトとして Magnum がKeynoteにて紹介
  13. 13. 14 © NEC Corporation 2015 Magnum とは ▌Container as a Service ?? Magnum 当初の提案されたスペック • Nova と同じように Compute Host を配備、magnum- agent が container を管理。 – magnum から直接 container を制御 – Container as a Service !!
  14. 14. 15 © NEC Corporation 2015 Magnum とは ▌現状: Container Orchestration Tools Installation as a Service Kubernetes / Swarm などのコンテナ管理システムのインストレーションサービス。 • 例えばデータベースでいう Trove の位置付け。 • gcloud の container サブコマンド相当。 Kubernetes / Swarm のクラスターを管理する。 • Kubernetes / Swarm のクラスターを 「Bay」 と呼ぶ。 ユーザーテナント Bay (Kubernetes Type) Kubernetes Master Kubernetes Minion 1 Kubernetes Minion 2 Service Pod Pod Replication Controller Pod Container Container Container Container Container Container Bay (Swarm Type) Swarm Master Docker Node 2 Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Docker Node 1 Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Container Magnum Kubernetes Type Baymodel image: fedora-atomic keypair: my_public_key external-network: $NIC_ID dns-nameserver: 8.8.8.8 flavor: baremetal type-of-bay: kubernetes Swarm Type Baymodel image: fedora-atomic keypair: my_public_key external-network: $NIC_ID dns-nameserver: 8.8.8.8 flavor: baremetal type-of-bay: swarm
  15. 15. 16 © NEC Corporation 2015 Magnum でなにができるのか? ▌プロダクションユース可能な Kunernetes クラスターの管理 (予定) そもそもプロダクションユース可能って何、という話はありますが…。 優先度は低いが、Docker-Swarm の管理も可能。 ▌コンテナ管理のアブストラクションレイヤー提供 (予定) Pod/Service/ReplicationController などの Kubernetes リソースを抽象化? 現状は場当たり的な実装があるのみ、しかも Kubernetes にしか対応していない。
  16. 16. 17 © NEC Corporation 2015 当チームにおける Magnum に対する貢献 ▌Bay 実装の First cut を担当 Heat を利用したアーキテクチャの提案および実装 はじめて通った magnum bay-create コマンド ▌Ironic サポート しかし現在、絶賛デグレード中… ▌Python Kubernetes Client Swagger のスペックからクライアントを生成 、、しかし動かないので手作業で修正。。 ▌TLS-Auth Magnum でインストールされた k8s/swarm クラスターへの認証に利用。
  17. 17. Magnum の使い方
  18. 18. 19 © NEC Corporation 2015 Swarm TypeKubernetes Type Magnum の管理するリソース ▌Baymodel ▌Bay Kubernetes Type Bay Swarm Type Bay ▌Kubernetes Type Bay Service ReplicationController Pod ▌Swarm Type Bay Container Bay Baymodel Pod Service ContainerRC
  19. 19. 20 © NEC Corporation 2015 使い方 1. Baymodel の作成 Bay のテンプレート。 Bay 構築時に共通で使うパラメータをまとめておく。 2. Bay の作成 Bay (Kubernetes Cluster) Baymodel と名前の指定。 3. Pod の作成 1. Magnum Client を利用 2. Native Client を利用 • Kubernetes 利用時の認証の設定。 – TLS Auth 用 Private Key / Cert ファイルの取得。 – TLS Auth 用 CA Cert の取得。
  20. 20. 21 © NEC Corporation 2015 使い方: Baymodel の作成 # Baymodel の作成 $ magnum baymodel-create --name kubernetes --image-id fedora-21-atomic-5 --keypair-id default --external-network-id public --dns-nameserver 8.8.8.8 --flavor-id m1.small --docker-volume-size 5 --coe kubernetes
  21. 21. 22 © NEC Corporation 2015 閑話休題: Baymodel の (よく分からない) パラメータ パラメータ 用途 --fixed-network Cluster が利用するプライベートネットワークのネット ワークアドレス。ex: 10.0.0.0/24 --network-driver コンテナのネットワークで利用されるネットワークドラ イバー。k8s: flannel, swarm: docker がデフォルト。 --ssh-authorized-key クラスターのホストOSが coreos の場合に、ユーザが ssh でログインするための public key を指定。 --tls-disabled Bay の TLS Auth を無効化する。
  22. 22. 23 © NEC Corporation 2015 使い方: Bay (Kubernetes Cluster) の作成 # Bay の作成 $ magnum bay-create --name k8sbay --baymodel kubernetes --node-count 2 --master-count 2
  23. 23. 24 © NEC Corporation 2015 使い方: Pod/Service の作成 (magnum client 利用)
  24. 24. 25 © NEC Corporation 2015 使い方: Pod の作成 (magnum client 利用) # あらかじめ Kubernetes をダウンロードし、example を入手 $ cd ~/kubernetes/examples/redis/v1beta3/ # Pod の作成 $ magnum pod-create --manifest ./redis-master.yaml --bay k8sbay
  25. 25. 26 © NEC Corporation 2015 使い方: Pod の作成 (native client 利用)
  26. 26. 27 © NEC Corporation 2015 使い方: Pod の作成 (native client 利用) (1) # あらかじめ kubectl をインストールしておく。 # api_address の値をメモ $ magnum bay-show k8sbay +----------------+------------------------------------------------------------+ | Property | Value | +----------------+------------------------------------------------------------+ | status | CREATE_COMPLETE | | uuid | d332bb21-e47a-49bb-bfa5-a4f1df60c51f | | created_at | 2015-08-04T06:17:16+00:00 | | updated_at | 2015-08-04T06:18:53+00:00 | | api_address | https://192.168.19.92:8080 | | baymodel_id | 9df7e273-374d-4e5c-9588-7c54aed1fb91 | | node_count | None | | node_addresses | [u'192.168.19.94'] | | status_reason | Stack CREATE completed successfully | | discovery_url | https://discovery.etcd.io/95a6db244e0bd14774757d88f2c5d412 | | name | k8sbay | +----------------+------------------------------------------------------------+
  27. 27. 28 © NEC Corporation 2015 使い方: Pod の作成 (native client 利用) (2) # TLS-Auth 用の Certificate を入手 # 1. private key の作成 $ openssl genrsa -out client.key 4096 # 2. csr の作成 $ cat > client.conf << END [req] distinguished_name = req_distinguished_name req_extensions = req_ext prompt = no [req_distinguished_name] CN = Your Name [req_ext] extendedKeyUsage = clientAuth END $ openssl req -new -days 365 -config client.conf -key client.key -out client.csr `gcloud container cluster` では 隠蔽されている作業を手作業で行 わなければならない。
  28. 28. 29 © NEC Corporation 2015 使い方: Pod の作成 (native client 利用) (3) # 3. client certificate の要求 $ magnum ca-sign --bay secure-k8sbay --csr client.csr > client.crt # 4. CA cert の要求 $ magnum ca-show --bay secure-k8sbay > ca.crt # 5. Pod の作成 $ kubectl create -f redis-master.yaml --certificate-authority=ca.crt --client-key=client.key --client-certificate=client.crt -s https://192.168.19.92:8080 # https://blueprints.launchpad.net/magnum/+spec/client- tls-auth-configuration
  29. 29. アーキテクチャ
  30. 30. 31 © NEC Corporation 2015 アーキテクチャ magnum_conductor k8s_conductor bay_conductor magnum_api heat neutron neutron LBaaS glance cinder TemplateDefinition k8s_template_definition swarm_template_definition Bay (k8s) k8s master k8s minion Pod Container Container Pod Container Container Pod Container Container python k8s_client Barbican nova bay Pod… CA
  31. 31. 32 © NEC Corporation 2015 アーキテクチャ (Bay管理時) magnum_conductor bay_conductor magnum_api heat neutron neutron LBaaS glance cinder TemplateDefinition k8s_template_definition swarm_template_definition Bay (k8s) k8s master k8s minion Pod Container Container Pod Container Container Pod Container Container Barbican nova k8s heat template Parameters bay Pod… CA cert cert REST API 提供 1. Bay 2. k8s resources 3. CA 1. Heat に Stack の生成を要求 2. データベースにデータを保存 ユーザの要求(baymodel) に従っ て Heat のテンプレート及びパラ メータを生成 k8s の TLS 接続に利用する Key の管理 Bay 構築のために必要な OpenStack リソースの生成 cloud-init を利用した Kubernetes クラスターの設定
  32. 32. 33 © NEC Corporation 2015
  33. 33. 34 © NEC Corporation 2015 アーキテクチャ (K8S リソース管理時) magnum_conductor k8s_conductor magnum_api Bay (k8s) k8s master k8s minion Pod Container Container Pod Container Container Pod Container Container python k8s_client
  34. 34. 開発環境
  35. 35. 36 © NEC Corporation 2015 開発環境 devstack nova neutron heat neutron-lbaas barbican ceilometer magnum magnum-api magnum-conductor 192.168.11.0/24 197 198 devstack は構築済みとし、 Magnum を別ノードに構築する。
  36. 36. 37 © NEC Corporation 2015 開発環境のセットアップ https://gist.github.com/yuanying/f27cef22738acf8b1db5 1. 依存パッケージのインストール 2. magnum, python-magnumclient のインストール 3. magnumの設定 4. データベースの作成 5. magnum の起動 6. keystone への登録 7. イメージの登録 8. keypair の登録
  37. 37. 38 © NEC Corporation 2015 開発環境のセットアップ (1) – 依存パッケージのインストール $ sudo apt-get install libffi-dev libssl-dev git vim build-essential libxml2-dev libsqlite3-dev libxslt1-dev python-dev libmysqlclient-dev –y $ curl -s https://bootstrap.pypa.io/get-pip.py | sudo python $ sudo pip install virtualenv flake8 tox testrepository git-review
  38. 38. 39 © NEC Corporation 2015 開発環境のセットアップ (2) – magnum, magumclient $ cd ~ $ git clone https://github.com/openstack/magnum.git $ cd magnum # 以下コマンドで依存ライブラリおよびMagnumが # ~/magnum/.tox/venv にインストールされる。 $ tox -evenv -- echo 'done’ $ cd ~ $ git clone https://github.com/openstack/python-magnumclient.git $ cd python-magnumclient $ tox -evenv -- echo 'done'
  39. 39. 40 © NEC Corporation 2015 開発環境のセットアップ (3) – magnum の設定 $ cat > ~/magnum/etc/magnum/magnum.conf << END [DEFAULT] rabbit_userid=stackrabbit rabbit_password = stackqueue rabbit_hosts = 192.168.11.197 rpc_backend = rabbit [database] connection = mysql://root:stackdb@192.168.11.197/magnum [keystone_authtoken] admin_password = openstack admin_user = nova admin_tenant_name = service identity_uri = http://192.168.11.197:35357 auth_uri=http://192.168.11.197:5000/v3 END
  40. 40. 41 © NEC Corporation 2015 開発環境のセットアップ (4) – データベースの作成 # データベースの作成 $ mysql -h 192.168.11.197 -u root -pstackdb mysql <<EOF CREATE DATABASE IF NOT EXISTS magnum DEFAULT CHARACTER SET utf8; EOF # テーブルの生成 $ cd ~/magnum $ source .tox/venv/bin/activate $ pip install mysql-python $ magnum-db-manage --config-dir etc/magnum/ upgrade
  41. 41. 42 © NEC Corporation 2015 開発環境のセットアップ (5) – magnum の起動 # magnum-api $ cd ~/magnum $ source .tox/venv/bin/activate $ magnum-api --config-dir etc/magnum/ # magnum-conductor $ cd ~/magnum $ source .tox/venv/bin/activate $ magnum-api --config-dir etc/magnum/
  42. 42. 43 © NEC Corporation 2015 開発環境のセットアップ (6) – keystone への登録 # devstack のホストにて $ export HOST_IP=192.168.11.197 $ source ~/devstack/openrc admin admin $ keystone service-create --name=magnum --type=container --description="Magnum Container Service" $ keystone endpoint-create --service=magnum --publicurl=http://192.168.11.198:9511/v1 --internalurl=http://192.168.11.198:9511/v1 --adminurl=http://192.168.11.198:9511/v1 --region RegionOne
  43. 43. 44 © NEC Corporation 2015 開発環境のセットアップ (7) – イメージの登録 # devstack のホストにて $ source ~/devstack/openrc admin admin $ wget https://fedorapeople.org/groups/magnum/fedora-21-atomic- 5.qcow2 $ glance image-create --name fedora-21-atomic-5 --is-public True --disk-format qcow2 --property os_distro='fedora-atomic' --container-format bare < fedora-21-atomic-3.qcow2
  44. 44. 45 © NEC Corporation 2015 開発環境のセットアップ (8) – keypairの登録 # devstack のホストにて $ source ~/devstack/openrc demo demo $ ssh-keygen $ nova keypair-add --pub-key ~/.ssh/id_rsa.pub testkey
  45. 45. デモ

Editor's Notes

  • #本スライドの活用について

    NECグループのブランドステートメント「Orchestrating a brighter world」は、ステークホルダーへの約束として、NECグループの企業姿勢、実現したい世界観と、それに対する自らの「行動・能力」を表現したものです。

    社外向け発信活動においては、必ず表紙の次ページに本スライドを挿入し、ブランドステートメントとともにどんなストーリーを展開するかを説明するように心掛けてください。

    <セリフ例>-----
    私たちNECグループは、お客さまや社会と共創して、社会価値を創造していきます。
    人が生きる、豊かに生きる、そして明るい未来につなげていくために。
    これをブランドステートメント「Orchestrating a brighter world」としました。
    NECグループが目指しているこの方向性の中で、本日は、○○○を実現する具体的な取り組み(ソリューション、サービス、技術)についてご説明します。
    -----------------

    ※そのほか、言葉に込めた意味、マークデザインに込めた意味については、「NEC Brand Principles」で確認してください。

×