關(guān)鍵詞 : K8S; Docker; Kubernetes;遷移;容器;云平臺
Kubernetes單詞起源于希臘語, 是“舵手”或者“領(lǐng)航員”的意思,是“管理者”和“控制論”的根源。 K8s是把用8代替8個字符“ubernete”而成的縮寫。
對于使用 Docker & K8S 構(gòu)建容器化生產(chǎn)環(huán)境的好處本文不再贅述,詳細(xì)信息可以去Kubernetes官網(wǎng)以及Docker官網(wǎng)查看。本文以項目從打包到構(gòu)建鏡像,最后部署至云環(huán)境的流程對整套部署方式進行講解,考慮到快速構(gòu)建一個基本流程概念,本文不對細(xì)節(jié)進行深入。隨著我對這套技術(shù)的理解,后續(xù)也會逐漸更新文章來逐個詳解。如有不足及錯誤,歡迎勘正。
1.Docker
-
如何將項目構(gòu)建成Docker鏡像?
傳統(tǒng)項目遷移至云環(huán)境大致分為以下幾個步驟:
傳統(tǒng)項目 -→ 構(gòu)建成鏡像(image) -→ 部署在K8S上
-
Docker File
如果想把傳統(tǒng)項目構(gòu)建成鏡像,只需要添加一個Dokcer File,Docker File是一個包含一些指令的文件,放置在項目下。其作用是指導(dǎo)Docker在構(gòu)建鏡像時進行的一些操作。詳細(xì)說明參考Docker官方文檔
Docker File 在項目中的樣子如下圖:

其中 FROM 表示基于那個鏡像作為基礎(chǔ)鏡像,這涉及到Docker分層構(gòu)建鏡像的概念,本文作為quick start,在此不做詳細(xì)說明。
-
開始構(gòu)建Dokcer 鏡像
在本地構(gòu)建Docker鏡像需要事先安裝Docker環(huán)境,具體步驟請參考以下文章。
Windows Docker安裝
Ubuntu Docker安裝
MacOs Docker安裝
Centos Docker安裝
在項目中DockerFile目錄下,打開命令行工具,執(zhí)行docker build .,注意末尾的點,這是利用PATH構(gòu)建Docker鏡像。

可以看到構(gòu)建鏡像分為幾步來完成,這取決于你在DockerFile中執(zhí)行的任務(wù)條數(shù),這里可以粗略地理解為每個條目對應(yīng)Docker鏡像的一層,就好比漢堡一樣。
構(gòu)建完畢后,執(zhí)行
docker images可以看到我們剛剛生成的鏡像。
-
使用Docker鏡像
使用docker run IMAGE_ID命令可以使用鏡像創(chuàng)建一個“容器”并將其啟動。說到容器,這其實是Docker中一個概念,在這里可以先粗略地理解為由鏡像為模板,生成出來的一個環(huán)境,在這之中運行著我們的項目。本地項目啟動以來較多環(huán)境變量參數(shù),這里為了演示方便,拉取Redis官方鏡像并在本地運行。拉取鏡像、創(chuàng)建容器并運行,結(jié)果如下:

上圖展示了在IDEA編輯器中使用Shell拉取鏡像,默認(rèn)pull下來的是docker官方的鏡像,就好比我們使用maven或者gradle從中央倉庫下載所需jar包一樣。

到此為止,我們就已經(jīng)將一個項目構(gòu)建成Docker鏡像并可以在本地運行了。
2.將鏡像部署至云平臺
我們已經(jīng)獲得了Docker鏡像,那么接下來要做的就是在K8S云上環(huán)境把它運行起來,交由K8S來管理和運維我們的項目。
這里以DevOps方式流程化部署應(yīng)用,首先介紹自動化工具Jenkins,隨后簡要介紹K8S。
-
自動化部署
Jenkins是一款自動化流程構(gòu)建工具,可以把我們平時上線,部署等一系列操作流程化,代碼化。我們這里不做過多介紹,后續(xù)文章將會逐一詳解,讀者可以暫時將其理解為使用代碼定義好的上線流程及部署步驟。
- 使用SCM方式將Pipeline(理解為定義上線流程的代碼)腳本寫好,隨著項目提交至Git。Jenkins在自動化上線過程中大致分為以下幾個步驟:
1.拉取Git代碼
2.按照定義好的編譯命令build項目
3.按照DockerFile定義構(gòu)建鏡像
4.將鏡像部署在K8S
上述幾個步驟我們在項目中增加JenkinsFile文件,這個文件由腳本語言完成,主要定義了我們要Jenkins做的幾件事的具體實現(xiàn)方式。

圖中幾個stage就是我們要做的幾個步驟的定義,這里每個stage會執(zhí)行我事先寫好的linux shell,這些shell的目的就是上述幾個部署步驟,編譯項目→打包→打鏡像→部署至K8S。具體的shell后續(xù)文章進行分解。
準(zhǔn)備好Jenkinsfile(指導(dǎo)Jenkins執(zhí)行的腳本)后,在Jenkins創(chuàng)建Pipeline(流水線),并選擇SCM方式,配置好項目的Git地址、分支、拉取權(quán)限、Jenkinsfile路徑后,就可以執(zhí)行了。

執(zhí)行過程中的打包與構(gòu)建鏡像步驟我們已經(jīng)基本了解,那么項目是如何部署到云上的呢?
-
deployment.yaml: 我們在項目創(chuàng)建一個yaml配置文件,隨著項目推送至Git。當(dāng)Jenkins自動化構(gòu)建時,部署到K8S這一步就需要這個yaml文件來指導(dǎo)了。Jenkins會根據(jù)代碼去Git獲取到我們事先定義好的yaml文件,以其為指導(dǎo),登錄到云環(huán)境并部署(登錄云環(huán)境命令配置在shell中,yaml文件僅作為部署配置)。
YAML文件.png
YAML文件作為K8S部署時的指導(dǎo)配置,約定了部署方式、命名空間、采用幾個pod(可以暫時理解為節(jié)點)、從哪里獲取鏡像、暴露哪些端口等信息。同時這個文件還告訴了K8S創(chuàng)建什么樣的服務(wù)(服務(wù)的概念后續(xù)詳解)等配置。
這樣,在自動化構(gòu)建出工程的鏡像后,就可以依據(jù)這樣的配置文件將項目(鏡像)部署至云環(huán)境了。
成功執(zhí)行構(gòu)建流程后的Jenkins Pipeline如下圖所示:

-
云上初見
-
經(jīng)過一系列構(gòu)建流程,我們終于可以去看看項目在云上的樣子了。為了更直觀展示,這里使用圖形界面登錄云環(huán)境。選擇正確的命名空間,找到我們部署的項目:
部署在K8S中.png
這里考慮資源問題,這里只配置了2個Pod,至此,項目部署至云上結(jié)束。
總結(jié)
- 這篇文章作為quick start較為粗略地介紹了項目部署至云環(huán)境的大致流程,后續(xù)隨著我對Docker + Jenkins + Kubernetes 等技術(shù)的理解加深,還會繼續(xù)學(xué)習(xí)與分享。
尊重原創(chuàng),轉(zhuǎn)載請注明出處。

