




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
云計算虛擬化技術基礎與實踐
KVM及QEMU虛擬化應用實踐目錄CONTENT01.Libvirt02.Virt-Manager03.基于Libvirt的配置與開發04.KVM及QEMU虛擬化應用案例本章重點掌握Libvirt的安裝和使用。掌握Virsh中的常用命令。掌握Virt-Manager的安裝和使用。理解Libvirt域的XML配置文件。熟悉常用的Libvirt的API。掌握使用LibvirtAPI進行虛擬化管理的基本操作。掌握輕量級虛擬機管理系統的應用開發。LibvirtLibvirt簡介Libvirt的yum安裝libvirtd進程Virsh的常用命令011.Libvirt簡介Libvirt包含一個守護進程和一個管理工具,不僅能提供對虛擬機的管理,也提供了對虛擬化網絡和存儲的管理。可以說,Libvirt是一個軟件集合,便于使用者管理虛擬機和使用其他虛擬化功能,比如存儲和網絡虛擬化管理等等。Libvirt的主要目標是提供一種統一的方式,管理多種不同的虛擬化提供方式和Hypervisor。當前主流Linux平臺上常用的虛擬化管理工具Virt-Manager,Virsh,Virt-Install等都是基于Libvirt開發而成。Libvirt支持多種不同的Hypervisor,針對不同的Hypervisor,Libvirt提供了不同的驅動,有對Xen的驅動,有對QEMU的驅動,有對VMware的驅動。Libvirt屏蔽了底層各種Hypervisor的細節,對上層管理工具提供了一個統一的、穩定的API。因此,通過Libvirt這個中間適配層,用戶空間的管理工具可以管理多種不同的Hypervisor及其上運行的虛擬客戶機。1.Libvirt簡介節點、Hypervisor和域之間的關系Libvirt中有幾個重要的概念,一個是節點,一個是Hypervisor,一個是域。1.節點(Node)通常指一個物理機器,在這個物理機上通常運行著多個虛擬客戶機。2.Hypervisor通常指VMM(VirtualMachineManager),例如KVM,Xen,VMware,Hyper-V等。3. 域(Domain),指的是在Hypervisor上運行的一個虛擬機操作系統實例。1.Libvirt簡介Libvirt的主要功能包括:1.虛擬機管理:對節點上的各虛擬機生命周期的管理,比如啟動、停止、暫停、保存、恢復和遷移;也支持對多種設備類型的熱插拔操作,包括:磁盤、網卡、內存和CPU等。2.遠程節點的管理:只要物理節點上運行了Libvirtdaemon(Libvirt守護進程),那么,遠程節點上的管理程序就可以連接到該節點,然后進行管理操作,所有的Libvirt功能就都可以訪問和使用。3.存儲管理:創建不同格式的文件映像(qcow2、vmdk、raw等)、掛接NFS共享、列出現有的LVM卷組、創建新的LVM卷組和邏輯卷、對未處理過的磁盤設備分區、掛接iSCSI共享等等。1.Libvirt簡介Libvirt的主要功能包括:4.網絡接口管理:任何運行了Libvirtdaemon的主機,都可以通過Libvirt管理物理和邏輯的網絡接口。可以列出現有的網絡接口卡,配置網絡接口、創建虛擬網絡接口,以及創建網絡橋接,進行VLAN管理等。5.虛擬NAT和基于路由的網絡:任何運行了Libvirtdaemon的主機,都可以通過Libvirt管理和創建虛擬網絡。Libvirt虛擬網絡使用防火墻規則作為路由器,讓虛擬機可以透明訪問主機的網絡。1.Libvirt簡介Libvirt架構Libvirt概括起來包括一個應用程序編程接口庫(API庫)、一個daemon(libvirtd守護進程)和一個命令行工具(Virsh)。API庫為其他的虛擬機管理工具提供編程的程序接口庫。libvirtd負責對節點上的域進行監管,在使用其他工具管理節點上的域時,libvirtd需要一直在運行狀態。Virsh是Libvirt默認給定的一個對虛擬機進行管理的命令行工具。2.Libvirt的yum安裝在CentOS中可以使用yum命令安裝Libvirt。Libvirt的官方網站是/。2.Libvirt的yum安裝注意事項:在使用Libvirt前需要確保機器已開啟硬件虛擬化,KVM內核模塊已加載,QEMU已安裝。[root@localhost~]#yuminstallLibvirt[root@localhost~]#whichlibvirtd/usr/sbin/libvirtd[root@localhost~]#libvirtd--versionlibvirtd(libvirt)4.5.0[root@localhost~]#whichvirsh/usr/bin/virsh[root@localhost~]#virsh--version4.5.0[root@localhost~]#servicelibvirtdstatus3.libvirtd進程01020304Libvirt的客戶端工具(包括virsh、virt-manager等)可以連接到本地或遠程的libvirtd進程,用于管理節點上的客戶機狀態,包括啟動、關閉、重啟、遷移等,收集節點上的宿主機和客戶機的配置和資源使用狀態。libvirtd是Libvirt虛擬化管理工具的服務器端的守護程序。libvirtd負責執行其他管理工具發送給它的虛擬化管理操作指令。對libvirtd常用的操作方式有“{start|stop|restart|try-restart|reload|force-reload|status}”在CentOS7中libvirtd作為一個服務(service)配置在系統中的,可以通過service命令來對其進行操作。4.Virsh的常用命令Virsh通過調用LibvirtAPI來實現虛擬化的管理,是一個完全在命令行文本模式下運行的工具,系統管理員可以通過腳本程序方便的進行虛擬化的自動部署和管理。Libvirt在安裝時會自動安裝一個SHELL工具Virsh。Virsh是一個虛擬化管理工具,是一個用于管理虛擬化環境中客戶機和Hypervisor的命令行工具。4.Virsh的常用命令Virsh命令行工具非常強大,功能非常豐富,它可以全生命周期的管理KVM虛擬化,比如創建虛擬機,查看虛擬機,動態熱插拔硬盤,給虛擬機做快照,遷移、啟動、停止、掛起、暫停、刪除虛擬機等操作。Virsh管理虛擬化操作時,可以使用兩種工作模式,一種是交互模式,直接連接到相應的Hypervisor上,在命令行輸入virsh命令執行操作并查看返回結果,使用“quit”命令退出連接;另外一種是非交互模式,在終端輸入一個virsh命令,建立到指定URI的一個連接,執行完成后將結果返回到當前的終端并同時斷開連接。4.Virsh的常用命令1.基本命令virshlist#獲取當前節點上所有域的列表virshconsole<ID>#連接到一個域上。virshdomid<Name|UUID>#根據名稱或UUID返回域的ID值virshdomname<ID|UUID>#根據ID或UUID返回域的名稱virshdomstat<[ID|Name|UUID]>#獲取一個域的運行狀態virshdominfo<ID>#獲取一個域的基本信息pwd#打印當前位置cd<NewDir>#進入到某一個目錄下quit|exit#退出4.Virsh的常用命令2.定義和創建、關閉、暫停域virshdefine<VM.xml>#定義一個VM域,使其永久有效,并可使用start來啟動VM。VM.xml會被復制一份到/etc/libvirt/qemu/下。virshcreate<VM.xml>#它可通過VM.xml來啟動臨時VMvirshsuspend<ID>#在內存掛起一臺VMvirshresume<ID>#喚醒一臺VMvirshsave<ID><file.img>#類似于VMware上的暫停,并保存內存數據到image文件。virshrestore<file.img>#重新載入暫停的VMvirshstart<VMName>#重新啟動managedsave保存的VMvirshshutdown<ID>#關閉虛擬機virshreboot<ID>#重新啟動虛擬機virshreset<ID>#強制重啟虛擬機virshdestroy<ID>#刪除一個虛擬機virshundefine<VM.xml>#取消定義的虛擬機4.Virsh的常用命令3.快照管理virshsnapshot-create<VMName|xxx.xml>#創建一個VM快照virshsnapshot-list<VMName>#顯示當前VM的所有快照virshsnapshot-edit<VMName><SnapName>#編輯指定的快照virshsnapshot-delete<VMName><SnapName>#刪除指定的快照virshsnapshot-info<VMName><SnapName>#顯示快照的詳情4.Virsh的常用命令5.VM磁盤管理virshdomblklist<VMName>#顯示VM當前連接的塊設備virshdomblkinfo<VMName></path/to/img.img>#顯示img.img的容量信息。virshdomblkstat<VMName>[--human]</path/to/img.img>#顯示img.img的讀寫等信息的統計結果4.網絡及接口管理virshdomiflist<VMName>#顯示VM的接口信息virshiface-list#顯示物理主機的網絡接口列表virshnet-dumpxml<NetName|UUID>#導出一份xml格式的虛擬網絡配置信息virshnet-create<net.xml>#根據網絡xml配置信息文件創建一個虛擬網絡4.Virsh的常用命令7.內存相關virshdommemstat<ID>#獲取一個VM內存使用情況統計信息。virshsetmem<ID><MemSize>#設置一個VM的內存大小(默認單位:KB)virshfreecell#顯示當前MUMA單元的可用空閑內存virshnodememstats<cell>#顯示VM的(某個)內存單元使用情況的統計6.vCPU相關virshvcpinfo<ID>#查看指定ID的域的vCPU信息virshvcppin<ID><vCPU><pCPU>#將一個VM的vCPU綁定到指定的物理核心上virshsetvcpus<ID><vCPU-Num>#設置一個VM的最多vCPU個數virshnodecpustats<CPU-Num>#顯示VM(某個)CPU使用情況的統計4.Virsh的常用命令8.其它virshdumpxml<ID>#顯示一個運行中的VM的xml格式的配置信息.virshversion#顯示libvirt和Hypervisor的版本信息virshsysinfo#以xml格式打印宿主機的系統信息virshnodeinfo#顯示當前連接節點的基本信息virshuri#顯示當前連接節點的URIvirshhostname#顯示當前主機名virshconnect<URI>#連接到URI指定的Hypervisorvirshqemu-monitor-commanddomain[--hmp]CMD#直接向Qemumonitor中發送命令。Virt-ManagerVirt-Manager的yum安裝Virt-Manager的使用02Virt-ManagerVirt-Manager是一個由紅帽公司發起,全名為VirtualMachineManager的開源虛擬機管理程序。Virt-Manager是用Python編寫的GUI程序,底層使用了Libvirt對各類Hypervisor進行管理。Virt-Manager主要用于管理基于KVM的虛擬機,但是也能管理基于Xen等其他Hypervisor的虛擬機。Virt-Manager提供了圖形化界面來管理KVM的虛擬機,可以同時管理多個宿主機上的虛擬機,前提是宿主機上必須安裝Libvirt。Virt-ManagerVirt-Manager通過豐富直觀的界面給用戶提供了方便易用的虛擬化管理功能,包括:創建、編輯、啟動或停止虛擬機;查看并控制每個虛擬機的控制臺;查看每部虛擬機的性能以及使用率;查看每部正在運行中的虛擬機以及主控端的實時性能及使用率信息;不論是在本機或遠程,皆可使用KVM、Xen、QEMU。Virt-Manager支持絕大部分Hypervisor,并且可以連接本地和網絡上的Hypervisor。用戶在Virt-Managerr中使用圖形界面做的配置會被轉為Libvirt中的XML格式的配置文件,保存在Libvirt相關目錄下。使用Virt-Manager生成Libvirt中虛擬機的配置文件是一個不錯的選擇。1.Virt-Manager的yum安裝Virt-Manager的官方網站是/,在CentOS中使用“yuminstallvirt-manager”安裝即可。2.Virt-Manager的使用在CentOS中打開Virt-Manager在CentOS中使用Virt-Manager非常方便,安裝Virt-Manager后,在“Applications”的“SystemTools”中可以看到“VirtualMachineManager”的圖標,鼠標點擊即可。Virt-Manager應用2.Virt-Manager的使用2.在Virt-Manager中創建虛擬機在Virt-Manager管理界面中,將鼠標放置在“QEMU/KVM”上雙擊,會打開界面“QEMU/KVMConnectionDetails”界面。點擊左上角的電腦小圖標,也可以將鼠標放置在“QEMU/KVM”上右鍵,點擊里面的“New”選項創建虛擬機。2.Virt-Manager的使用2.在Virt-Manager中創建虛擬機2.Virt-Manager的使用2.在Virt-Manager中創建虛擬機2.Virt-Manager的使用2.在Virt-Manager中創建虛擬機在客戶機創建成功后,Virt-Manager會在/etc/libvirt/qemu路徑下生成一個名稱為“ubuntu16.04.xml”的XML配置文件,文件名即為創建的虛擬機名稱ubuntu16.04,該配置文件配置了虛擬機的所有配置信息2.Virt-Manager的使用2.在Virt-Manager中創建虛擬機虛擬機啟動后界面如下所示。使用“cirros”用戶名,“cubswin:)”密碼登錄后,可以正常使用該系統。2.Virt-Manager的使用2.在Virt-Manager中創建虛擬機虛擬機ubuntu16.04的詳細配置信息2.Virt-Manager的使用3.在Virt-Manager中管理虛擬機處于運行狀態的虛擬機的狀態為“Running”,點擊“Open”圖標打開虛擬機窗口界面,點擊圖標啟動虛擬機。圖標“”后有幾個選項,包括“Reboot”、“ShutDown”、“ForceReset”、“ForceOff”和“Save”。點擊“ShutDown”進行虛擬機的正常關閉,使用“ForceOff”進行虛擬機的強制關機,一般盡量避免使用“ForceOff”來強制關機。點擊“Reboot”進行虛擬機的正常重啟,點擊“ForceReset”強制重啟,點擊“Save”會保存當前客戶機的運行狀態。2.Virt-Manager的使用4.建立一個新的連接通過Virt-Manager的菜單“File”中的“AddConnection”,可以在Virt-Manager中建立一個本地或者遠程Hypervisor的連接。Virt-Manager管理本地和遠程主機的虛擬機基于Libvirt的配置與開發Libvirt的配置文件Libvirt中域的XML配置文件含義LibvirtAPI簡介Libvirt建立到Hypervisor的連接LibvirtAPI的C語言使用示例LibvirtAPI的Python語言使用示例031.Libvirt的配置文件Libvirt的配置文件默認放置在/etc/libvirt目錄下:libvirt.conf配置文件:用于配置常用Libvirt遠程連接的別名。文件中以“#”號開頭的行為注釋內容。libvirtd.conf配置文件是libvirtd守護進程的配置文件,配置了許多libvirtd的啟動設置。qemu.conf是Libvirt對QEMU的配置文件,包括VNC、SPICE的設置,以及連接它們的權限認證方式的配置,也包括內存大頁、SELinux、Cgroups等相關配置。qemu目錄:Libvirt使用XML文件對虛擬機進行配置,其中包括虛擬機名稱、分配內存、vCPU等多種信息,定義、創建虛擬機等操作都需要XML配置文件的參與。如果底層虛擬化使用QEMU,那么這個XML配置文件通常放置在Libvirt特定的“qemu”目錄下。2.Libvirt中域的XML配置文件含義1.域的配置最外層是<domain>標簽<!---->中間的內容為注釋部分。<domain>標簽有兩個屬性,“type”屬性指定運行該虛擬機的Hypervisor,“id”屬性是一個唯一標識虛擬機的唯一整數標識符。<name></name>標簽內為虛擬機的簡稱。<uuid></uuid>標簽內為虛擬機的全局唯一標識符。其他的元數據標簽,例如<title>、<description>和<metadata>等。以8.2.2小節中的/etc/libvirt/qemu路徑下的ubuntu16.04..xml配置文件為例,介紹該配置文件的含義。2.Libvirt中域的XML配置文件含義2.內存,CPU,啟動順序等配置<memoryunit=‘KiB’></memory>標簽內容表示客戶機最大可使用的內存。<currentMemory></currentMemory>標簽內容表示啟動時分配給客戶機使用的內存。<vcpu></vcpu>標簽內表示客戶機中vCPU的個數。<os></os>標簽內定義客戶機系統類型及客戶機硬盤和光盤的啟動順序。<clock></clock>標簽定義時鐘設置。<on_poweroff>destroy</on_poweroff>,<on_reboot>restart</on_reboot>和<on_crash>destroy</on_crash>都是libvirt配置文件中對事件的配置。2.Libvirt中域的XML配置文件含義3.設備配置<devices></devices>標簽內放置著客戶機所有的設備配置。<emulator></emulator>標簽內容放置使用的設備模型模擬器的絕對路徑。<disk>標簽表示對域的存儲配置。2.Libvirt中域的XML配置文件含義4.網絡配置<interfacetype=‘network’></interface>標簽內是對域的網絡接口配置。<macaddress='52:54:00:e4:5f:ad'/>用來配置客戶機中網卡的MAC地址。<sourcenetwork='default'/>表示網絡配置方式使用默認方式。<modeltype='virtio'/>表示客戶機中使用的網絡設備類型。<addresstype='pci'domain='0x0000'bus='0x00'slot='0x03'function='0x0'/>表示該網卡在客戶機中的PCI設備編號值。2.Libvirt中域的XML配置文件含義5.其他配置<inputtype=‘tablet’bus=‘usb’/>表示提供tablet這種類型的設備。<inputtype='mouse'bus='ps2'/>表示會讓QEMU模擬PS2接口的鼠標。<inputtype='keyboard'bus='ps2'/>表示會讓QEMU模擬PS2接口的鍵盤。<graphics></graphics>標簽內放置連接到客戶機的圖形顯示方式的配置。<video></video>標簽內放置的是顯卡配置。<memballoonmodel=‘virtio’></memballoon>標簽放置內存的ballooning相關的配置。3.LibvirtAPI簡介LibvirtAPI提供了一系列管理虛擬機的應用程序接口,支持多種語言,最基本最主要的是C語言。LibvirtAPI的官網是/docs.html。在官網中,應用開發的API中“APIreference”是C語言的API。“LanguagebindingandAPImodules”是Libvirt支持的其他語言的API。3.LibvirtAPI簡介3.LibvirtAPI簡介1.libvirt-domain:管理Libvirt域的API,提供了一系列以virDomain開頭的函數。2.libvirt-event:管理事件的API,提供了一系列以virEvent開頭的函數。3.libvirt-host:管理宿主機的API。4.libvirt-network:管理網絡的API,提供了一系列以virConnect和virNetwork開頭的函數。5.libvirt-nodedev:管理節點的API,提供了一系列以virNode開頭的函數。6.libvirt-storage:管理存儲池和卷的API,提供了一系列以virStorage開頭的函數。7.libvirt-stream:管理數據流的API,提供了一系列以virStream開頭的函數。8.virterror:處理libvirt庫的錯誤處理接口。4.Libvirt建立到Hypervisor的連接1.連接本地Hypervisor使用Libvirt連接本地的Hypervisor時,URI的一般格式如下:driver[+transport]:///[path][?extral-param]其中,“driver”是連接Hypervisor的驅動名稱(如qemu,xen等),本書中以QEMU為例,因此為qemu。“transport”是連接所使用的傳輸方式(可以為空,也可以為“unix”這樣的值)。“path”是連接到Hypervisor的路徑。“?extral-param”表示額外需添加的參數。連接QEMU有兩種方式,一種是系統范圍內的特權驅動(“system”實例),一種是用戶相關的無特權驅動(“session”實例)。常用的本地連接QEMU的URI如下:qemu:///systemqemu:///session4.Libvirt建立到Hypervisor的連接2.連接遠程Hypervisor使用Libvirt連接遠程的Hypervisor時,URI的一般格式如下:driver[+transport]:///[user@][host][:port]/[path][?extral-param]其中,driver和本地連接時含義一樣。transport表示傳輸方式,取值通常是ssh,tcp等。user表示連接遠程主機時使用的用戶名。host表示遠程主機的主機名或者是IP地址。port表示遠程主機的端口號。path和extral-param和本地連接時含義一樣。在進行遠程連接時,也有system和session兩種連接方式。4.Libvirt建立到Hypervisor的連接3.使用URI建立連接使用virsh命令的create參數由demo.xml配置文件創建并啟動一個虛擬機,虛擬機名稱為demo。使用“virsh-cqemu:///session”來建立到本地的連接,查看本地運行的虛擬機。可以使用“list”命令查看虛擬機,“shutdown虛擬機名”關閉虛擬機,“quit”命令退出virsh。5.LibvirtAPI的C語言使用示例編譯運行libvirt-conn.c并使用virsh查看當前節點情況在使用virsh啟動demo.xml定義的虛擬機后,將libvirt-conn.c文件使用gcc編譯為可執行文件libvirt-conn,編譯時需要連接virt庫,然后執行該文件即可看到虛擬機的信息。使用LibvirtAPI查詢某個域的信息源碼文件名為libvirt-conn.c,在該例子中使用LibvirtAPI查詢某個域的信息。在該代碼中包含兩個自定義函數,一個是virConnectPtrgetConn(),一個是intgetInfo(intid)。getConn()函數建立一個到Hypervisor的連接。getInfo(intid)函數獲取id為1的客戶機的信息。5.LibvirtAPI的C語言使用示例使用virsh查看虛擬機的相關信息,“domiddemo”命令表示通過虛擬機的name屬性查看虛擬機的ID編號。“domname1”命令表示通過虛擬機的ID編號查看其name屬性。“dominfo1”表示通過虛擬機的ID編號值查看虛擬機信息。libvirt-conn.c代碼的執行結果和virsh命令下顯示的ID號,運行狀態,CPU個數,最大內存,已用內存都保持一致。5.LibvirtAPI的C語言使用示例virsh#domiddemo1virsh#domname1demovirsh#dominfo1……[內容省略]virsh#shutdowndemoDomaindemoisbeingshutdown注意事項:本例是通過使用LibvirtAPI的C語言程序對KVM虛擬機進行查看,虛擬機通過Libvirt中的Virsh命令行工具進行定義并啟動。C語言代碼和Libvirt建立連接,查詢該連接中的虛擬機狀態信息并打印。demo虛擬機是由Libvirt生成并管理,因此虛擬機狀態信息也可以在Virsh的命令行中進行查看。6.LibvirtAPI的Python語言使用示例1.使用LibvirtAPI查詢某個域的信息自定義函數createConnection()用來創建并打開到本地的Libvirt連接,連接失敗打印“FailedtoopenconnectiontoQEMU/KVM”,連接成功打印“-----Connectioniscreatedsuccessfully-----”。自定義函數closeConnection(conn)用來關閉連接conn。關閉成功后打印“Connectionisclosed”。自定義函數getDomInfoByName(conn,name)用于在連接conn中查詢并打印名稱為name的域信息,包括域的ID號,名稱,運行狀態值,基本信息,最大內存值,vCPU的個數等。自定義函數getDomInfoByID(conn,id)用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 高空作業電動吊籃租賃合同
- 樓盤代理合同范本6篇
- 年度檢測合同7篇
- 造型榆樹苗木種植承包合同9篇
- 土地聯產長期承包經營合同7篇
- 2025年餐廳員工入職合同5篇
- 零星材料采購合同范本
- 戶門號更換施工方案
- 科普講解大賽:自然知識
- 攀枝花攀西職業學院《書寫技能(實訓)》2023-2024學年第二學期期末試卷
- 幼小銜接拼音課件
- 生產設備拆除工程施工方案
- 四年級下冊科學第一單元《作業設計》第1-4課習題答案解析(教科版)
- 無障礙公共設施建設的問題及其對策研究
- 醫務人員的職業暴露與防護完整版
- 臨床醫學(專科)畢業綜合考復習題
- 石家莊市存量房買賣合同
- 高一離子方程式書寫專題訓練及答案
- 張元鵬《微觀經濟學》(中級教程)筆記和課后習題詳解
- 如何有效管理90-00后新員工技巧方法-123課件
- 第十三講 全面貫徹落實總體國家安全觀PPT習概論2023優化版教學課件
評論
0/150
提交評論