XX系統(tǒng)測試環(huán)境的容器化部署之路

docker

一個應用想以容器化的形式部署運行起來饰豺,需要經(jīng)過2個步驟:

  1. 構(gòu)建鏡像

  2. 實例化

image.png

以dmp為例肥荔,按照一個鏡像只包含單個應用的原則楔脯,dmp需要構(gòu)建3個鏡像:console污尉、client示弓、front。

那么每次部署需要執(zhí)行 docker build 行冰、docker run 各3次溺蕉,且3個容器run的參數(shù)是很不一樣的,再加上要考慮多個容器之間的依賴悼做、網(wǎng)絡(luò)問題疯特,這就導致部署變得非常復雜。

舉例一個mysql的 docker run :

docker run  -d --rm --name mysql \

                    -v /data/mysql/conf:/etc/mysql/conf.d \

                    -v /data/mysql/init:/docker-entrypoint-initdb.d \

                    -p 3306:3306 \

                    -e MYSQL_ROOT_PASSWORD=123456 \

                    mysql:5.7 \

                    --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci

docker-compose

用途:docker容器快速編排肛走,解決了容器依賴漓雅、組網(wǎng)等問題

適用場景:本地開發(fā)、測試環(huán)境

不適用場景:生產(chǎn)環(huán)境


image.png

docker-compose.yaml朽色,以dmp為例

version: "3"

services:

  console:

    build: ./console

    ports:

      - "8020:8020"

    volumes:

      - /data1/release/dmp/${test_env}/logs:/home/nginx/release/logs

      - /etc/hosts:/etc/hosts

    env_file:

      - ./console/console.env

    networks:

      dmp:

        aliases:

          - console

  client:

    build: ./client

    ports:

      - "8080:8080"

    volumes:

      - /data1/release/dmp/${test_env}/logs:/home/nginx/release/logs

      - /etc/hosts:/etc/hosts

    env_file:

      - ./client/client.env

    networks:

      dmp:

        aliases:

          - client

  front:

    build: ./front

    ports:

      - "${port}:80"

    volumes:

      - /data1/nginx/conf/nginx.conf:/etc/nginx/nginx.conf

      - /data1/nginx/conf/vhosts:/etc/nginx/conf/vhosts

      - /data1/nginx/logs/${test_env}:/data/logs/nginx

      - /data1/release/dmp/${test_env}/front/dmp-resource:/data/www/release/dmp-resource

      - /data1/release/dmp/${test_env}/front/dmp-front-v2:/data/www/release/dmp-front-v2

    networks:

      - dmp

networks:

  dmp:

鏡像倉庫

集中存放docker鏡像的地方邻吞,叫鏡像倉庫,類似于git的遠程倉庫葫男。

鏡像倉庫有公用的如docker hub抱冷,也有私有的registry,比如自己搭建harbor梢褐。

與遠程鏡像倉庫交互:

  1. docker push:將本地鏡像推送至鏡像倉庫

  2. docker pull:從鏡像倉庫拉取鏡像到本地

image.png

鏡像倉庫也可以用來管理helm charts旺遮,后面會介紹到。

kubernetes

what is k8s

Kubernetes 是一個提供了基于容器的應用集群管理解決方案利职,Kubernetes 為容器化應用提供了部署運行趣效、資源調(diào)度瘦癌、服務發(fā)現(xiàn)和動態(tài)伸縮等一系列完整功能猪贪。

Kubernetes 的核心設(shè)計理念是: 用戶定義要部署的應用程序的規(guī)則,而 Kubernetes 則負責按照定義的規(guī)則部署并運行應用程序讯私。如果應用程序出現(xiàn)問題導致偏離了定義的規(guī)則热押,Kubernetes 負責對其進行自動修正。例如:定義的應用規(guī)則要求部署兩個實例(Pod)斤寇,其中一個實例異常終止了桶癣,Kubernetes 會檢查到并重新啟動一個新的實例。

a k8s cluster

image.png
  • Master:負責管理集群娘锁,只有一個

  • Node:節(jié)點是運行容器服務的機器牙寞,可以有多個,可以是虛擬機或者物理機

節(jié)點與master之間通過Kubernetes API進行通信。

https://kubernetes.io/docs/tutorials/kubernetes-basics/

k8s objects

用戶通過使用 Kubernetes API 對象來描述應用程序規(guī)則间雀,包括 Pod悔详、Service、Volume惹挟、Namespace茄螃、Deployment、Job等等连锯。

名詞解釋

Pod:最小管理單元归苍,可以包含一個或多個緊密相連的容器應用

Deployment:為Pod提供聲明式定義

Service:是一個抽象概念,定義了一個服務的多個pod邏輯合集和訪問pod的策略

Labels & Selectors:鍵值對运怖,用來標識和識別對象

Ingress:為進入集群的請求提供路由規(guī)則的集合

ConfigMap:用來保存配置數(shù)據(jù)的鍵值對拼弃,可以是單個屬性,也可以是配置文件

Volumes:數(shù)據(jù)卷驳规,用來做數(shù)據(jù)持久化

