容器云服務(wù)架構(gòu)與運維 課件 第8、9章 Kubernetes 集群服務(wù)、基于K8S 的CICD 服務(wù)_第1頁
容器云服務(wù)架構(gòu)與運維 課件 第8、9章 Kubernetes 集群服務(wù)、基于K8S 的CICD 服務(wù)_第2頁
容器云服務(wù)架構(gòu)與運維 課件 第8、9章 Kubernetes 集群服務(wù)、基于K8S 的CICD 服務(wù)_第3頁
容器云服務(wù)架構(gòu)與運維 課件 第8、9章 Kubernetes 集群服務(wù)、基于K8S 的CICD 服務(wù)_第4頁
容器云服務(wù)架構(gòu)與運維 課件 第8、9章 Kubernetes 集群服務(wù)、基于K8S 的CICD 服務(wù)_第5頁
已閱讀5頁,還剩146頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

容器云服務(wù)架構(gòu)與運維單元8Kubernetes集群服務(wù)學(xué)習(xí)目標(biāo)了解Kubernetes的概念、特性;理解Kubernetes集群架構(gòu)和核心概念;掌握Kubernetes集群的安裝部署和應(yīng)用體驗;掌握Kubernetes服務(wù)運維與實戰(zhàn)等技能。8.1認(rèn)識Kubernetes集群服務(wù)8.2

使用Kubernetes集群服務(wù)8.1認(rèn)識Kubernetes集群服務(wù)8.1.1Kubernetes介紹

Kubernetes簡介Kubernetes是一個全新的基于容器技術(shù)的分布式架構(gòu)解決方案,是Google開源的一個容器集群管理系統(tǒng)。Kubernetes這個名字源于希臘語,意為“舵手”或“飛行員”。K8S這個縮寫是因為K和S之間有8個字符的關(guān)系,所以Kubernetes簡稱K8S。Kubernetes是一個一站式的完備的分布式系統(tǒng)開發(fā)和支撐平臺,更是一個開放平臺,對現(xiàn)有的編程語言、編程框架、中間件沒有任何侵入性。Kubernetes提供了完善的管理工具,這些工具涵蓋了開發(fā)、部署測試、運維監(jiān)控在內(nèi)的各個環(huán)節(jié)。8.1.1Kubernetes介紹

Kubernetes的特性(1)自我修復(fù)在節(jié)點出現(xiàn)故障時,重新啟動運行失敗的容器,替換和重新部署,保證預(yù)期的副本數(shù)量;刪除健康檢查未通過的容器,并且在未準(zhǔn)備好之前不會處理用戶的請求,確保線上服務(wù)不中斷。(2)彈性伸縮使用命令、UI或者基于CPU使用情況自動快速擴容和縮容應(yīng)用程序?qū)嵗?,保證應(yīng)用業(yè)務(wù)高峰并發(fā)時的高可用性;業(yè)務(wù)低峰時回收資源,以最小成本運行服務(wù)。(3)自動部署和回滾K8S采用滾動更新策略更新應(yīng)用,一次更新一個Pod,而不是同時刪除所有Pod,如果更新過程中出現(xiàn)問題,將回滾更改,確保升級不影響業(yè)務(wù)。8.1.1Kubernetes介紹

Kubernetes的特性(4)服務(wù)發(fā)現(xiàn)和負(fù)載均衡K8S為多個容器提供一個統(tǒng)一的訪問入口(內(nèi)部IP地址和一個DNS名稱),并且負(fù)載均衡關(guān)聯(lián)的所有容器,使得用戶無須考慮容器IP問題。(5)機密和配置管理管理機密數(shù)據(jù)和應(yīng)用程序配置,而不需要把敏感數(shù)據(jù)暴露在鏡像里,提高敏感數(shù)據(jù)的安全性,并可以將一些常用的配置存儲在K8S中,方便應(yīng)用程序的使用。(6)存儲編排掛載外部存儲系統(tǒng),無論是來自本地存儲、公有云,還是網(wǎng)絡(luò)存儲,都作為集群資源的一部分使用,極大地提高存儲使用的靈活性。(7)批處理提供一次性任務(wù)、定時任務(wù)服務(wù),滿足批量數(shù)據(jù)處理和分析的場景。8.1.1Kubernetes介紹

Kubernetes集群架構(gòu)Kubernetes集群架構(gòu)以及相關(guān)的核心組件如圖所示:8.1.1Kubernetes介紹

Kubernetes集群架構(gòu)一個Kubernetes集群一般包含一個Master節(jié)點和多個Node節(jié)點,一個節(jié)點可以看成是一臺物理機或虛擬機。Master是K8S的集群控制節(jié)點,每個K8S集群里都需要有一個Master節(jié)點來負(fù)責(zé)整個集群的管理和控制,基本上K8S所有的控制命令都是發(fā)給它的,由它來負(fù)責(zé)具體的執(zhí)行過程。Master節(jié)點通常會占據(jù)一個獨立的服務(wù)器,它太重要了,如果它不可用,那么所有的控制命令都將失效。Master節(jié)點上運行著以下關(guān)鍵組件。(1)Kube-APIServerKube-APIServer是集群的統(tǒng)一入口、各組件協(xié)調(diào)者,以HTTPRest提供接口服務(wù),所有對象資源的增、刪、改、查和監(jiān)聽操作都交給APIServer處理后再提交給Etcd存儲。8.1.1Kubernetes介紹

Kubernetes集群架構(gòu)(2)Kube-Controller-ManagerKube-Controller-Manager是K8S里所有資源對象的自動化控制中心,處理集群中的常規(guī)后臺任務(wù),一個資源對應(yīng)一個控制器,而Controller-Manager就是負(fù)責(zé)管理這些控制器的。(3)Kube-Scheduler根據(jù)調(diào)度算法為新創(chuàng)建的Pod選擇一個Node節(jié)點,可以部署在同一個節(jié)點上,也可以部署在不同的節(jié)點上。(4)EtcdEtcd是一個分布式的、一致的Key-Value存儲,主要用途是共享配置和服務(wù)發(fā)現(xiàn)、保存集群狀態(tài)數(shù)據(jù),比如Pod、Service等對象信息。8.1.1Kubernetes介紹

