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