K8S (kubernetes) & Docker 實(shí)戰(zhàn)之容器化并遷移至云平臺(tái)(一)

關(guān)鍵詞 : K8S; Docker; Kubernetes;遷移;容器;云平臺(tái)

Kubernetes單詞起源于希臘語(yǔ), 是“舵手”或者“領(lǐng)航員”的意思,是“管理者”和“控制論”的根源。 K8s是把用8代替8個(gè)字符“ubernete”而成的縮寫。

對(duì)于使用 Docker & K8S 構(gòu)建容器化生產(chǎn)環(huán)境的好處本文不再贅述,詳細(xì)信息可以去Kubernetes官網(wǎng)以及Docker官網(wǎng)查看。本文以項(xiàng)目從打包到構(gòu)建鏡像,最后部署至云環(huán)境的流程對(duì)整套部署方式進(jìn)行講解,考慮到快速構(gòu)建一個(gè)基本流程概念,本文不對(duì)細(xì)節(jié)進(jìn)行深入。隨著我對(duì)這套技術(shù)的理解,后續(xù)也會(huì)逐漸更新文章來逐個(gè)詳解。如有不足及錯(cuò)誤,歡迎勘正。

1.Docker

  • 如何將項(xiàng)目構(gòu)建成Docker鏡像?

傳統(tǒng)項(xiàng)目遷移至云環(huán)境大致分為以下幾個(gè)步驟:

傳統(tǒng)項(xiàng)目 -→ 構(gòu)建成鏡像(image) -→ 部署在K8S上

  • Docker File

如果想把傳統(tǒng)項(xiàng)目構(gòu)建成鏡像,只需要添加一個(gè)Dokcer File,Docker File是一個(gè)包含一些指令的文件,放置在項(xiàng)目下。其作用是指導(dǎo)Docker在構(gòu)建鏡像時(shí)進(jìn)行的一些操作。詳細(xì)說明參考Docker官方文檔
Docker File 在項(xiàng)目中的樣子如下圖:

DockerFile.png

其中 FROM 表示基于那個(gè)鏡像作為基礎(chǔ)鏡像,這涉及到Docker分層構(gòu)建鏡像的概念,本文作為quick start,在此不做詳細(xì)說明。

  • 開始構(gòu)建Dokcer 鏡像

在本地構(gòu)建Docker鏡像需要事先安裝Docker環(huán)境,具體步驟請(qǐng)參考以下文章。
Windows Docker安裝
Ubuntu Docker安裝
MacOs Docker安裝
Centos Docker安裝

在項(xiàng)目中DockerFile目錄下,打開命令行工具,執(zhí)行docker build .,注意末尾的點(diǎn),這是利用PATH構(gòu)建Docker鏡像。

打包鏡像.png

可以看到構(gòu)建鏡像分為幾步來完成,這取決于你在DockerFile中執(zhí)行的任務(wù)條數(shù),這里可以粗略地理解為每個(gè)條目對(duì)應(yīng)Docker鏡像的一層,就好比漢堡一樣。
構(gòu)建完畢后,執(zhí)行docker images可以看到我們剛剛生成的鏡像。
生成的Docker鏡像.png

  • 使用Docker鏡像

使用docker run IMAGE_ID命令可以使用鏡像創(chuàng)建一個(gè)“容器”并將其啟動(dòng)。說到容器,這其實(shí)是Docker中一個(gè)概念,在這里可以先粗略地理解為由鏡像為模板,生成出來的一個(gè)環(huán)境,在這之中運(yùn)行著我們的項(xiàng)目。本地項(xiàng)目啟動(dòng)以來較多環(huán)境變量參數(shù),這里為了演示方便,拉取Redis官方鏡像并在本地運(yùn)行。拉取鏡像、創(chuàng)建容器并運(yùn)行,結(jié)果如下:

拉取鏡像.png

上圖展示了在IDEA編輯器中使用Shell拉取鏡像,默認(rèn)pull下來的是docker官方的鏡像,就好比我們使用maven或者gradle從中央倉(cāng)庫(kù)下載所需jar包一樣。
創(chuàng)建容器并運(yùn)行.png