Kubernetes集群架構(gòu)Node節(jié)點上運行著以下關(guān)鍵組件:①Kubelet。Kubelet是Master在Node節(jié)點上的Agent(代理),與Master密切協(xié)作,管理本機運行容器的生命周期,負(fù)責(zé)Pod對應(yīng)的容器的創(chuàng)建、啟停等任務(wù),實現(xiàn)集群管理的基本功能。②Kube-Proxy。在Node節(jié)點上實現(xiàn)Pod網(wǎng)絡(luò)代理,實現(xiàn)KubernetesService的通信,維護(hù)網(wǎng)絡(luò)規(guī)則和四層負(fù)載均衡工作。③DockerEngine。Docker引擎,負(fù)責(zé)本機的容器創(chuàng)建和管理工作。Node節(jié)點可以在運行期間動態(tài)增加到K8S集群中,前提是這個節(jié)點上已經(jīng)正確安裝、配置和啟動了上述關(guān)鍵組件。8.1.1Kubernetes介紹

Kubernetes的核心概念(1)PodPod是K8S中最重要也是最基本的概念,Pod是最小的部署單元,是一組容器的集合。每個Pod都由一個特殊的根容器(Pause容器),以及一個或多個緊密相關(guān)的用戶業(yè)務(wù)容器組成。在K8S中,不會直接對容器進(jìn)行操作,而是把容器包裝成Pod再進(jìn)行管理,Pod在英文中的意思是豌豆莢,可以把容器想像成豌豆莢里的豆子,把一個或多個關(guān)系緊密的豆子包在一起就是豌豆莢(一個Pod)。Pod是運行服務(wù)的基礎(chǔ)。Pause容器是Pod的根容器,以它的狀態(tài)代表整個容器組的狀態(tài)。K8S為每個Pod都分配了唯一的IP地址,稱為PodIP。Pod里的多個業(yè)務(wù)容器共享Pause容器的IP,共享Pause容器掛載的Volume。8.1.1Kubernetes介紹

Kubernetes的核心概念(2)Label標(biāo)簽,附加到某個資源上,用于關(guān)聯(lián)、查詢和篩選對象。一個Label是一個Key=Value的鍵值對,Key與Value由用戶自己指定。Label可以附加到各種資源上,一個資源對象可以定義任意數(shù)量的Label,同一個Label也可以被添加到任意數(shù)量的資源上。用戶可以通過給指定的資源對象捆綁一個或多個不同的Label來實現(xiàn)多維度的資源分組管理功能,以便于靈活、方便地進(jìn)行資源分配、調(diào)度、配置、部署等工作。K8S通過LabelSelector(標(biāo)簽選擇器)來查詢和篩選擁有某些Label的資源對象。LabelSelector有基于等式(name=label1)和基于集合[namein(label1,label2)]兩種方式。8.1.1Kubernetes介紹

Kubernetes的核心概念(3)ReplicaSet(RC)ReplicaSet用來確保預(yù)期的Pod副本數(shù)量,如果有過多的Pod副本在運行,系統(tǒng)就會停掉一些Pod,否則系統(tǒng)就會再自動創(chuàng)建一些Pod。實際工作過程中很少單獨使用ReplicaSet,它主要被Deployment這個更高層的資源對象使用,從而形成一整套Pod創(chuàng)建、刪除、更新的編排機制。(4)DeploymentDeployment用于部署無狀態(tài)應(yīng)用,Deployment為Pod和ReplicaSet提供聲明式更新,只需要在Deployment中描述想要的目標(biāo)狀態(tài),Deployment就會將Pod和ReplicaSet的實際狀態(tài)改變到目標(biāo)狀態(tài)。8.1.1Kubernetes介紹

Kubernetes的核心概念(5)HorizontalPodAutoscaler(HPA)HPA為Pod橫向自動擴容,也是K8S的一種資源對象。HPA通過追蹤分析RC的所有目標(biāo)Pod的負(fù)載變化情況,來確定是否需要針對性地調(diào)整目標(biāo)Pod的副本數(shù)量。(6)ServiceService定義了一個服務(wù)的訪問入口,通過LabelSelector與Pod副本集群之間“無縫對接”,定義了一組Pod的訪問策略,防止Pod失聯(lián)。創(chuàng)建Service時,K8S會自動為它分配一個全局唯一的虛擬IP地址,即ClusterIP。服務(wù)發(fā)現(xiàn)就是通過Service的Name和Service的ClusterIP地址做一個DNS域名映射來解決的。8.1.1Kubernetes介紹

Kubernetes的核心概念(7)NamespaceNamespace即命名空間,Namespace多用于實現(xiàn)多用戶的資源隔離。Namespace通過將集群內(nèi)部的資源對象“分配”到不同的Namespace中,形成邏輯上分組的不同項目、小組或用戶組。K8S集群在啟動后,會創(chuàng)建一個名為default的Namespace,如果不特別指明Namespace,則創(chuàng)建的Pod、RC、Service都將被創(chuàng)建到default下。當(dāng)給每個用戶創(chuàng)建一個Namespace來實現(xiàn)多用戶的資源隔離時,還可以結(jié)合K8S的資源配額管理,限定不同用戶能占用的資源,例如CPU使用量、內(nèi)存使用量等。8.1.2

Kubernetes發(fā)展部署方式的發(fā)展Kubernetes的發(fā)展就是部署方式的發(fā)展,回顧這些年來的部署方式,從傳統(tǒng)的硬件服務(wù)部署(傳統(tǒng)部署時代)到虛擬機部署(虛擬化部署時代)再到容器化部署(容器部署時代),發(fā)展歷程如圖所示。8.1.2

