顧偉
摘要:隨著信息系統(tǒng)不斷增多,企業(yè)對(duì)信息系統(tǒng)的運(yùn)維壓力和對(duì)資源的需求不斷增加。本文主要探討了基于容器技術(shù)的應(yīng)用系統(tǒng)部署,達(dá)到企業(yè)節(jié)約IT投入成本、提升企業(yè)信息系統(tǒng)的運(yùn)維能力。
關(guān)鍵詞:容器技術(shù);內(nèi)網(wǎng);鏡像
一、部署內(nèi)網(wǎng)鏡像倉庫并導(dǎo)入鏡像
由于內(nèi)網(wǎng)服務(wù)器不能訪問外網(wǎng)資源,內(nèi)網(wǎng)服務(wù)器將無法下載Docker官方鏡像倉庫hub.docker.com中的鏡像文件,因此需要在內(nèi)網(wǎng)中搭建一臺(tái)鏡像倉庫服務(wù)器便于各個(gè)應(yīng)用系統(tǒng)部署容器。Docker公司已將鏡像倉庫Registry服務(wù)代碼開源,并在hub.docker.com網(wǎng)站提供Registry的docker鏡像,因此可以非常方便的使用容器方式部署鏡像倉庫。
1.1安裝docker服務(wù)
在使用命令“yum install docker”安裝docker服務(wù);
1.2下載Registry服務(wù)鏡像
在一臺(tái)可以訪問外網(wǎng)并裝有docker服務(wù)的Linux系統(tǒng)上運(yùn)行“docker pull registry”命令,系統(tǒng)將下載最新的Registry服務(wù)鏡像:
1.3導(dǎo)入鏡像
導(dǎo)入Registry服務(wù)鏡像到內(nèi)網(wǎng)服務(wù)器:使用“docker save -o registry.tar registry”命令將Registry服務(wù)鏡像導(dǎo)出為registry.tar文件,拷貝文件到內(nèi)網(wǎng)的10.1.1.3服務(wù)器上,再運(yùn)行“docker load --input registry.tar”命令將Registry服務(wù)鏡像導(dǎo)入到本地服務(wù)器。
1.4創(chuàng)建https證書
創(chuàng)建https證書:由于Registry服務(wù)默認(rèn)需要使用https,因此需要使用“openssl req -new -x509 -days 35600 -nodes -out ./web.crt ?-keyout ./ web.key”命令創(chuàng)建網(wǎng)站證書,
1.5 創(chuàng)建并啟動(dòng)Registry服務(wù)容器,推送鏡像到倉庫
使用命令“docker tag docker.io/鏡像名 10.1.1.3/鏡像名 ; docker push 10.1.1.3/鏡像名”可以將從外網(wǎng)導(dǎo)入的各個(gè)鏡像推送到10.1.1.3鏡像倉庫中,在其他服務(wù)器就可以使用“docker pull 10.1.1.3/鏡像名”拉取需要的鏡像了。
二、使用Docker Compose部署應(yīng)用的示例
以某部門基礎(chǔ)資料臺(tái)賬庫項(xiàng)目為例,該項(xiàng)目使用NextCloud開源網(wǎng)盤系統(tǒng)作為文件存儲(chǔ)、同步、共享的資料庫,部署在一臺(tái)CentOS Linux服務(wù)器上。NextCloud開源網(wǎng)盤系統(tǒng)由MariaDB數(shù)據(jù)庫服務(wù)和NextCloud應(yīng)用服務(wù)組成,需要部署對(duì)應(yīng)的容器。完成該應(yīng)用系統(tǒng)的部署需要如下幾個(gè)步驟:
2.1安裝Docker與docker-compose
使用命令“yum install docker docker-compose”安裝docker服務(wù)和docker-compose工具;
2.2創(chuàng)建工作目錄和容器配置文件
在數(shù)據(jù)盤上創(chuàng)建工作目錄,并在工作目錄里創(chuàng)建docker-compose.yml容器配置文件。容器配置文件定義了容器鏡像名稱、版本號(hào)、數(shù)據(jù)卷的掛載目錄、容器的環(huán)境變量、對(duì)外提供服務(wù)的端口等配置項(xiàng)。
2.3創(chuàng)建并啟動(dòng)容器
容器配置文件中指定了兩個(gè)容器鏡像——MariaDB:10.3和NextCloud: 18.0.3,均是由官方開發(fā)人員制作,然后上傳到hub.docker.com公共鏡像倉庫服務(wù)器以供所有人免費(fèi)使用。由于服務(wù)器不能訪問外網(wǎng),本項(xiàng)目部署前已將兩個(gè)鏡像導(dǎo)入自建的內(nèi)網(wǎng)鏡像倉庫服務(wù)器10.1.1.3中。此時(shí),在工作目錄里執(zhí)行“docker-compose up -d”命令,docker-compose將從內(nèi)網(wǎng)鏡像倉庫拉取鏡像文件到本地服務(wù)器,并以鏡像為模板,按照容器配置文件中的定義自動(dòng)創(chuàng)建并啟動(dòng)兩個(gè)容器。
三、使用Kubernetes實(shí)現(xiàn)無狀態(tài)應(yīng)用的負(fù)載均衡與高可用的示例
在Kubernetes中,創(chuàng)建了Service對(duì)象后,會(huì)自動(dòng)對(duì)匹配的容器實(shí)現(xiàn)負(fù)載均衡;創(chuàng)建Deployment對(duì)象后,會(huì)自動(dòng)對(duì)匹配的容器實(shí)現(xiàn)高可用機(jī)制。以在四臺(tái)服務(wù)器組成的Kubernetes集群上部署三個(gè)nginx服務(wù)并實(shí)現(xiàn)負(fù)載均衡和高可用為例,通過容器和對(duì)象配置文件nginx-guwei.yaml創(chuàng)建一個(gè)Deployment對(duì)象、三個(gè)nginx容器和一個(gè)Service對(duì)象,訪問集群服務(wù)ip,Kubernetes系統(tǒng)會(huì)自動(dòng)輪詢?nèi)齻€(gè)nginx容器,并返回所在容器的IP地址;刪除一個(gè)nginx容器,系統(tǒng)會(huì)自動(dòng)重建一個(gè)nginx容器,使nginx容器的數(shù)量始終保持為三。步驟如下:
3.1創(chuàng)建nginx-guwei.yaml配置文件
在文件中定義對(duì)象與容器名稱、容器副本數(shù)量、鏡像名稱與版本號(hào)、nginx容器的主頁內(nèi)容、對(duì)外提供服務(wù)的端口等配置項(xiàng)。
3.2創(chuàng)建并啟用對(duì)象和容器
執(zhí)行“ kubectl apply -f nginx-guwei.yaml”命令創(chuàng)建容器和對(duì)象,查看容器和對(duì)象信息可以發(fā)現(xiàn),kubernetes已經(jīng)創(chuàng)建了一個(gè)名為“guwei-web”的Deployment對(duì)象、三個(gè)名稱前綴為“guwei-web-5bb7bc98bc-”的nginx容器(分別運(yùn)行在三個(gè)服務(wù)器上)和一個(gè)名為“guwei-lb-ha”的Service對(duì)象。
3.3測(cè)試自動(dòng)負(fù)載均衡
使用curl命令多次訪問集群IP:192.168.239.90 ,系統(tǒng)會(huì)以輪詢的方式返回三個(gè)nginx容器的IP,這證明系統(tǒng)已經(jīng)自動(dòng)實(shí)現(xiàn)了輪詢方式的負(fù)載均衡。
當(dāng)前,各個(gè)公司正大力推進(jìn)私有云的落地部署工作,其使用的主要底層技術(shù)就是基于Kubernetes的容器化技術(shù),能夠有效減少資源的消耗,降低運(yùn)維的復(fù)雜度,規(guī)范應(yīng)用系統(tǒng)部署,提升信息系統(tǒng)的質(zhì)量。因此基于上述原因和容器技術(shù)的優(yōu)勢(shì),有必要在公司范圍內(nèi)開展應(yīng)用系統(tǒng)容器化部署,從而節(jié)約IT投入成本、提升信息系統(tǒng)的運(yùn)維能力。
參考文獻(xiàn)
[1]James Turnbull.The Docker Book.北京.人民郵電出版社,2016.4
[2]閆健勇,龔正,吳治輝,等.Kubernetes權(quán)威指南:從Docker到Kubernetes實(shí)踐全接觸(紀(jì)念版).北京.電子工業(yè)出版社,2017.9