Tungsten Fabricのインストール(k8s, kolla, k8s&kolla)
Tungsten Fabric のインストールをAWS上で試してみたので、その時のメモとなる。
インストール時の組み合わせとしては、
1. k8s
2. kolla openstack
3. k8s & kolla openstack
の3パターンで実施している。
※ このうち、3番目の組み合わせは、最近できた仕組みとなる
全体を通じて、環境としては、AWS 上のMarketPlaceで、"CentOS 7 (x86_64) - with Updates HVM" と記載されている、Centos7.4のインスタンスを使用している。(ami-91c4d3ed, ログインユーザー名は centos)
また、Disk は20GBで作成するようにした。
2018/5/19 追記
centos7.5が出た影響なのか、もともとのami とcontrailnightly:latest の組み合わせだとvrouter.ko の読み込みが出来なくなっていた、、
https://bugs.launchpad.net/juniperopenstack/+bug/1764537
※
ifconfig vhost0
docker logs vrouter_vrouter-agent_1
等で確認可能
centos7.5用のami (ami-3185744e) でk8sの手順を実施し、動作することを確認している
2018/7/22 追記
upstream の変更に合わせて記述を修正:
- instance.yaml に global_configuration の定義が必要になった (空の場合も) ので、追記
- TFインストール前に install_k8s.yaml, install_openstack.yaml を実施するようになったため、コマンドを追記
- minimum_diskGB を設定する際のパス, container名が変更になったので追記
- admin-openrc.sh の置き場所が変わったのでパスを修正
k8s
元の資料は以下となる。
https://github.com/Juniper/contrail-ansible-deployer/wiki/Contrail-microservice-installation-with-kubernetes
インスタンス種別としては、t2.large x 2 を使用した。
事前準備として、master ノード上で、以下のコマンドを発行し、パッケージをインストールしておく
# yum -y install epel-release git ansible net-tools
また、master ノードで以下のコマンドを発行し、
# ssh-keygen
できた/root/.ssh/id_rsa.pubを master ノード, slave ノード の /root/.ssh/authorized_keys に追記しておく。
※ あわせて、各ノードでntpも設定しておく。
yum -y install ntp service ntpd start
上記が終わったら、以下のコマンドで、インストール用のplaybook を流す準備を行っていく。
# git clone https://github.com/Juniper/contrail-ansible-deployer.git # cd contrail-ansible-deployer # vi config/instances.yaml provider_config: bms: ssh_user: root ssh_public_key: /root/.ssh/id_rsa.pub ssh_private_key: /root/.ssh/id_rsa domainsuffix: local instances: bms1: provider: bms roles: config_database: config: control: analytics_database: analytics: webui: k8s_master: kubemanager: ip: 172.31.14.34 # masterノードのip bms2: provider: bms roles: vrouter: k8s_node: ip: 172.31.4.240 # slave ノードのip contrail_configuration: CONTAINER_REGISTRY: opencontrailnightly CONTRAIL_VERSION: latest KUBERNETES_CLUSTER_PROJECT: {} global_configuration: ### 2018/7/22追記
この後、以下の3つのplaybook で、インストールが実施される。
ansible-playbook -i inventory/ playbooks/configure_instances.yml ※ 10分ほどかかる ansible-playbook -e orchestrator=kubernetes -i inventory/ playbooks/install_k8s.yml ## 2018/7/22 追記 ※ 5分ほどかかる ansible-playbook -e orchestrator=kubernetes -i inventory/ playbooks/install_contrail.yml ※ 20分ほどかかる
動作確認としては、まず、以下のコマンドで、全てのコンポーネントのステータスがactive になっていることを確認する。
# contrail-status
※
nodemgr: initializing (Disk for DB is too low.)
が表示された場合、以下を実施し、再度 contrail-status を実施する。
docker exec -it config_nodemgr_1 sed -i 's/#minimum_diskGB=4/minimum_diskGB=4/' /etc/contrail/contrail-config-nodemgr.conf docker restart config_nodemgr_1 docker exec -it analyticsdatabase_nodemgr_1 sed -i 's/#minimum_diskGB=4/minimum_diskGB=4/' /etc/contrail/contrail-database-nodemgr.conf docker restart analyticsdatabase_nodemgr_1 (2018/7/22追記) docker exec -it config_database_nodemgr_1 sed -i 's/#minimum_diskGB=4/minimum_diskGB=4/' /entrypoint.sh docker restart config_database_nodemgr_1 docker exec -it analytics_database_nodemgr_1 sed -i 's/#minimum_diskGB=4/minimum_diskGB=4/' /entrypoint.sh docker restart analytics_database_nodemgr_1
上記が確認できたら、以下のようにcirrosを投入し、コンテナの起動と gw への疎通が出来ることを確認する。
※ k8s yaml としては以下を使用: https://github.com/tnaganawa/contrail-k8s-tutorial/tree/master/yml/1_initial
[root@ip-172-31-14-34 1_initial]# kubectl create -f cirros1.yaml pod "cirros1" created [root@ip-172-31-14-34 1_initial]# [root@ip-172-31-14-34 1_initial]# kubectl create -f cirros2.yaml pod "cirros2" created [root@ip-172-31-14-34 1_initial]# [root@ip-172-31-14-34 1_initial]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE cirros1 1/1 Running 0 1m 10.47.255.251 ip-172-31-4-240.ap-northeast-1.compute.internal cirros2 1/1 Running 0 12s 10.47.255.250 ip-172-31-4-240.ap-northeast-1.compute.internal [root@ip-172-31-14-34 1_initial]# [root@ip-172-31-14-34 1_initial]# kubectl exec -it cirros1 sh / # ip -o a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1\ link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever 1: lo inet6 ::1/128 scope host \ valid_lft forever preferred_lft forever 11: eth0@if12: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue \ link/ether 02:56:17:0e:4a:4a brd ff:ff:ff:ff:ff:ff 11: eth0 inet 10.47.255.251/12 scope global eth0\ valid_lft forever preferred_lft forever 11: eth0 inet6 fe80::20a8:92ff:fe11:6d80/64 scope link \ valid_lft forever preferred_lft forever / # ping 10.47.255.254 PING 10.47.255.254 (10.47.255.254): 56 data bytes 64 bytes from 10.47.255.254: seq=0 ttl=64 time=0.457 ms 64 bytes from 10.47.255.254: seq=1 ttl=64 time=0.196 ms ^C --- 10.47.255.254 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.196/0.326/0.457 ms / #
合わせて、以下のようなコマンドで contrail webui までの疎通を可能にし、webui が開けることを確認する。(id/pass は admin:contrail123)
ssh -L 8143:127.0.0.1:8143 -i (awsのpem) centos@(master ノードのip)
※スクリーンショットはこちら
kolla openstack
元の資料は以下となる。
https://github.com/Juniper/contrail-ansible-deployer/wiki/Contrail-with-Kolla-Ocata
k8s の場合とほぼ同じなので、コマンドのみ列記していく。
※ インスタンス種別としては、t2.2xlarge x 1 を使用した (t2.xlarge だと、メモリ不足で一部のプロセスが起動しなかった、、)
yum -y install epel-release yum -y install git ansible-2.4.2.0 yum -y install ntp service ntpd start ssh-keygen cd .ssh/ cat id_rsa.pub >> authorized_keys cd git clone http://github.com/Juniper/contrail-ansible-deployer cd contrail-ansible-deployer vi config/instances.yaml (以下を記述) provider_config: bms: ssh_pwd: root ssh_user: root domainsuffix: local instances: bms1: provider: bms ip: 172.31.2.25 # ec2 インスタンスのip roles: config_database: config: control: analytics_database: analytics: webui: vrouter: openstack: openstack_compute: contrail_configuration: RABBITMQ_NODE_PORT: 5673 AUTH_MODE: keystone KEYSTONE_AUTH_URL_VERSION: /v3 kolla_config: kolla_globals: enable_haproxy: no kolla_passwords: keystone_admin_password: contrail123 # adminユーザーのパスワード global_configuration: ### 2018/7/22追記 ansible-playbook -i inventory/ playbooks/configure_instances.yml ※ 10分ほどかかる ansible-playbook -i inventory/ playbooks/install_openstack.yml ※ 20分ほどかかる ansible-playbook -i inventory/ -e orchestrator=openstack playbooks/install_contrail.yml ※ 10分ほどかかる
インストールが完了したら、aws での環境用に以下の設定変更を実施する。(nested kvm が使用できないことへの対応)
vi /etc/kolla/nova-compute/nova.conf [libvirt] に以下を追記 virt_type=qemu cpu_mode=none docker restart nova_compute
openstack 上にcirros を作成し、ping疎通が取れることを確認する。
yum install -y gcc python-devel wget pip install python-openstackclient pip install python-ironicclient source /etc/kolla/admin-openrc.sh source /etc/kolla/kolla-toolbox/admin-openrc.sh ## 2018/7/22追記 wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img openstack image create cirros2 --disk-format qcow2 --public --container-format bare --file cirros-0.4.0-x86_64-disk.img openstack network create testvn openstack subnet create --subnet-range 192.168.100.0/24 --network testvn subnet1 openstack flavor create --ram 512 --disk 1 --vcpus 1 m1.tiny NET_ID=`openstack network list | grep testvn | awk -F '|' '{print $2}' | tr -d ' '` openstack server create --flavor m1.tiny --image cirros2 --nic net-id=${NET_ID} test_vm1 openstack server create --flavor m1.tiny --image cirros2 --nic net-id=${NET_ID} test_vm2
※ horizon/webuiへのアクセスのため、ログイン時に、以下のようなssh port forward を使用した。
ssh -L 8143:127.0.0.1:8143 -L 8080:172.31.2.25:80 -L 6080:172.31.2.25:6080 -i (awsのpem) centos@(masterノードのip)
k8s & kolla openstack
元々openstack と k8s は、どちらもvxlan 等を使って、ネットワークセグメンテーションを実施しているのだが、両方を一つのcontroller で管理する、という仕組みは、(知る限りでは) 今まで、あまり出てきていなかったように思う。
ただ、仕組み上は、同時に使えた方が便利と思われるので、今後はこちらのような構成が一般的になっていくのかもしれない。
今回は、インスタンスの種別として、 t2.2xlarge x 1 (masterノード用), t2.large x 1 (slaveノード用) を使用した。
コマンドは、kolla openstack の時と同じなので、 config/instances.yaml の中身のみ記載する。
※ playbook が流れきるまで、40分程度 必要となる。
provider_config: bms: ssh_pwd: root ssh_user: root domainsuffix: local instances: bms101: provider: bms ip: 172.31.15.178 # masterノードのip roles: config_database: config: control: analytics_database: analytics: webui: k8s_master: kubemanager: openstack: bms102: provider: bms ip: 172.31.4.212 # slaveノードのip roles: vrouter: k8s_node: openstack_compute: global_configuration: CONTAINER_REGISTRY: opencontrailnightly contrail_configuration: CONTAINER_REGISTRY: opencontrailnightly CONTRAIL_VERSION: latest UPGRADE_KERNEL: true RABBITMQ_NODE_PORT: 5673 AUTH_MODE: keystone KEYSTONE_AUTH_URL_VERSION: /v3 KEYSTONE_AUTH_ADMIN_PASSWORD: contrail123 # adminユーザーのパスワード CLOUD_ORCHESTRATOR: openstack kolla_config: customize: nova.conf: | [libvirt] virt_type=qemu cpu_mode=none kolla_globals: enable_haproxy: "no" enable_ironic: "no" enable_swift: "no"
動作確認としても、k8s, kolla openstack 単独の場合と同じで、cirros を作成し、疎通を確かめていく。
作成後の確認結果を載せておく。
(openstack) [root@ip-172-31-15-178 1_initial]# nova list +--------------------------------------+------+--------+------------+-------------+---------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+------+--------+------------+-------------+---------------+ | aa746031-2726-49fc-bcaf-83857ab80325 | vm1 | ACTIVE | - | Running | net1=10.1.1.3 | | 7104659c-870f-4105-a09a-aba33daa47c8 | vm2 | ACTIVE | - | Running | net1=10.1.1.4 | +--------------------------------------+------+--------+------------+-------------+---------------+ [root@ip-172-31-15-178 1_initial]# [root@ip-172-31-4-212 ~]# ssh cirros@169.254.0.4 The authenticity of host '169.254.0.4 (169.254.0.4)' can't be established. ECDSA key fingerprint is SHA256:vQ1pnyAy/vAmsvl5XhF4ukwIdoNx8e/p/RaJIA2sqFw. ECDSA key fingerprint is MD5:aa:80:67:5a:33:37:d7:7b:73:bb:25:be:b9:12:0e:e5. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '169.254.0.4' (ECDSA) to the list of known hosts. cirros@169.254.0.4's password: Permission denied, please try again. cirros@169.254.0.4's password: $ ip -o a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1\ link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever 1: lo inet6 ::1/128 scope host \ valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000\ link/ether 02:fe:5a:fc:ba:3d brd ff:ff:ff:ff:ff:ff 2: eth0 inet 10.1.1.3/24 brd 10.1.1.255 scope global eth0\ valid_lft forever preferred_lft forever 2: eth0 inet6 fe80::fe:5aff:fefc:ba3d/64 scope link \ valid_lft forever preferred_lft forever $ $ ping 10.1.1.4 PING 10.1.1.4 (10.1.1.4): 56 data bytes 64 bytes from 10.1.1.4: seq=0 ttl=64 time=11.855 ms 64 bytes from 10.1.1.4: seq=1 ttl=64 time=2.957 ms ^C --- 10.1.1.4 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 2.957/7.406/11.855 ms $ (k8s) [root@ip-172-31-15-178 1_initial]# kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE cirros1 1/1 Running 0 36s 10.47.255.251 ip-172-31-4-212.ap-northeast-1.compute.internal cirros2 1/1 Running 0 20s 10.47.255.250 ip-172-31-4-212.ap-northeast-1.compute.internal [root@ip-172-31-15-178 1_initial]# [root@ip-172-31-15-178 ~]# kubectl exec -it cirros1 sh / # / # ping 10.47.255.250 PING 10.47.255.250 (10.47.255.250): 56 data bytes 64 bytes from 10.47.255.250: seq=0 ttl=63 time=0.552 ms 64 bytes from 10.47.255.250: seq=1 ttl=63 time=0.062 ms ^C --- 10.47.255.250 ping statistics --- 2 packets transmitted, 2 packets received, 0% packet loss round-trip min/avg/max = 0.062/0.307/0.552 ms / # / # / # [root@ip-172-31-15-178 ~]#
合わせて、webui から Tungsten Fabricの状態を確認する。
※ interfaces 欄に openstack, k8s 両方のvmi が記載されていることを確認可能
まとめ
簡単だが、Tungsten Fabric のインストール方法についてまとめておいた。
これ以外に、ec2インスタンス作成、等も自動で実施する、cloud formationを使った仕組みも用意されている。
すぐに試したい場合には、こちらを使ってみてもよいのではなかろうか。
https://github.com/Juniper/contrail-ansible-deployer/wiki/Deployment-Example:-Click-On-Deployment-of-Contrail-and-Kubernetes-in-AWS