Kubernetes發(fā)展Kubernetes的發(fā)展(1)2013年——Docker容器誕生(2)2014年——Docker發(fā)布編排工具(3)Docker和Mesosphere公司的競爭(4)Docker和CoreOS結(jié)束合作(5)OCI標(biāo)準(zhǔn)的制定(6)2014年——Kubernetes誕生(7)2015年——CNCF基金會成立(8)2016年——Docker放棄Swarm(9)2017年——Docker將Containerd捐獻(xiàn)給CNCF社區(qū)8.2

使用Kubernetes集群服務(wù)(1)規(guī)劃節(jié)點Kubernetes實驗節(jié)點規(guī)劃如下表所示。8.2.1

Kubernetes集群服務(wù)案例部署環(huán)境準(zhǔn)備(2)基礎(chǔ)準(zhǔn)備準(zhǔn)備好VMwareWorkstation工具和CentOS7.5版本虛擬機,使用CentOS7.5虛擬機快照,克隆一臺虛擬機,云主機配置自定義,推薦配置4vCPU、12GB內(nèi)存、100GB硬盤,網(wǎng)絡(luò)使用NAT模式,master節(jié)點IP設(shè)置為9,推薦設(shè)置主機密碼為000000。自行將虛擬機配置好IP、安裝Docker服務(wù),關(guān)閉SELinux和防火墻服務(wù)。環(huán)境準(zhǔn)備8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(1)部署架構(gòu)K8S集群中有管理節(jié)點與工作節(jié)點兩種類型,部署架構(gòu)如圖所示。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(2)環(huán)境準(zhǔn)備使用VMwareWorkstation進(jìn)行實驗,考慮到PC的配置,使用單節(jié)點安裝Kubernetes服務(wù),將Master節(jié)點和Node節(jié)點安裝在一個節(jié)點上,配置如下表所示。8.2.1