一般這些資源對象的定義需要寫入一系列的 YAML 文件中肴敛,如:

apiVersion:  apps/v1  # for versions before 1.9.0 use apps/v1beta2

kind:  Deployment

metadata:

  name:  nginx-deployment

spec:

  selector:

    matchLabels:

      app:  nginx

  replicas:  2  # tells deployment to run 2 pods matching the template

  template:

    metadata:

      labels:

        app:  nginx

    spec:

      containers:

      -  name:  nginx

        image:  nginx:1.7.9

        ports:

        -  containerPort:  80

kubectl

k8s集群的命令行工具,通過kubectl能夠?qū)罕旧磉M行管理吗购,并能夠在集群上進行容器化應用的安裝部署医男。

  • kubectl get - list resources

  • kubectl describe - show detailed information about a resource

  • kubectl logs - print the logs from a container in a pod

  • kubectl exec - execute a command on a container in a pod

kubectl version

kubectl get nodes

kubectl get deployments

kubectl get pods

kubectl describe pods

kubectl logs $pod_name

kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1

kubectl create -f nginx.yaml

Rancher

what is rancher

Rancher是一個開源的企業(yè)級容器管理平臺。通過Rancher捻勉,企業(yè)再也不必自己使用一系列的開源軟件去從頭搭建容器服務平臺镀梭。Rancher提供了在生產(chǎn)環(huán)境中使用的管理Docker和Kubernetes的全棧化容器部署與管理平臺踱启。

使用rancher部署應用

以DMP為例:

image.png

https://k8s-test-rancher.mycompany.com/p/c-xpl64:p-lc589/workloads

工作負載


image.png

負載均衡


image.png

服務發(fā)現(xiàn)


image.png

配置映射


image.png

部署一個DMP下來报账,我們會發(fā)現(xiàn)一個DMP應用需要維護多份YAML文件。面臨問題:

  • 如何管理埠偿、編輯和更新這些分散的 Kubernetes 應用配置文件透罢。

  • 如何把一套相關(guān)的配置文件作為一個應用進行管理。

  • 如何分發(fā)和重用 Kubernetes 的應用配置冠蒋。

Helm

Helm 是 Deis 開發(fā)的一個用于 Kubernetes 應用的包管理工具羽圃,主要用來管理 Charts算芯。有點類似于 Ubuntu 中的 apt 或 CentOS 中的 yum 或 Python 中的 pip 切心。

Helm Chart 是用來封裝 Kubernetes 原生應用程序的一系列 YAML 文件〈挡海可以在你部署應用的時候自定義應用程序的一些 Metadata斩郎,以便于應用程序的分發(fā)脑融。

對于應用發(fā)布者而言,可以通過 Helm 打包應用缩宜、管理應用依賴關(guān)系肘迎、管理應用版本并發(fā)布應用到軟件倉庫。

對于使用者而言,使用 Helm 后不用需要編寫復雜的應用部署文件妓布,可以以簡單的方式在 Kubernetes 上查找窿侈、安裝、升級秋茫、回滾史简、卸載應用程序。

Helm應用

helm chart目錄結(jié)構(gòu)

image.png

helm chart管理

打包后上傳鏡像倉庫進行管理

在rancher上使用helm進行一鍵部署

image.png

image.png

運行中的狀態(tài)


image.png

一鍵回滾肛著、升級圆兵、刪除

image.png

參考文檔:
What is Kubernetes
helm入門指南

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市枢贿,隨后出現(xiàn)的幾起案子殉农,更是在濱河造成了極大的恐慌,老刑警劉巖局荚,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件超凳,死亡現(xiàn)場離奇詭異,居然都是意外死亡耀态,警方通過查閱死者的電腦和手機轮傍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來首装,“玉大人创夜,你說我怎么就攤上這事∠陕撸” “怎么了驰吓?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長系奉。 經(jīng)常有香客問我檬贰,道長,這世上最難降的妖魔是什么缺亮? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任翁涤,我火速辦了婚禮,結(jié)果婚禮上瞬内,老公的妹妹穿的比我還像新娘迷雪。我一直安慰自己限书,他們只是感情好虫蝶,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倦西,像睡著了一般能真。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天粉铐,我揣著相機與錄音疼约,去河邊找鬼。 笑死蝙泼,一個胖子當著我的面吹牛程剥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播汤踏,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼织鲸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了溪胶?” 一聲冷哼從身側(cè)響起搂擦,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎哗脖,沒想到半個月后瀑踢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡才避,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年橱夭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片桑逝。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡徘钥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肢娘,到底是詐尸還是另有隱情呈础,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布橱健,位于F島的核電站而钞,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏拘荡。R本人自食惡果不足惜臼节,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望珊皿。 院中可真熱鬧网缝,春花似錦、人聲如沸蟋定。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驶兜。三九已至扼仲,卻和暖如春远寸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背屠凶。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工驰后, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人矗愧。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓灶芝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親唉韭。 傳聞我的和親對象是個殘疾皇子监署,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355