本文介绍使用Ansible在KVM上部署OpenContrail的方法,此设置将完全在CentOS 7服务器上完成,你可以在Ubuntu虚拟机管理程序上执行相同操作,只有OpenContrail虚拟机才能在CentOS 7上运行。让我们首先安装将运行KVM的虚拟机监控程序所需的软件包,你可以使用部署VM来部署OpenContrail服务,但这不是必需的,因为可以使用一个主机系统来部署Ansible服务。
在CentOS 7上安装Ansible 使用以下命令在CentOS上安装Ansible: $ sudo yum -y install epel-release $ sudo yum -y install git ansible 参考:在RHEL 8/CentOS 8系统上安装和配置Ansible。
禁用SELinux并停止firewalld 为避免Firewalld和SELinux所需的任何进一步配置,你可以禁用以下两者: # setenforce 0 # sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # cat /etc/selinux/config # systemctl disable firewalld && systemctl stop firewalld 参考:在RHEL 8/CentOS 8系统中禁用SELinux的方法。
安装KVM以及管理程序所需的所有工具 让我们安装KVM和我们为此设置所需的其他工具: yum install -y python-urllib3 libguestfs-tools net-tools libvirt-python \ virt-install libvirt git ansible python-pip qemu-kvm bridge-utils 确认你已启用虚拟化并启动libvirt服务: # lsmod | grep kvm kvm_intel 170086 0 kvm 566340 1 kvm_intel irqbypass 13503 1 kvm # systemctl enable libvirtd && systemctl start libvirtd
为OpenContrail VM配置主机桥 由于我们在上一步中安装了bridge-utils,因此我们可以配置我们将插入VM的管理桥,我的网桥配置如下所示,你可以根据自己的环境进行修改: # cat /etc/sysconfig/network-scripts/ifcfg-em1 TYPE="Ethernet" NAME="em1" DEVICE="em1" ONBOOT="yes" BRIDGE=br-mgmt 网桥接口配置: # cat /etc/sysconfig/network-scripts/ifcfg-br-mgmt TYPE="Bridge" BOOTPROTO="static" NAME="br-mgmt" DEVICE="br-mgmt" ONBOOT="yes" IPADDR=192.168.10.235 PREFIX=24 GATEWAY=192.168.10.1 DNS1=8.8.8.8 ZONE=public 启动接口并确认桥接器正常工作: # ifup br-mgmt # brctl show
从输出中,我们可以确认网桥br-mgmt配置了正确的接口,你还可以使用ping或类似工具进行网络连接测试。
Clone contrail-ansible-deployer存储库 现在我们已满足所有的条件,我们可以Clone存储库并准备开始在KVM上部署OpenContrail: # git clone http://github.com/Juniper/contrail-ansible-deployer 切换到contrail-ansible-deployer目录并创建: # cd contrail-ansible-deployer 编辑config/instances.yaml并填写适当的值,这是我的3节点KVM安装示例文件: provider_config: kvm: image: CentOS-7-x86_64-GenericCloud-1802.qcow2.xz image_url: https://cloud.centos.org/centos/7/images/ ssh_pwd: Password123 ssh_user: root ssh_public_key: ~/.ssh/id_rsa.pub ssh_private_key: ~/.ssh/id_rsa vcpu: 8 vram: 32000 vdisk: 50G subnet_prefix: 192.168.10.0 subnet_netmask: 255.255.255.0 gateway: 192.168.10.1 nameserver: 192.168.10.1 ntpserver: 192.168.10.1 domainsuffix: local instances: contail-controller-01: provider: kvm host: 192.168.10.235 bridge: br-mgmt ip: 192.168.10.234 roles: config_database: config: control: analytics_database: analytics: webui: contail-controller-02: provider: kvm host: 192.168.10.235 bridge: br-mgmt ip: 192.168.10.233 roles: config_database: config: control: analytics_database: analytics: webui: contail-compute-01: provider: kvm host: 192.168.10.235 bridge: br-mgmt ip: 192.168.10.232 roles: vrouter: contrail_configuration: CONTAINER_REGISTRY: opencontrailnightly CONTRAIL_VERSION: latest VROUTER_GATEWAY: 192.168.10.1 我的inventory/hosts没有任何自定义设置,它看起来像下面: localhost: hosts: localhost: config_file: ../config/instances.yaml connection: local ansible_connection: local python_interpreter: python ansible_python_interpreter: python
使用Ansible配置VM 我收到一个错误,桥接定义未找到,我不得不修改文件: playbooks/roles/create_kvm_instances/tasks/build_and_start_container_hosts.yml 具有: - name: Install container vm {{ container_vm_hostname }} without portgroup command: | virt-install --name {{ container_vm_hostname }} \ --disk /var/lib/libvirt/images/{{ container_vm_hostname }}.qcow2 \ --cpu host-passthrough \ --vcpus={{ vcpu }} \ --ram={{ vram }} \ --network network={{ item.value.bridge }},model=virtio \ --network network=default,model=virtio \ --virt-type kvm \ --import \ --os-variant rhel7 \ --graphics vnc \ --serial pty \ --noautoconsole \ --console pty,target_type=virtio 我修改了第一个网络线路: --network bridge={{ item.value.bridge }},model=virtio \ 使用以下命令启动VM配置: # ansible-playbook -i inventory/ playbooks/provision_instances.yml | tee /root/provision-instances.log 这会将所有内容记录到文件/root/provision-instances.log中,此配置部分将在KVM上定义三个名为kvm1,kvm2和kvm3的VM,你可以在部署之前更改此名称。 成功执行后,确认是否已成功创建VM: [root@opencontrail ~]# virsh list contail-controller-01 running contail-controller-02 running contail-compute-01 running 下一步是配置创建的实例,运行命令: # ansible-playbook -i inventory/ playbooks/configure_instances.yml | tee -a /root/configure_instances.log 这可能需要一段时间才能完成执行,成功完成后,应该收到如下消息:
然后运行最后一个playbook以安装OpenContrail服务: # ansible-playbook -i inventory/ playbooks/install_contrail.yml | tee /root/install_contrail.log 所有输出都将记录在文件 –> /root/install_contrail.log中: ERROR! Unable to retrieve file contents Could not find or access '/root/contrail-kolla-ansible/ansible/post-deploy-contrail.yml' 我把/root/contrail-kolla-ansible/ansible/post-deploy.yml复制到/root/contrail-kolla-ansible/ansible/post-deploy-contrail.yml: # cp /root/contrail-kolla-ansible/ansible/post-deploy.yml /root/contrail-kolla-ansible/ansible/post-deploy-contrail.yml 成功执行应该给你类似的输出:
登录其中一个节点并检查正在运行的容器: # ssh root@192.168.10.232 # docker ps 在两个Opencontrail控制器VM上,应该运行这些容器: # docker ps --format '{{.Names}}' kubemanager_kubemanager_1 analytics_query-engine_1 analytics_topology_1 analytics_api_1 analytics_snmp-collector_1 analytics_collector_1 analytics_alarm-gen_1 analytics_nodemgr_1 analyticsdatabase_cassandra_1 analyticsdatabase_zookeeper_1 analyticsdatabase_nodemgr_1 analyticsdatabase_kafka_1 control_named_1 control_dns_1 control_control_1 control_nodemgr_1 webui_redis_1 webui_job_1 webui_web_1 config_nodemgr_1 config_svcmonitor_1 config_devicemgr_1 config_api_1 config_schema_1 configdatabase_cassandra_1 configdatabase_rabbitmq_1 configdatabase_zookeeper_1 容器总数为26: # docker ps --format '{{.Names}}' | wc -l 26 在运行和vrouter的计算VM上,我运行了以下容器: # docker ps --format '{{.Names}}' 一些容器有很长的名字,Kubernetes: k8s_POD_kube-dns-6f4fd4bdf-kj4lc_kube-system_28ddfbb8-3273-11e8-ae30-5254007554af_32 k8s_kube-proxy_kube-proxy-fwn7p_kube-system_5a9648cd-3273-11e8-ae30-5254007554af_0 k8s_POD_kube-proxy-fwn7p_kube-system_5a9648cd-3273-11e8-ae30-5254007554af_0 vrouter_vrouter-agent_1 vrouter_vrouter-net-watchdog_1 vrouter_nodemgr_1 在该过程结束时,你还应该能够连接到Contrail webUI,应该可以访问UI仪表板: https://192.168.10.233:8143/ https://192.168.10.234:8143/ 用户名:admin 密码:contrail123
要获取任何容器的shell,请使用docker exec命令: # docker exec -it webui_web_1 /bin/bash 提示:如果需要重新部署OpenContrail,请清空/root/.ssh/known_hosts。
相关主题 |