Kubernetes集群服務(wù)案例部署此次安裝Kubernetes服務(wù)的系統(tǒng)為CentOS7.5-1804;Docker版本為docker-ce-19.03.13;Kubernetes版本為1.18.1。Kubernetes部署(3)安裝Docker并部署Harbor①基礎(chǔ)設(shè)置。使用遠(yuǎn)程連接工具SSH到9節(jié)點,修改主機名為master,并關(guān)閉該節(jié)點的SELinux和防火墻服務(wù),關(guān)于如何修改主機名和關(guān)閉SELinux及防火墻服務(wù),此處不再贅述,修改完之后,如下所示:[root@master~]#hostnamectlStatichostname:master......[root@master~]#getenforceDisabled[root@master~]#systemctlstatusfirewalld●firewalld.service-firewalld-dynamicfirewalldaemonLoaded:loaded(/usr/lib/systemd/system/firewalld.service;disabled;vendorpreset:enabled)Active:inactive(dead)Docs:man:firewalld(1)8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(3)安裝Docker并部署Harbor②刪除防火墻規(guī)則。將master節(jié)點的iptables規(guī)則清除,命令如下:[root@master~]#iptables–F[root@master~]#iptables–X[root@master~]#iptables–Z[root@master~]#/usr/sbin/iptables-save③配置YUM源。將提供的CentOS-7-x86_64-DVD-1804.iso和chinaskills_cloud_paas.iso鏡像文件上傳至master節(jié)點的/root目錄下,把CentOS-7-x86_64-DVD-1804.iso掛載到/opt/centos目錄下(/opt/centos目錄需自行創(chuàng)建),然后將chinaskills_cloud_paas.iso掛載到/mnt下,并將/mnt目錄下的所有文件及軟件包復(fù)制至/opt目錄下。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(3)安裝Docker并部署Harbor做完上述操作后,創(chuàng)建本地YUM源文件local.repo,文件內(nèi)容如下:[root@master~]#cat/etc/yum.repos.d/local.repo[k8s]name=k8sbaseurl=file:///opt/kubernetes-repogpgcheck=0enabled=1[centos]name=centosbaseurl=file:///opt/centosgpgcheck=0enabled=18.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(3)安裝Docker并部署Harbor④安裝Docker及Harbor。進(jìn)入/opt目錄,安裝Docker服務(wù)和Harbor鏡像倉庫的操作均已整理成腳本k8s_harbor_install.sh,在master節(jié)點執(zhí)行腳本k8s_harbor_install.sh即可完成Docker與Harbor倉庫的搭建,命令如下:[root@masteropt]#./k8s_harbor_install.sh等待一段時間后,Docker服務(wù)與Harbor倉庫安裝完畢,登錄9訪問Harbor倉庫界面(登錄用戶為admin;密碼為Harbor12345)。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(3)安裝Docker并部署HarborHarbor倉庫界面如圖所示:8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(4)上傳鏡像上傳鏡像的操作前先生成腳本k8s_image_push.sh,執(zhí)行該腳本,再上傳鏡像,命令如下:[root@masteropt]#./k8s_image_push.sh輸入鏡像倉庫地址(不加http/https):9輸入鏡像倉庫用戶名:admin輸入鏡像倉庫用戶密碼:Harbor12345您設(shè)置的倉庫地址為:9,用戶名:admin,密碼:xxx是否確認(rèn)(Y/N):Y8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(4)上傳鏡像進(jìn)入Harbor倉庫library項目查看鏡像列表,如圖所示。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(5)部署Kubernetes部署Kubernetes服務(wù)的操作步驟也已經(jīng)生成了腳本,分別為k8s_master_install.sh和k8s_node_install.sh。因為此處將Master節(jié)點和Node節(jié)點合并了,只需要執(zhí)行k8s_master_install.sh一個腳本,命令如下:[root@masteropt]#./k8s_master_install.sh在master節(jié)點執(zhí)行刪除污點操作,命令如下:#kubectltaintnodemasternode-role.kubernetes.io/master-在Master節(jié)點查看節(jié)點的狀態(tài),命令如下:[root@masteropt]#kubectlgetnodesNAMESTATUSROLESAGEVERSIONmasterReadymaster98dv1.18.18.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(6)Kubernetes命令介紹①kubectl命令語法如下:#kubectl[command][TYPE][NAME][flags]命令語法解析:●command:子命令?!馮YPE:資源類型?!馧AME:資源名稱。●flags:命令參數(shù)。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(6)Kubernetes命令介紹②kubectl命令選項如下:●--alsologtostderr[=false]:同時輸出日志到標(biāo)準(zhǔn)錯誤控制臺和文件?!?-api-version="":和服務(wù)端交互使用的API版本?!?-certificate-authority="":用以進(jìn)行認(rèn)證授權(quán)的.cert文件路徑?!?-client-certificate="":TLS使用的客戶端證書路徑。●--client-key="":TLS使用的客戶端密鑰路徑?!?-cluster="":指定使用的kubeconfig配置文件中的集群名?!?-context="":指定使用的kubeconfig配置文件中的環(huán)境名?!?-insecure-skip-tls-verify[=false]:如果為true,將不會檢查服務(wù)器憑證的有效性,這會導(dǎo)致HTTPS鏈接變得不安全。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(6)Kubernetes命令介紹②kubectl命令選項如下:●--kubeconfig="":命令行請求使用的配置文件路徑。●--log-backtrace-at=:0:當(dāng)日志長度超過定義的行數(shù)時,忽略堆棧信息?!?-log-dir="":如果不為空,將日志文件寫入此目錄?!?-log-flush-frequency=5s:刷新日志的最大時間間隔?!?-logtostderr[=true]:輸出日志到標(biāo)準(zhǔn)錯誤控制臺,不輸出到文件?!?-match-server-version[=false]:要求服務(wù)端和客戶端版本匹配?!?-namespace="":如果不為空,命令將使用此Namespace?!?-password="":APIServer進(jìn)行簡單認(rèn)證使用的密碼。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(6)Kubernetes命令介紹②kubectl命令選項如下:●-s,--server="":KubernetesAPIServer的地址和端口號?!?-stderrthreshold=2:高于此級別的日志將被輸出到錯誤控制臺。●--token="":認(rèn)證到APIServer使用的令牌?!?-user="":指定使用的kubeconfig配置文件中的用戶名?!?-username="":APIServer進(jìn)行簡單認(rèn)證使用的用戶名?!?-v=0:指定輸出日志的級別?!?-vmodule=:指定輸出日志的模塊。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(6)Kubernetes命令介紹③常用命令如下:●kubectlannotate:更新資源的注解?!駅ubectlapi-versions:以“組/版本”的格式輸出服務(wù)端支持的API版本。●kubectlapply:通過文件名或控制臺輸入,對資源進(jìn)行配置。●kubectlattach:連接到一個正在運行的容器?!駅ubectlautoscale:對ReplicationController進(jìn)行自動伸縮?!駅ubectlcluster-info:輸出集群信息?!駅ubectlconfig:修改kubeconfig配置文件?!駅ubectlcreate:通過文件名或控制臺輸入創(chuàng)建資源。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(6)Kubernetes命令介紹③常用命令如下:●kubectldelete:通過文件名、控制臺輸入、資源名或者LabelSelector刪除資源?!駅ubectldescribe:輸出指定的一個或多個資源的詳細(xì)信息?!駅ubectledit:編輯服務(wù)端的資源?!駅ubectlexec:在容器內(nèi)部執(zhí)行命令。●kubectlexpose:輸入rc、svc或Pod,并將其暴露為新的KubernetesService?!駅ubectlget:輸出一個或多個資源?!駅ubectllabel:更新資源的Label?!駅ubectllogs:輸出Pod中一個容器的日志。●kubectlnamespace:(已停用)設(shè)置或查看當(dāng)前使用的Namespace。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(6)Kubernetes命令介紹③常用命令如下:●kubectlpatch:通過控制臺輸入更新資源中的字段?!駅ubectlport-forward:將本地端口轉(zhuǎn)發(fā)到Pod?!駅ubectlproxy:為KubernetesAPIServer啟動代理服務(wù)器。●kubectlreplace:通過文件名或控制臺輸入替換資源。●kubectlrolling-update:對指定的ReplicationController執(zhí)行滾動升級。●kubectlrun:在集群中使用指定的鏡像啟動容器?!駅ubectlscale:為ReplicationController設(shè)置新的副本數(shù)。●kubectlversion:輸出服務(wù)端和客戶端的版本信息。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(6)Kubernetes命令介紹④常用命令體驗。獲取Kubernetes集群下Namespace的信息,命令如下:[root@master~]#kubectlgetnamespaceNAMESTATUSAGEdefaultActive102dkube-node-leaseActive102dkube-publicActive102dkube-systemActive102d查看命名空間下的所有信息,命令如下:[root@master~]#kubectlgetallNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEservice/kubernetesClusterIP<none>443/TCP102d8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(6)Kubernetes命令介紹④常用命令體驗。kubectlgetall這條命令等同于“kubectlgetpod,svc,deployment,rs”。all包括所有pod、svc、deployment和rs。因為在默認(rèn)的Namespace下沒有其他的pod、deployment和rs,所以就只顯示了Service??梢圆榭茨硞€Namespace中的所有信息,比如查看kube-system下所有的信息,命令如下:[root@master~]#kubectlgetall-nkube-system也可以查看某項資源,比如查看Pod,命令如下:[root@master~]#kubectlgetpods8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes部署(6)Kubernetes命令介紹④常用命令體驗??梢园l(fā)現(xiàn)當(dāng)前的default這個Namespace下沒有Pod,可以指定其他的Namespace來查看該命名空間下的Pod,命令如下:[root@master~]#kubectlgetpods-nkube-system還可以在命令后面加上-owide來查看更多的信息,讀者可以自行輸入命令嘗試。關(guān)于創(chuàng)建資源的命令如下:#通過文件創(chuàng)建一個Deployment#kubectlcreate-f/path/to/deployment.yaml#不過現(xiàn)在一般常用下面的命令來創(chuàng)建資源#kubectlapply-f/path/to/deployment.yaml#通過kubectl命令直接創(chuàng)建#kubectlrunnginx_app--image=nginx:1.9.1--replicas=38.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗在Kubernetes上部署第一個應(yīng)用前,還需要掌握幾個概念。在Kubernetes中不會直接對容器進(jìn)行操作,在Kubernetes中,Pod是最小的可部署單元。除了要了解Pod外,還需要掌握ReplicaSet、Deployment、Service的概念。K8S常用概念關(guān)系如圖所示。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(1)Kubernetes部署應(yīng)用初體驗使用K8S命令部署一個Nginx應(yīng)用,命令如下:[root@master~]#kubectlrunnginx--image=9/library/nginx:latestpod/nginxcreated在之前的版本中,使用kubectlrun命令時,系統(tǒng)會先創(chuàng)建一個Deployment,然后再由控制器去創(chuàng)建Nginx的Pod,但是在新版本中,使用kubectlrun命令只會單獨創(chuàng)建一個Pod,并不會創(chuàng)建Deployment??梢允褂妹畈榭碞ginx的Pod和Deployment,命令如下:[root@master~]#kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEnginx1/1Running014s[root@master~]#kubectlgetdeploymentNoresourcesfoundindefaultnamespace.8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(1)Kubernetes部署應(yīng)用初體驗查看Pod的IP地址,命令如下:[root@master~]#kubectlgetpods-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATESnginx1/1Running012m4master<none><none>通過kubectlgetpods-owide命令獲取的Pod的IP地址是一個虛擬的IP地址,外部是訪問不到的。在Master節(jié)點使用curl命令查看Pod地址,命令如下:[root@master~]#curl48.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(2)使用Deployment部署應(yīng)用使用Deployment的方式部署Nginx應(yīng)用,可以使用如下命令:[root@master~]#kubectlcreatedeploymentnginx--image=9/library/nginx:latestdeployment.apps/nginxcreated可以看到一個名叫nginx的Deployment被創(chuàng)建,查看Deployment列表,命令如下:[root@master~]#kubectlgetdeploymentNAMEREADYUP-TO-DATEAVAILABLEAGEnginx1/11135s8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(2)使用Deployment部署應(yīng)用繼續(xù)查看Pod,命令如下:[root@master~]#kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEnginx1/1Running042mnginx-86d8d488f6-pkmcb1/1Running081s可以看到創(chuàng)建Deployment時會自動創(chuàng)建一個Pod,這個時候,Nginx應(yīng)用也只能內(nèi)部訪問,不能通過外部訪問,還需要進(jìn)行Service服務(wù)發(fā)現(xiàn)或者叫端口開放,才能進(jìn)行外部訪問,Service服務(wù)發(fā)現(xiàn)的命令如下:[root@master~]#kubectlexposedeploymentnginx--port=80--type=NodePortservice/nginxexposed8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(2)使用Deployment部署應(yīng)用做完該操作后,查看Service,命令如下:[root@master~]#kubectlgetsvcNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEkubernetesClusterIP<none>443/TCP99dnginxNodePort4<none>80:30209/TCP3s可以看到Nginx的80端口被映射到30209端口,這時就可以從外部訪問Nginx應(yīng)用了。使用PC的瀏覽器訪問9:30209,如圖所示。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(3)使用Yaml模板部署應(yīng)用使用Yaml文件來部署Nginx服務(wù),要求使用Deployment管理Pod,使用ReplicaSet控制器定義副本的數(shù)量為2。首先創(chuàng)建Yaml文件,命令如下:[root@master~]#vinginx-deployment.yamlnginx-deployment.yaml文件的內(nèi)容詳見教材。編輯好Yaml文件后,運行該文件,命令如下:[root@master~]#kubectlapply-fnginx-deployment.yamldeployment.apps/nginx-appcreated8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(3)使用Yaml模板部署應(yīng)用查看運行的Pod,命令如下(此處已將上面案例中創(chuàng)建的Pod和Deployment刪除):[root@master~]#kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEnginx-app-7bd9c4cb95-dkw8r1/1Running048snginx-app-7bd9c4cb95-dl5b71/1Running048s查看運行的Deployment,命令如下:[root@master~]#kubectlgetdeploymentNAMEREADYUP-TO-DATEAVAILABLEAGEnginx-app2/2222m25s8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(3)使用Yaml模板部署應(yīng)用可以看到當(dāng)前Pod中顯示2個正在運行的Pod,Deployment中的Nginx數(shù)量也是2/2。但是此時只使用了Deployment管理Pod,然后使用ReplicaSet控制器設(shè)置副本的數(shù)量為2,此時還不能通過外部網(wǎng)絡(luò)訪問Nginx應(yīng)用,還需要做Service發(fā)現(xiàn),創(chuàng)建Service的Yaml文件,命令如下:[root@master~]#vinginx-service.yamlnginx-service.yaml文件的內(nèi)容詳見教材。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(3)使用Yaml模板部署應(yīng)用執(zhí)行nginx-service.yaml文件,命令如下:[root@master~]#kubectlapply-fnginx-service.yamlservice/nginx-servicecreated查看創(chuàng)建的Service,命令如下:[root@master~]#kubectlgetsvcNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEkubernetesClusterIP<none>443/TCP101dnginx-serviceNodePort32<none>80:31526/TCP19s8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(3)使用Yaml模板部署應(yīng)用可以通過宿主機IP地址:31526訪問Nginx,如圖所示。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(3)使用Yaml模板部署應(yīng)用模擬其中一個Nginx服務(wù)掛掉,看是否會影響服務(wù)。首先查看Pod,命令如下:[root@master~]#kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEnginx-app-7bd9c4cb95-dkw8r1/1Running015mnginx-app-7bd9c4cb95-dl5b71/1Running015m當(dāng)前存在2個Pod,刪除其中一個Pod,命令如下:[root@master~]#kubectldeletepodsnginx-app-7bd9c4cb95-dkw8rpod"nginx-app-7bd9c4cb95-dkw8r"deleted8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes體驗(3)使用Yaml模板部署應(yīng)用刪除完之后,使用網(wǎng)頁查看Nginx服務(wù)的首頁,服務(wù)不受影響,繼續(xù)查看Pod數(shù)量,命令如下:[root@master~]#kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEnginx-app-7bd9c4cb95-dl5b71/1Running015mnginx-app-7bd9c4cb95-zsw4n1/1Running04s8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)本實戰(zhàn)案例擬使用Kubernetes平臺部署一個WordPress博客系統(tǒng),具體配置與介紹如下:①需要用到兩個容器鏡像,分別為WordPress:4.8-apache和MySQL:5.6。②使用NFS創(chuàng)建PV作為數(shù)據(jù)庫與WordPress的后端存儲。③使用Secret生成器管理密碼。④最后使用Yaml文件編排部署博客系統(tǒng)。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(1)安裝與配置NFS在master節(jié)點上安裝NFS所需要的軟件及依賴,命令如下:[root@master~]#yuminstall-ynfs-utilsrpcbind安裝完之后,啟動RPC與NFS服務(wù),命令如下:[root@master~]#systemctlstartrpcbind[root@master~]#systemctlenablerpcbind[root@master~]#systemctlstartnfs[root@master~]#systemctlenablenfs8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(1)安裝與配置NFS創(chuàng)建兩個目錄,作為NFS的共享目錄,然后賦予權(quán)限,命令如下:[root@master~]#mkdir-p/home/pvdata/mysql[root@master~]#mkdir-p/home/pvdata/wordpress[root@master~]#chmod777/home/pvdata/mysql[root@master~]#chmod777/home/pvdata/wordpress修改NFS配置文件/etc/exports,將創(chuàng)建的兩個目錄進(jìn)行共享,命令如下:[root@master~]#cat/etc/exports#在/etc/exports配置文件中,添加如下兩行/home/pvdata/mysql/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)/home/pvdata/wordpress/24(rw,no_root_squash,no_all_squash,sync,anonuid=501,anongid=501)8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(1)安裝與配置NFS生效NFS配置文件,并查看分享的目錄,命令如下:[root@master~]#exportfs-r[root@master~]#showmount-e9Exportlistfor9:/home/pvdata/wordpress/24/home/pvdata/mysql/248.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(2)創(chuàng)建PV在創(chuàng)建PV之前,首先創(chuàng)建一個工作目錄,命令如下:[root@master~]#mkdirwordpress[root@master~]#cdwordpress/[root@masterwordpress]#在WordPress目錄下創(chuàng)建mysql-persistent-storage.yaml文件,該文件用來創(chuàng)建數(shù)據(jù)庫所使用的PV,文件內(nèi)容詳見教材。在WordPress目錄下繼續(xù)創(chuàng)建wordpress-persistent-storage.yaml文件,該文件用來創(chuàng)建WordPress所使用的PV,文件內(nèi)容詳見教材。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(2)創(chuàng)建PV編輯好Yaml文件后,創(chuàng)建PV卷,命令如下:[root@masterwordpress]#kubectlapply-fmysql-persistent-storage.yamlpersistentvolume/mysql-persistent-storagecreated[root@masterwordpress]#kubectlapply-fwordpress-persistent-storage.yamlpersistentvolume/wordpress-persistent-storagecreated創(chuàng)建完P(guān)V后,查看PV,命令如下:[root@masterwordpress]#kubectlgetpvNAMECAPACITYACCESSMODESRECLAIMPOLICYSTATUSCLAIMSTORAGECLASSREASONAGEmysql-persistent-storage2GiRWO,RWXRecycleAvailable11swordpress-persistent-storage2GiRWO,RWXRecycleAvailable5s8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(3)設(shè)置密碼生成器在/root/wordpress目錄下創(chuàng)建kustomization.yaml文件,并在文件中添加一個Secret生成器,具體命令如下:[root@masterwordpress]#catkustomization.yamlsecretGenerator:-name:mysql-passliterals:-password=123456ok8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(4)編輯Yaml文件首先在/root/wordpress目錄下創(chuàng)建一個mysql-deployment.yaml文件,用來部署數(shù)據(jù)庫服務(wù),MySQL容器將PersistentVolume掛載在/var/lib/mysql。MYSQL_ROOT_PASSWORD環(huán)境變量設(shè)置來自Secret的數(shù)據(jù)庫密碼,mysql-deployment.yaml中的具體內(nèi)容詳見教材。編輯好mysql-deployment.yaml之后,數(shù)據(jù)庫的部署就告一段落了。接下來還需要創(chuàng)建一個wordpress-eployment.yaml用來部署WordPress應(yīng)用,WordPress容器網(wǎng)站數(shù)據(jù)文件位于/var/www/html。WORDPRESS_DB_HOST環(huán)境變量集上定義了MySQL的Service名稱,WordPress將通過Service訪問數(shù)據(jù)庫。WORDPRESS_DB_PASSWORD密碼為Secret生成的數(shù)據(jù)庫密碼。具體文件內(nèi)容詳見教材。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(4)編輯Yaml文件可以注意到,此次部署的WordPress版本為WordPress:4.8-apache,該鏡像在配套的軟件包中有提供,可自行上載到master節(jié)點。編輯完之后,保存退出,將以上兩個文件補充到kustomization.yaml文件中,命令如下:[root@masterwordpress]#catkustomization.yamlsecretGenerator:-name:mysql-passliterals:

