欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

          OpenStack Ironic實(shí)現(xiàn)裸機(jī)部署

          實(shí)習(xí)將近一個(gè)月了,期間不斷努力,終于算是把OpenStack Ironic項(xiàng)目實(shí)現(xiàn)裸機(jī)部署的過程理解了一遍,并在小規(guī)模集群上成功實(shí)踐。整理一些這段時(shí)間工作的內(nèi)容,就算是一個(gè)階段性的小項(xiàng)目總結(jié)了。

          Ironic

          Ironic是OpenStack的一個(gè)子項(xiàng)目,用于實(shí)現(xiàn)在云里像管理虛擬機(jī)一樣管理裸機(jī)。

          Ironic在OpenStack中的概念架構(gòu)圖如下

          OpenStack Ironic實(shí)現(xiàn)裸機(jī)部署

          其中Bare Metal就是我們要控制的物理機(jī)了,Neutron為其提供網(wǎng)絡(luò)服務(wù),Cinder提供塊存儲(chǔ)服務(wù),Glance則提供裸機(jī)部署時(shí)的鏡像緩存服務(wù),在部署過程中,我們的Ironic模塊要和Neutron,Nova,Glance,Keystone這些核心的OpenStack項(xiàng)目配合,才能完美實(shí)現(xiàn)裸機(jī)部署的過程。

          裸機(jī)部署過程中用到的一些核心的技術(shù)

          (PXE) 預(yù)引導(dǎo)執(zhí)行環(huán)境,PXE是英特爾和微軟開發(fā)的Wired for Management(WfM)規(guī)范的一部分。PXE使系統(tǒng)的BIOS和網(wǎng)絡(luò)接口卡(NIC)能夠從網(wǎng)絡(luò)引導(dǎo)計(jì)算機(jī)而不是磁盤。引導(dǎo)是系統(tǒng)將OS加載到本地存儲(chǔ)器的過程,以便處理器可以執(zhí)行該過程。允許系統(tǒng)通過網(wǎng)絡(luò)引導(dǎo)這種功能簡化了管理員和服務(wù)器部署和服務(wù)器的管理。
           動(dòng)態(tài)主機(jī)配置協(xié)議(DHCP) DHCP是用于英特網(wǎng)協(xié)議(IP)網(wǎng)絡(luò)的標(biāo)準(zhǔn)化網(wǎng)絡(luò)協(xié)議,用于動(dòng)態(tài)分配網(wǎng)絡(luò)配置參數(shù),例如接口和服務(wù)的IP地址。使用PXE,BIOS使用DHCP獲取網(wǎng)絡(luò)接口的IP地址,并找到存儲(chǔ)網(wǎng)絡(luò)引導(dǎo)程序(NBP)的服務(wù)器。
           網(wǎng)絡(luò)引導(dǎo)程序(NBP) NBP等同于GRUB(Grand Unified Bootloader)或 LILO(Linux LOader) – 傳統(tǒng)上用于本地引導(dǎo)的加載器。與硬件驅(qū)動(dòng)器環(huán)境中的引導(dǎo)程序一樣,NBP負(fù)責(zé)將OS那個(gè)加載到內(nèi)存中,以便可以通過網(wǎng)絡(luò)引導(dǎo)操作系統(tǒng)。
           普通文件傳輸協(xié)議(TFTP) TFTP是一種簡單的文件傳輸協(xié)議,通常用于在本地環(huán)境中的計(jì)算機(jī)之間自動(dòng)傳輸配置或引導(dǎo)文件。在PXE環(huán)境中,TFTP用于使用來自DHCP服務(wù)器的信息通過網(wǎng)絡(luò)下載NBP。
           智能平臺管理接口(IPMI) IPMI是系統(tǒng)管理員用于計(jì)算機(jī)系統(tǒng)的帶外管理和監(jiān)視其操作的標(biāo)準(zhǔn)化計(jì)算機(jī)系統(tǒng)接口。這是一種通過僅使用于硬件而不是操作系統(tǒng)的網(wǎng)絡(luò)連接來管理可能無響應(yīng)或斷電的系統(tǒng)的方法。

          Ironic裸機(jī)部署的過程

          OpenStack Ironic實(shí)現(xiàn)裸機(jī)部署

          核心流程分析
           1、引導(dǎo)實(shí)例請求通過 Nova API 進(jìn)入,通過消息隊(duì)列進(jìn)入 Nova 調(diào)度程序。
            2、Nova Scheduler 應(yīng)用過濾器并查找符合條件的虛擬機(jī)監(jiān)控nova調(diào)度程序,還使用flavor的extra_specs(例如 cpu_arch)來匹配目標(biāo)物理節(jié)點(diǎn)。
            3、Nova compute 管理選中hypervisor的資源聲明。
            4、Nova compute 管理器根據(jù) nova引導(dǎo)請求中網(wǎng)絡(luò)接口在Networking服務(wù)中創(chuàng)建(未綁定)租戶虛擬接口(VIF)。這里需要注意的是,端口的MAC將隨機(jī)生成,并且當(dāng)VIF連接到某個(gè)節(jié)點(diǎn)以對應(yīng)于節(jié)點(diǎn)網(wǎng)絡(luò)接口卡時(shí)MAC將更新。
            5、nova compute創(chuàng)建一個(gè) spawn 任務(wù),它包含所有信息,例如從哪個(gè)鏡像引導(dǎo)等。它從Nova compute的virt層調(diào)用 driver.spawn。在spawn過程中,virt驅(qū)動(dòng)程序執(zhí)行以下操作: 更新目標(biāo)ironic節(jié)點(diǎn)的deploy鏡像,實(shí)例UUID,請求的功能和各種flavor屬性。通過調(diào)用ironic API 驗(yàn)證節(jié)點(diǎn)的電源和部署的接口。將之前創(chuàng)建的VIF附加到節(jié)點(diǎn)。每個(gè)neutron port 可以被附加到任何ironic port和port group,port groups 比 ports有更高的優(yōu)先級。在Ironic這邊,這個(gè)工作時(shí)由 network interface做的。
            6、Nova 的 ironic驅(qū)動(dòng)程序通過 Ironic API 向服務(wù)裸機(jī)節(jié)點(diǎn)的 Ironic conductor 發(fā)出部署請求。
            7、配置虛擬接口,Neutron API更新DHCP端口以設(shè)置 PXE/TFTP選項(xiàng)。在使用neutron網(wǎng)絡(luò)接口的情況下,ironic在網(wǎng)絡(luò)服務(wù)中創(chuàng)建單獨(dú)的配置端口,在 flat 網(wǎng)絡(luò)接口的情況下,nova創(chuàng)建的端口用于配置和部署實(shí)例網(wǎng)絡(luò)。
            8、Ironic節(jié)點(diǎn)的啟動(dòng)接口準(zhǔn)備PXE配置和緩存 deploy kernel和 ramdisk。
            9、Ironic 節(jié)點(diǎn)通過 Management interfacec發(fā)出命令來啟動(dòng)節(jié)點(diǎn)的網(wǎng)絡(luò)引導(dǎo)。
            10、Ironic 節(jié)點(diǎn)的 Deploy Interface 緩存實(shí)例鏡像(在 iSCSI 部署接口的情況下),緩存kernel和ramdisk,在netboot的時(shí)候需要它。
            11、Ironic節(jié)點(diǎn)的Power Interface 指示節(jié)點(diǎn)的電源接口通電。
            12、節(jié)點(diǎn)引導(dǎo)部署ramdisk
            13、根據(jù)確切的驅(qū)動(dòng)程序需求,conductor 將通過iSCSI復(fù)制鏡像到物理節(jié)點(diǎn)。
            14、節(jié)點(diǎn)的引導(dǎo)接口將 pxe config切換為引用實(shí)例鏡像,要求 ramdisk agent 軟關(guān)閉節(jié)點(diǎn)電源,如果ramdisk agent 軟關(guān)閉電源失敗,則通過IPMI/BMS呼叫關(guān)機(jī)裸機(jī)節(jié)點(diǎn)電源。
            15、部署接口會(huì)觸發(fā)網(wǎng)絡(luò)接口,以便在創(chuàng)建時(shí)刪除配置端口,并將租戶端口綁定到節(jié)點(diǎn)。然后給節(jié)點(diǎn)上電。
            16、裸機(jī)節(jié)點(diǎn)的 provisioning state更新為active狀態(tài)。
           
          部署實(shí)踐

          安裝好Ubuntu server 16.04系統(tǒng)作為裸機(jī)部署的控制節(jié)點(diǎn)
           配置網(wǎng)絡(luò)

             auto eth0
          iface eth0 inet static
              gateway 192.168.0.253
              address 192.168.0.50/24
              mtu 1500

          #neutron
          auto eth1
          iface eth1 inet manual
          up ip link set dev eth1 promisc on
          up ip link set dev eth1 up
          down ip link set dev eth1 down
          down ip link set dev eth1 promisc off

          eth0 做為 API_NET 接口,提供 OpenStack 的管理網(wǎng)絡(luò),我們給它分配一個(gè)靜態(tài)IP,這里的地址需要和你的實(shí)際網(wǎng)絡(luò)環(huán)境一致。

          eth1 做為 EXT_NET 接口,提供 OpenStack 的 neutron 網(wǎng)絡(luò),這里我們啟動(dòng)網(wǎng)口但是不對它進(jìn)行IP配置。

          安裝kolla環(huán)境,部署OpenStack with Ironic
          更新apt源,安裝依賴

          sudo apt-get update
          sudo apt-get upgrade
          sudo apt-get install python-jinja2 python-pip libssl-dev -fy

          配置 pip 加速,使用阿里云 pip 源

          mkdir ~/.pip
          tee ~/.pip/pip.conf <<-‘EOF’
          [global]
          trusted-host =  mirrors.aliyun.com
          index-url = https://mirrors.aliyun.com/pypi/simple
          EOF

          安裝 kolla,kolla-ansible,python-openstackclient

          sudo pip install –upgrade pip
          sudo pip install ansible
          sudo pip install kolla-ansible==4.0.3
          sudo pip install python-openstackclient

          Kolla部署Ironic配置

          sudo cp -r /usr/local/share/kolla-ansible/etc_examples/kolla /etc/kolla

          sudo vim /etc/kolla/global.yml

          # 關(guān)鍵配置修改
          # Valid options are [ CentOS, Oraclelinux, ubuntu ]
          kolla_base_distro: “centos”

          # Valid options are [ binary, source ]
          kolla_install_type: “binary”

          # Valid option is Docker repository tag
          openstack_release: “4.0.0”

          # api_net 的地址
          kolla_internal_vip_address: “192.168.0.50”
          network_interface: “eth0”
          neutron_external_interface: “eth1”
          neutron_plugin_agent: “openvswitch”
          kolla_enable_tls_external: “no”
          ironic_cleaning_network: “public1”
          ironic_dnsmasq_dhcp_range: “192.168.8.1,192.168.8.5”
          enable_ironic: “yes”
          enable_haproxy: “no”

            Ironic 相關(guān)配置

             # 啟用內(nèi)核支持模塊,刪除open-iscsi

          sudo modprobe configfs
          sudo apt-get remove open-iscsi

          sudo mkdir -p /etc/kolla/config/ironic
          cd /etc/kolla/config/ironic

          # 下載和存儲(chǔ)ironic部署時(shí)引導(dǎo)鏡像
          sudo wget http://otcloud-gateway.bj.intel.com/deployment-img/ironic-agent.kernel
          sudo wget http://otcloud-gateway.bj.intel.com/deployment-img/ironic-agent.initramfs

          sudo mv ironic.conf /etc/kolla/config/ironic.conf

          #ironic.conf的內(nèi)容
          [DEFAULT]

          enabled_drivers=pxe_ipmitool

          [conductor]
          automated_clean=false
          # pxe 尋找tftp服務(wù)器是通過這個(gè)地址找的,如果不配置,pxe將無法從tftp服務(wù)拿到鏡像,從而超時(shí)失敗
          [pxe]
          tftp_server=192.168.1.50

          kolla快速部署環(huán)境

             # 生成密碼
          kolla-genpwd

          # 初始化環(huán)境,安裝一些基礎(chǔ)依賴如 docker
          sudo kolla-ansible
          -i /usr/local/share/kolla-ansible/ansible/inventory/all-in-one
          bootstrap-servers

          # 配置dockerhub加速,我們用國內(nèi)的阿里云源加速
          sudo tee /etc/docker/daemon.json <<-‘EOF’
          {
          “registry-mirrors”:  [“https://ao6wb0ej.mirror.aliyuncs.com”]
          }
          EOF
          # 配置完后重啟docker
          sudo systemctl daemon-reload
          sudo  service docker restart

          # 拉取鏡像
          sudo kolla-ansible pull

          # 預(yù)檢查
          sudo kolla-ansible prechecks
          -i /usr/local/share/kolla-ansible/ansible/inventory/all-in-one
          # 部署
          sudo kolla-ansible deploy
          -i /usr/local/share/kolla-ansible/ansible/inventory/all-in-one
          # 生成部署環(huán)境文件,/etc/kolla/admin-openrc.sh 里面有重要的系統(tǒng)初始化配置
          sudo kolla-ansible post-deploy

          配置br-ex

             # 配置 eth1 即neutron對應(yīng)的網(wǎng)卡所在的網(wǎng)絡(luò)環(huán)境
          auto br-ex
          iface br-ex inet static
          address 192.168.1.50
          netmask 255.255.255.0
          gateway 192.168.1.253
          dns-nameserver 192.168.1.253
          # 注釋掉 eth1 原來的配置

          Ironic 初始環(huán)境 SetUp

             #!/bin/bash

          # ironic 管理網(wǎng)段
          EXT_NET_CIDR=’192.168.1.0/24′
          EXT_NET_RANGE=’start=192.168.1.20,end=192.168.1.100′
          EXT_NET_GATEWAY=’192.168.1.253′
          EXT_NET_CIDR_DNS=’192.168.1.253′

          # ironic init setup
          # create ironic manage network
          openstack network create –provider-physical-network physnet1
              –provider-network-type flat public1

          openstack subnet create 
              –allocation-pool ${EXT_NET_RANGE} –network public1
              –subnet-range ${EXT_NET_CIDR} –gateway ${EXT_NET_GATEWAY}  –dns-nameserver ${EXT_NET_CIDR_DNS} — public1-subnet

          # 上傳部署的引導(dǎo)鏡像
          openstack image create –disk-format aki –container-format aki –public
            –file /etc/kolla/config/ironic/ironic-agent.kernel deploy-vmlinuz
          openstack image create –disk-format ari –container-format ari –public
            –file /etc/kolla/config/ironic/ironic-agent.initramfs deploy-initrd

             
          使用diskimage-builder制作ubuntu部署鏡像

          sudo pip install diskimage-builder
          sudo apt install -y qemu-utils
          disk-image-create ubuntu baremetal dhcp-all-interfaces -o my-image

             
            將制作的用戶鏡像上傳到 glance

             glance image-create –name my-kernel –visibility public
            –disk-format aki –container-format aki < my-image.vmlinuz

          glance image-create –name my-image.initrd –visibility public
            –disk-format ari –container-format ari < my-image.initrd

          MY_VMLINUZ_UUID=$(glance image-list|grep my-kernel|awk -F “| ” ‘{print $2}’)
          MY_INITRD_UUID=$(glance image-list|grep my-image.initrd|awk -F “| ” ‘{print $2}’)

          glance image-create –name my-image –visibility public
            –disk-format qcow2 –container-format bare –property
            kernel_id=$MY_VMLINUZ_UUID –property
            ramdisk_id=$MY_INITRD_UUID < my-image.qcow2

            生成ssh-key,以便免密鑰登錄實(shí)例
             
             # 生成密鑰對
          if [ ! -f ~/.ssh/id_rsa.pub ]; then
              echo Generating ssh key.
              ssh-keygen -t rsa -f ~/.ssh/id_rsa
          fi

          if [ -r ~/.ssh/id_rsa.pub ]; then
              echo Configuring nova public key and quotas.
              openstack keypair create –public-key ~/.ssh/id_rsa.pub mykey
          fi

             
            注冊BareMetal節(jié)點(diǎn),啟動(dòng)部署裸機(jī)的操作系統(tǒng)

             source server_ipmi

          # 物理裸機(jī)的配置,可小不可大于實(shí)際值

          RAM=65536
          DISK=800
          VCPUS=32
          HOST_CPU_ARCH=x86_64
          export IRONIC_API_VERSION=1.20

          DEPLOY_VMLINUZ_UUID=$(glance image-list|grep deploy-vmlinuz|awk -F “| ” ‘{print $2}’)
          DEPLOY_INITRD_UUID=$(glance image-list|grep deploy-initrd|awk -F “| ” ‘{print $2}’)

          # node1 創(chuàng)建 flavor
          nova flavor-create ai-bm-node1 1 ${RAM} ${DISK} ${VCPUS}
          nova flavor-key ai-bm-node1 set cpu_arch=x86_64
          nova flavor-key ai-bm-node1 set resources:CUSTOM_BAREMETAL_NODE1_AI=1
          nova flavor-key ai-bm-node1 set resources:VCPU=0
          nova flavor-key ai-bm-node1 set resources:MEMORY_MB=0
          nova flavor-key ai-bm-node1 set resources:DISK_GB=0

          # 創(chuàng)建 node
          ironic node-create -d pxe_ipmitool  -n node1
          NODE1_UUID=$(ironic node-list|grep node1|awk -F “| ” ‘{print $2}’)

          # 設(shè)置 node 的 ipmi信息
          ironic node-update $NODE1_UUID add  driver_info/ipmi_username=$s1_ipmi_username 
          driver_info/ipmi_password=$s1_ipmi_password  driver_info/ipmi_address=$s1_ipmi_address
          driver_info/ipmi_terminal_port=623

          # 設(shè)置 node 的引導(dǎo)鏡像信息
          ironic node-update $NODE1_UUID add driver_info/deploy_kernel=$DEPLOY_VMLINUZ_UUID
              driver_info/deploy_ramdisk=$DEPLOY_INITRD_UUID
          # 設(shè)置 node 的基本配置信息
          ironic node-update $NODE1_UUID add properties/cpus=${VCPUS}  properties/memory_mb=${RAM}
           properties/local_gb=${DISK} properties/cpu_arch=${HOST_CPU_ARCH}

          # 設(shè)置 node 的resource-class,方面node判斷部署到哪個(gè)裸機(jī)節(jié)點(diǎn)
          openstack –os-baremetal-api-version 1.21 baremetal node set $NODE1_UUID
            –resource-class  CUSTOM_BAREMETAL_NODE1_AI
          # 設(shè)置 啟動(dòng)網(wǎng)口的 MAC 地址,即 node 的 port
          ironic port-create -n $NODE1_UUID -a $s1_nic_mac_address

          # 設(shè)置 node狀態(tài)為 provide
          ironic –ironic-api-version 1.20 node-set-provision-state $NODE1_UUID manage
          ironic –ironic-api-version 1.20 node-set-provision-state $NODE1_UUID provide

          # 啟動(dòng)部署
          openstack server create –image my-image –flavor ai-bm-node1
           –key-name mykey –network public1  node1

          本文涉及到的所有腳本可以到Linux公社資源站下載,詳細(xì)部署可參考這套腳本

          ——————————————分割線——————————————

          免費(fèi)下載地址在 http://linux.linuxidc.com/

          用戶名與密碼都是www.linuxidc.com

          具體下載目錄在 /2018年資料/9月/30日/OpenStack Ironic實(shí)現(xiàn)裸機(jī)部署/

          下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

          ——————————————分割線——————————————

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號