到此為止,我們就已經(jīng)將一個(gè)項(xiàng)目構(gòu)建成Docker鏡像并可以在本地運(yùn)行了。

2.將鏡像部署至云平臺(tái)

我們已經(jīng)獲得了Docker鏡像,那么接下來要做的就是在K8S云上環(huán)境把它運(yùn)行起來,交由K8S來管理和運(yùn)維我們的項(xiàng)目。
這里以DevOps方式流程化部署應(yīng)用,首先介紹自動(dòng)化工具Jenkins,隨后簡(jiǎn)要介紹K8S。

  • 自動(dòng)化部署

Jenkins是一款自動(dòng)化流程構(gòu)建工具,可以把我們平時(shí)上線,部署等一系列操作流程化,代碼化。我們這里不做過多介紹,后續(xù)文章將會(huì)逐一詳解,讀者可以暫時(shí)將其理解為使用代碼定義好的上線流程及部署步驟。

  • 使用SCM方式將Pipeline(理解為定義上線流程的代碼)腳本寫好,隨著項(xiàng)目提交至Git。Jenkins在自動(dòng)化上線過程中大致分為以下幾個(gè)步驟:
    1.拉取Git代碼
    2.按照定義好的編譯命令build項(xiàng)目
    3.按照DockerFile定義構(gòu)建鏡像
    4.將鏡像部署在K8S

上述幾個(gè)步驟我們?cè)陧?xiàng)目中增加JenkinsFile文件,這個(gè)文件由腳本語(yǔ)言完成,主要定義了我們要Jenkins做的幾件事的具體實(shí)現(xiàn)方式。

JenkinsFile.png

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

執(zhí)行過程中的打包與構(gòu)建鏡像步驟我們已經(jīng)基本了解,那么項(xiàng)目是如何部署到云上的呢?

  • deployment.yaml: 我們?cè)陧?xiàng)目創(chuàng)建一個(gè)yaml配置文件,隨著項(xiàng)目推送至Git。當(dāng)Jenkins自動(dòng)化構(gòu)建時(shí),部署到K8S這一步就需要這個(gè)yaml文件來指導(dǎo)了。Jenkins會(huì)根據(jù)代碼去Git獲取到我們事先定義好的yaml文件,以其為指導(dǎo),登錄到云環(huán)境并部署(登錄云環(huán)境命令配置在shell中,yaml文件僅作為部署配置)。
    YAML文件.png

YAML文件作為K8S部署時(shí)的指導(dǎo)配置,約定了部署方式、命名空間、采用幾個(gè)pod(可以暫時(shí)理解為節(jié)點(diǎn))、從哪里獲取鏡像、暴露哪些端口等信息。同時(shí)這個(gè)文件還告訴了K8S創(chuàng)建什么樣的服務(wù)(服務(wù)的概念后續(xù)詳解)等配置。
這樣,在自動(dòng)化構(gòu)建出工程的鏡像后,就可以依據(jù)這樣的配置文件將項(xiàng)目(鏡像)部署至云環(huán)境了。
成功執(zhí)行構(gòu)建流程后的Jenkins Pipeline如下圖所示:


Pipeline執(zhí)行完畢.png
  • 云上初見
  • 經(jīng)過一系列構(gòu)建流程,我們終于可以去看看項(xiàng)目在云上的樣子了。為了更直觀展示,這里使用圖形界面登錄云環(huán)境。選擇正確的命名空間,找到我們部署的項(xiàng)目:


    部署在K8S中.png

    這里考慮資源問題,這里只配置了2個(gè)Pod,至此,項(xiàng)目部署至云上結(jié)束。

總結(jié)

  • 這篇文章作為quick start較為粗略地介紹了項(xiàng)目部署至云環(huán)境的大致流程,后續(xù)隨著我對(duì)Docker + Jenkins + Kubernetes 等技術(shù)的理解加深,還會(huì)繼續(xù)學(xué)習(xí)與分享。
    尊重原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容