-password=123456ok#在配置文件中添加如下代碼

resources:

-mysql-deployment.yaml-wordpress-deployment.yaml8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(5)部署應(yīng)用在/root/wordpress目錄下,通過如下方式進(jìn)行部署,命令如下:[root@masterwordpress]#kubectlapply-k./secret/mysql-pass-ccht6ddg2mcreatedservice/wordpress-mysqlcreatedservice/wordpresscreateddeployment.apps/wordpress-mysqlcreateddeployment.apps/wordpresscreatedpersistentvolumeclaim/mysql-pv-claimcreatedpersistentvolumeclaim/wp-pv-claimcreated8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(5)部署應(yīng)用查看Secret密碼是否存在,命令如下:[root@masterwordpress]#kubectlgetsecret驗證PVC是否被成功掛載了,命令如下:[rootgmasterwordpress]#kubectlgetpvcAGE最后驗證Service是否被成功創(chuàng)建,命令如下:[rootamasterwordpress]#kubectlgetsvc8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(6)驗證應(yīng)用通過瀏覽器訪問9:31000,如圖所示。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(6)驗證應(yīng)用根據(jù)提示選擇語言,并單擊“Continue”按鈕,進(jìn)入配置信息界面,如圖所示。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes實戰(zhàn)(6)驗證應(yīng)用根據(jù)要求填寫相關(guān)信息,然后單擊下方的“InstallWordPress”按鈕進(jìn)行安裝,然后就可以登錄了。使用自己設(shè)置的用戶名和密碼進(jìn)行登錄,如圖所示。8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes運維(1)Node的隔離與恢復(fù)在硬件升級、硬件維護(hù)等情況下,需要將某些Node節(jié)點隔離。使用kubectlcordon<node_name>命令可禁止Pod調(diào)度到該節(jié)點上,但在其上運行的Pod并不會自動停止,管理員需要手動停止在該Node節(jié)點上運行的Pod。此處使用的實操環(huán)境是一臺PC,嘗試將master節(jié)點隔離(master也是一個Node節(jié)點),命令如下:[root@master~]#kubectlcordonmasternode/mastercordoned查看Node節(jié)點的狀態(tài),命令如下:[root@master~]#kubectlgetnodesNAMESTATUSROLESAGEVERSIONmasterReady,SchedulingDisabledmaster102dv1.18.18.2.1

Kubernetes集群服務(wù)案例部署Kubernetes運維(1)Node的隔離與恢復(fù)通過kubectluncordon命令完成對Node節(jié)點的恢復(fù),命令如下:[root@master~]#kubectluncordonmasternode/masteruncordoned再次查看Node節(jié)點信息,命令如下:[root@master~]#kubectlgetnodesNAMESTATUSROLESAGEVERSIONmasterReadymaster102dv1.18.18.2.1

Kubernetes集群服務(wù)案例部署Kubernetes運維(2)Pod動態(tài)擴容和縮放以NginxDeployment為例,創(chuàng)建一個Nginx的Deployment,副本數(shù)為1,命令如下(在做該案例時,為了避免Kubernetes實戰(zhàn)中創(chuàng)建的資源受影響,可自行刪除):[root@master~]#kubectlcreatedeploymentnginx--image=nginx:latestdeployment.apps/nginxcreated查看Pod和Deployment,命令如下:[root@master~]#kubectlgetpods[root@master~]#kubectlgetdeployment8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes運維(2)Pod動態(tài)擴容和縮放通過使用kubectlscale命令將NginxDeployment控制的Pod副本數(shù)量從初始的1更新為5,命令如下:[root@master~]#kubectlscaledeploymentnginx--replicas=5deployment.apps/nginxscaled更新副本后,繼續(xù)查看Pod數(shù)量,命令如下:[root@master~]#kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEnginx-674ff86d-7xgct1/1Running066snginx-674ff86d-9mzvx1/1Running066snginx-674ff86d-dw6mb1/1Running066snginx-674ff86d-n6jqq1/1Running04m33snginx-674ff86d-ztm8j1/1Running066s8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes運維(2)Pod動態(tài)擴容和縮放再將Nginx的Pod副本數(shù)調(diào)整為3,命令如下:[root@master~]#kubectlscaledeploymentnginx--replicas=3deployment.apps/nginxscaled查看Pod數(shù)量,命令如下:[root@master~]#kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEnginx-674ff86d-9mzvx1/1Running04m56snginx-674ff86d-dw6mb1/1Running04m56snginx-674ff86d-n6jqq1/1Running08m23s8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes運維(3)將Pod調(diào)度到指定的Node節(jié)點Label(標(biāo)簽)作為用戶可靈活定義的對象屬性,在已創(chuàng)建的對象上,仍然可以隨時通過kubectllabel命令對其進(jìn)行增加、修改、刪除等操作。使用kubectllabel給Node節(jié)點打標(biāo)簽的用法如下:#kubectllabelnodes<node-name><label-key>=<label-value>為Node節(jié)點打上一個project=gcxt的標(biāo)簽,命令如下:[root@master~]#kubectllabelnodesnodeproject=gcxtnode/nodelabeled如果想刪除Label,只需要在命令行的最后指定Label的key名,并加一個減號即可。[root@master~]#kubectllabelnodenodeprojectnode/nodelabeled8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes運維(3)將Pod調(diào)度到指定的Node節(jié)點在Pod中加入nodeSelector定義,代碼詳見教材。運行kubectlapply-f命令創(chuàng)建Pod,Scheduler就會將該Pod調(diào)度到擁有project=gcxt標(biāo)簽的Node節(jié)點上去。[root@master~]#kubectlapply-fnginx.yamlreplicationcontroller/nginx-gcxtcreated查看Pod的詳細(xì)信息,命令如下:[root@master~]#kubectlgetpods-owideNAMEREADYSTATUSRESTARTSAGEIPNODENOMINATEDNODEREADINESSGATESnginx-gcxt-hdt5x1/1Running014snode<none><none>8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes運維(4)應(yīng)用滾動升級示例:在第一次部署時使用httpd:2.2.31,然后使用滾動升級更新到httpd:2.2.32。首先定義Yaml文件,在/root目錄下創(chuàng)建httpd.yaml文件,文件內(nèi)容詳見教材。創(chuàng)建httpd的Deployment,命令如下:[root@master~]#kubectlapply-fhttpd.yamldeployment.apps/httpdcreated8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes運維(4)應(yīng)用滾動升級查看Pod和Deployment信息,命令如下:[root@master~]#kubectlgetpodNAMEREADYSTATUSRESTARTSAGEhttpd-745bddc8fb-7h9cr1/1Running09m22shttpd-745bddc8fb-h2s2p1/1Running09m22shttpd-745bddc8fb-wtx8r1/1Running09m22s[root@master~]#kubectlgetdeployment-owideNAMEREADYUP-TO-DATEAVAILABLEAGECONTAINERSIMAGESSELECTORhttpd3/33316mhttpdhttpd:2.2.31app=httpd8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes運維(4)應(yīng)用滾動升級可以看到images的版本是2.2.31,修改httpd.yaml文件,把配置文件中的httpd:2.2.31改為httpd:2.2.32,命令詳見教材。再次啟動Deployment,命令如下:[root@master~]#kubectlapply-fhttpd.yamldeployment.apps/httpdconfigured再次查看Deployment的信息,命令如下:[root@master~]#kubectlgetdeployment-owideNAMEREADYUP-TO-DATEAVAILABLEAGECONTAINERSIMAGESSELECTORhttpd3/33316mhttpdhttpd:2.2.32app=httpd8.2.1

Kubernetes集群服務(wù)案例部署Kubernetes運維(4)應(yīng)用滾動升級可以看到當(dāng)前的httpd版本為2.2.32,查看Deployment的詳細(xì)信息,命令如下:[root@master~]#kubectldescribedeploymenthttpd上面的日志信息描述了滾動升級的過程:①啟動一個新版Pod。②把舊版Pod數(shù)量降為2。③再啟動一個新版Pod,數(shù)量變?yōu)?。④把舊版Pod數(shù)量降為1。⑤再啟動一個新版Pod,數(shù)量變?yōu)?。⑥把舊版Pod數(shù)量降為0。這始終保持副本數(shù)量為3,控制新舊Pod的交替,實現(xiàn)了無縫升級。8.2.1

Kubernetes集群服務(wù)案例部署技能訓(xùn)練1.安裝Docker服務(wù)并搭建Kubernetes集群服務(wù),查詢集群節(jié)點的健康狀態(tài)。2.在集群節(jié)點進(jìn)行運維操作,完成對HTTP服務(wù)應(yīng)用的回滾操作。謝謝!容器云服務(wù)架構(gòu)與運維單元9基于K8S的CI/CD服務(wù)學(xué)習(xí)目標(biāo)了解什么是持續(xù)集成/持續(xù)交付(CI/CD);理解CI/CD在日常工作中起到了什么作用、解決了哪些問題;了解構(gòu)建CI/CD服務(wù)需要用到哪些工具;了解CI/CD的優(yōu)點;掌握CI/CD環(huán)境的構(gòu)建、CI/CD環(huán)境的配置與觸發(fā)等技能。9.1CI/CD服務(wù)9.2

基于K8S構(gòu)建持續(xù)集成9.1CI/CD服務(wù)9.1.1CI/CD服務(wù)介紹持續(xù)集成簡介在了解持續(xù)集成之前,先了解什么叫集成,集成的英文翻譯為ContinuousIntegration(簡稱CI)。持續(xù)集成是一種軟件開發(fā)實踐,即團(tuán)隊開發(fā)成員經(jīng)常集成用戶的工作,通常每個成員每天至少集成一次,也就意味著每天可能會發(fā)生多次集成。每次集成都通過自動化的構(gòu)建(包括編譯、發(fā)布、自動化測試)來驗證,從而盡快地發(fā)現(xiàn)集成錯誤。許多團(tuán)隊發(fā)現(xiàn)這個過程可以大大減少集成的問題,讓團(tuán)隊能夠更快地開發(fā)軟件。9.1.1CI/CD服務(wù)介紹持續(xù)集成簡介如果沒有持續(xù)集成,則會發(fā)生以下情況:①項目做模塊集成的時候,發(fā)現(xiàn)很多接口都不通,從而浪費大量時間。②需要人手動去編譯打包最新的代碼,構(gòu)建過程不透明。③發(fā)布代碼、上線等基本靠手工,腳本太多。使用持續(xù)集成可以:①維護(hù)一個單一的代碼庫。②使構(gòu)建自動化。③執(zhí)行測試是構(gòu)建的一部分。④集成日志及歷史記錄。⑤使用統(tǒng)一的依賴包管理庫。⑥每天至少集成一次。9.1.1CI/CD服務(wù)介紹持續(xù)交付介紹持續(xù)集成包含了構(gòu)建與自動化測試的階段,而持續(xù)交付(ContinuousDelivery,CD)在持續(xù)集成的基礎(chǔ)上,將集成后的代碼部署到更貼近真實運行環(huán)境的“類生產(chǎn)環(huán)境”之中。持續(xù)交付優(yōu)先于整個產(chǎn)品生命周期的軟件部署,建立在高水平自動化的持續(xù)集成之上。此外,持續(xù)交付同樣遵循一個小型的構(gòu)建周期,可以將一小批代碼推送到多個環(huán)境:開發(fā)、測試或生產(chǎn)。在此過程中,它結(jié)合了持續(xù)集成和持續(xù)部署的實踐(即讓主干始終處于可部署狀態(tài))。當(dāng)提交的代碼完成以上步驟后,可以在“部署流水線—流水線管理”中創(chuàng)建對應(yīng)的CD流水線將持續(xù)集成后產(chǎn)生的應(yīng)用版本自動部署到對應(yīng)的環(huán)境中去。此外,對于部署到正式環(huán)境中的代碼,可以在流水線中添加一個人工卡點任務(wù),只有通過人工審核后,才能執(zhí)行后續(xù)的自動部署任務(wù)。9.1.2

CI/CD的工作流程與使用場景CI/CD的工作流程持續(xù)集成(CI),是軟件開發(fā)周期的一種實踐,把代碼倉庫(GitLab或者GitHub)、構(gòu)建工具(如Jenkins)和測試工具(如SonarQube)集成在一起,頻繁地將代碼合并到主干然后自動進(jìn)行構(gòu)建和測試。簡單來說,持續(xù)集成就是一個監(jiān)控并控制系統(tǒng)中代碼變化的工具,當(dāng)發(fā)生變化時可以自動編譯、測試以及執(zhí)行后續(xù)的自定義動作。持續(xù)集成的工作流程如圖所示。9.1.2

CI/CD的工作流程與使用場景CI/CD的工作流程開發(fā)人員先把代碼放到GitHub

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論