版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Kubernetes集群實(shí)戰(zhàn)(微課版)工業(yè)和信息化精品系列教材——云計(jì)算技術(shù)項(xiàng)目7
Kubernetes調(diào)度能力CAPACITY要求了解StatefulSet的概念和工作機(jī)制學(xué)會(huì)使用StatefulSet在集群中部署有狀態(tài)應(yīng)用程序了解HPA的概念和工作機(jī)制學(xué)會(huì)使用HPA實(shí)現(xiàn)應(yīng)用程序的水平擴(kuò)縮容了解Kubernetes調(diào)度的常見(jiàn)方式,掌握Pod調(diào)度的配置管理方法任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)7.3管理Pod的調(diào)度任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)說(shuō)明01OPTION02OPTION03OPTION了解StatefulSet的概念理解StatefulSet的特點(diǎn)和工作機(jī)制了解StatefulSet的組件和定義StatefulSet的配置文件04OPTION學(xué)會(huì)使用StatefulSet部署和管理有狀態(tài)應(yīng)用程序任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序相關(guān)知識(shí)7.1.1什么是StatefulSetStatefulSet是一個(gè)管理有狀態(tài)應(yīng)用程序的API對(duì)象。StatefulSet用來(lái)管理Pod集合的部署和擴(kuò)縮容,并為這些Pod提供持久的存儲(chǔ)和持久的標(biāo)識(shí)。StatefulSet的典型應(yīng)用場(chǎng)景數(shù)據(jù)庫(kù)服務(wù)消息隊(duì)列服務(wù)分布式協(xié)調(diào)服務(wù)任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序相關(guān)知識(shí)7.1.1什么是StatefulSetStatefulSetDeployment管理的Pod是有狀態(tài)的,命名是有規(guī)律的管理的Pod是無(wú)狀態(tài)的,命名是隨機(jī)的多個(gè)Pod實(shí)例并不是完全一樣的多個(gè)Pod實(shí)例對(duì)于同一個(gè)用戶(hù)請(qǐng)求的響應(yīng)結(jié)果是完全一致的Pod在本地存儲(chǔ)持久化數(shù)據(jù),每個(gè)Pod都可以有獨(dú)立的存儲(chǔ)卷Pod不會(huì)在本地存儲(chǔ)持久化數(shù)據(jù)多個(gè)Pod實(shí)例之間存在某種依賴(lài)關(guān)系多個(gè)Pod實(shí)例之間沒(méi)有依賴(lài)關(guān)系動(dòng)態(tài)啟動(dòng)或停止Pod實(shí)例會(huì)對(duì)其他Pod實(shí)例產(chǎn)生影響動(dòng)態(tài)啟動(dòng)或停止Pod實(shí)例不會(huì)對(duì)其他Pod實(shí)例產(chǎn)生影響某個(gè)Pod實(shí)例需要重建時(shí),新的Pod實(shí)例必須與被替換的Pod實(shí)例具有相同的名稱(chēng)、網(wǎng)絡(luò)標(biāo)識(shí)和狀態(tài)某個(gè)Pod實(shí)例任何時(shí)候都可以被一個(gè)全新的Pod實(shí)例替換任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序相關(guān)知識(shí)7.1.2StatefulSet的特點(diǎn)具有穩(wěn)定、唯一的網(wǎng)絡(luò)標(biāo)識(shí)。具有穩(wěn)定、持久的存儲(chǔ)。能夠進(jìn)行有序的、優(yōu)雅的部署和擴(kuò)縮容。主要應(yīng)用場(chǎng)景數(shù)據(jù)庫(kù)服務(wù)消息隊(duì)列服務(wù)分布式協(xié)調(diào)服務(wù)任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序相關(guān)知識(shí)7.1.2StatefulSet的特點(diǎn)存儲(chǔ)實(shí)現(xiàn)機(jī)制任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序相關(guān)知識(shí)7.1.3StatefulSet的組件? 無(wú)頭Service? StatefulSet工作資源負(fù)載卷聲明模板(volumeClaimTemplates)任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序相關(guān)知識(shí)7.1.3StatefulSet的組件定義StatefulSet資源的配置文件apiVersion:v1#API版本kind:StatefulSet#資源類(lèi)型metadata:#元數(shù)據(jù)
name:string#資源名稱(chēng)spec:selector:#選擇器,指定該控制器管理哪些PodmatchLabels:#匹配規(guī)則
app:string#必須匹配spec.template.metadata.labels字段值
serviceName:string#負(fù)責(zé)生成Pod的網(wǎng)絡(luò)標(biāo)識(shí)的無(wú)頭Service名稱(chēng)
replicas:int#副本(實(shí)例)數(shù),默認(rèn)值1minReadySeconds:int#最短就緒時(shí)間,即Pod就緒后額外等待的秒數(shù),默認(rèn)值0template:#定義Pod模板,當(dāng)副本數(shù)不足時(shí)會(huì)根據(jù)模板定義創(chuàng)建Pod實(shí)例
metadata:labels:#指定標(biāo)簽
app:string#Pod標(biāo)簽,必須匹配spec.selector.matchLabels字段值任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序相關(guān)知識(shí)7.1.3StatefulSet的組件定義StatefulSet資源的配置文件spec:terminationGracePeriodSeconds:int#優(yōu)雅終止時(shí)間(秒),默認(rèn)30秒
containers:#容器列表
-name:string#容器名稱(chēng)
volumeMounts:#掛載點(diǎn),用于為Pod分配存儲(chǔ)
-name:string#卷聲明模板名稱(chēng),同volumeClaimT字段值
name:stringmountPath:stringvolumeClaimTemplates:#卷聲明模板
-metadata:name:string#卷聲明模板名稱(chēng)
spec:accessModes:[strings]#訪問(wèn)模式
storageClassName:string#StorageClass名稱(chēng)
resources:#請(qǐng)求的存儲(chǔ)資源
requests:storage:int#存儲(chǔ)空間大小任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群準(zhǔn)備存儲(chǔ)資源使用StorageClass對(duì)象為擬部署的MySQL應(yīng)用程序提供動(dòng)態(tài)卷制備。查看當(dāng)前的StorageClass對(duì)象。#kubectlgetscNAMEPROVISIONERRECLAIMPOLICYVOLUMEBINDINGMODEALLOWVOLUMEEXPANSIONAGEnfs-storage(default)k8s-sigs.io/nfs-subdir-external-provisionerDeleteImmediatefalse4d16h任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群創(chuàng)建ConfigMapapiVersion:v1kind:ConfigMapmetadata:name:mysqllabels:app:mysqldata:f:|#僅在主服務(wù)器上應(yīng)用的配置
[mysqld]log-binf:|#僅在從服務(wù)器上應(yīng)用此配置
[mysqld]super-read-only任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群創(chuàng)建Service#為StatefulSet成員提供穩(wěn)定的DNS條目的無(wú)頭ServiceapiVersion:v1kind:Servicemetadata:name:mysqllabels:app:mysqlspec:ports:-name:mysqlport:3306clusterIP:None#無(wú)頭Serviceselector:app:mysql任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群創(chuàng)建Service#用于連接到任一MySQL實(shí)例執(zhí)行讀操作的客戶(hù)端ServiceapiVersion:v1kind:Servicemetadata:name:mysql-readlabels:app:mysqlreadonly:"true"#讀操作spec:ports:-name:mysqlport:3306selector:app:mysql任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群創(chuàng)建StatefulSetapiVersion:apps/v1kind:StatefulSetmetadata:name:mysqlspec:selector:matchLabels:app:mysqlserviceName:mysql#無(wú)頭Service名稱(chēng)
replicas:3#副本數(shù)任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群創(chuàng)建StatefulSetspec:#定義初始化容器來(lái)完成集群初始化工作
initContainers:-name:init-mysql#此容器為主從服務(wù)器Pod提供相應(yīng)的配置文件
image:mysql:5.7command:-bash-"-c"-|
-name:clone-mysql#此容器在從服務(wù)器Pod容器中實(shí)現(xiàn)數(shù)據(jù)復(fù)制
#基于數(shù)據(jù)庫(kù)熱備份軟件Xtrabackup的鏡像生成容器
image:/google-samples/xtrabackup:1.0command:-bash-"-c"-|
任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群創(chuàng)建StatefulSet
#定義普通容器運(yùn)行MySQL主從服務(wù)器
containers:-name:mysql#此容器啟動(dòng)MySQL主從服務(wù)器
image:mysql:5.7env:-name:MYSQL_ALLOW_EMPTY_PASSWORDvalue:"1"ports:-name:mysqlcontainerPort:3306#掛載初始化容器已經(jīng)完成的數(shù)據(jù)與配置
volumeMounts:-name:datamountPath:/var/lib/mysqlsubPath:mysql-name:confmountPath:/etc/mysql/conf.dresources:requests:cpu:500mmemory:1Gi任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群創(chuàng)建StatefulSetvolumeMounts:-name:datamountPath:/var/lib/mysqlsubPath:mysql-name:confmountPath:/etc/mysql/conf.dresources:requests:cpu:100mmemory:100Mivolumes:#卷的定義
-name:conf#使用EmptyDir存儲(chǔ)配置
emptyDir:{}-name:config-map#指定要掛載的ConfigMapconfigMap:name:mysql任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群創(chuàng)建StatefulSetvolumeClaimTemplates:#卷聲明模板
-metadata:name:dataspec:storageClassName:nfs-storage#需要與StorageClass的名稱(chēng)一致
accessModes:["ReadWriteOnce"]resources:requests:storage:10Gi任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群創(chuàng)建StatefulSet(2)創(chuàng)建名為mysql的StatefulSet對(duì)象。(3)查看啟動(dòng)進(jìn)度,會(huì)發(fā)現(xiàn)所有3個(gè)Pod都進(jìn)入Running狀態(tài),其中的Pod名稱(chēng)由StatefulSet對(duì)象的名稱(chēng)和Pod序號(hào)組成。#kubectlgetpods-lapp=mysql--watchNAMEREADYSTATUSRESTARTSAGEmysql-02/2Running02m51smysql-12/2Running1(2m11sago)2m25smysql-22/2Running1(106sago)2m5s(4)查看該StatefulSet所創(chuàng)建的PVC,發(fā)現(xiàn)其名稱(chēng)為卷聲明模板名稱(chēng)和Pod名稱(chēng)組成。#kubectlgetpvc-lapp=mysqlNAMESTATUSVOLUMECAPACITYACCESSMODESSTORAGECLASSAGEdata-mysql-0Boundpvc-357b0fd6-3cf6-4144-be16-4b920418859910GiRWOnfs-storage11mdata-mysql-1Boundpvc-77179150-9aad-4cac-b754-ab063260210710GiRWOnfs-storage11mdata-mysql-2Boundpvc-7a966af3-5d4b-4c00-8afe-d5b7969d3bbf10GiRWOnfs-storage10m任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.1使用StatefulSet部署MySQL主從集群發(fā)送客戶(hù)端請(qǐng)求進(jìn)行測(cè)試(1)運(yùn)行基于mysql:5.7鏡像的臨時(shí)容器,將創(chuàng)建表與插入數(shù)據(jù)操作的SQL語(yǔ)句發(fā)送到MySQL主服務(wù)器(主機(jī)名mysql-0.mysql)執(zhí)行。(2)運(yùn)行基于mysql:5.7鏡像的臨時(shí)容器,通過(guò)mysql-read這個(gè)Service將測(cè)試查詢(xún)發(fā)送到任何Pod運(yùn)行的MySQL服務(wù)器,結(jié)果顯示能夠讀取新建的表及其數(shù)據(jù)。(3)運(yùn)行基于mysql:5.7鏡像的臨時(shí)容器,循環(huán)運(yùn)行SELECT@@server_id語(yǔ)句,演示mysql-read這個(gè)Service在MySQL服務(wù)器之間分配的連接,可以發(fā)現(xiàn)報(bào)告的@@server_id發(fā)生隨機(jī)變化,每次嘗試連接時(shí)都選擇了不同的端點(diǎn)。#kubectlrunmysql-client-loop--image=mysql:5.7-i-t--rm--restart=Never--bash-ic"whilesleep1;domysql-hmysql-read-e'SELECT@@server_id,NOW()';done"Ifyoudon'tseeacommandprompt,trypressingenter.+++|@@server_id|NOW()|+++|101|2022-10-0112:41:49|++++++任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)實(shí)現(xiàn)任務(wù)7.1.2擴(kuò)縮容StatefulSet工作負(fù)載資源(1)執(zhí)行kubectlscalestatefulsetmysql--replicas=4命令進(jìn)行擴(kuò)容,將副本數(shù)增加到4。(2)查看MySQL主從集群中的Pod,可以發(fā)現(xiàn)新增一個(gè)名為mysql-3的Pod。(3)運(yùn)行臨時(shí)容器,向新增的從MySQL服務(wù)器mysql-3.mysql發(fā)送查詢(xún)進(jìn)行測(cè)試,發(fā)現(xiàn)能夠正常響應(yīng)。(4)執(zhí)行kubectlscalestatefulsetmysql--replicas=3命令進(jìn)行縮容,將副本數(shù)減少到3。(5)驗(yàn)證結(jié)果表明盡管將StatefulSet的副本數(shù)縮小為3,所有4個(gè)PVC仍然存在。(6)根據(jù)需要?jiǎng)h除不再打算使用的PVC。(7)刪除以上操作所涉及的對(duì)象。任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)7.3管理Pod的調(diào)度任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)說(shuō)明01OPTION02OPTION03OPTION了解HPA的概念和工作機(jī)制了解HPA定義的配置文件了解MetricsServer并掌握其部署方法04OPTION掌握使用HPA實(shí)現(xiàn)自動(dòng)擴(kuò)縮容的方法任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容相關(guān)知識(shí)7.2.1什么是HPAHPA監(jiān)控分析ReplicationController、Deployment、ReplicaSet或StatefulSet等控制器控制的Pod的負(fù)載變化。HPA根據(jù)資源利用率或自定義指標(biāo)自動(dòng)調(diào)整Pod的副本數(shù),從而實(shí)現(xiàn)應(yīng)用程序的水平自動(dòng)擴(kuò)縮容,讓?xiě)?yīng)用程序部署的規(guī)模接近于實(shí)際的負(fù)載。任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容相關(guān)知識(shí)7.2.1什么是HPAHPA的水平自動(dòng)擴(kuò)縮容功能由KubernetesAPI資源和控制器實(shí)現(xiàn),資源決定了控制器的行為。任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容相關(guān)知識(shí)7.2.2如何定義HPAapiVersion:autoscaling/v2#API版本kind:HorizontalPodAutoscaler#資源類(lèi)型為HorizontalPodAutoscalermetadata:name:string#HPA名稱(chēng)
spec:behavior:#控制HPA的擴(kuò)縮容的行為
scaleDown:#縮容策略定義
scaleUp:#擴(kuò)容策略定義
minReplicas:int#自動(dòng)縮容的副本數(shù)下限,默認(rèn)是1maxReplicas:int#自動(dòng)擴(kuò)容的副本數(shù)上限
scaleTargetRef:#指定要擴(kuò)縮容的對(duì)象(控制器)
apiVersion:string#控制器版本,如apps/v1kind:string#控制器類(lèi)型,如Deploymentname:string#控制器名稱(chēng)
metrics:#定義動(dòng)態(tài)擴(kuò)縮容的控制指標(biāo)
-type:string#指標(biāo)類(lèi)型,如Resource#具體指標(biāo)的定義任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容相關(guān)知識(shí)7.2.3什么是MetricsServerMetricsServer為Kubernetes內(nèi)置的自動(dòng)擴(kuò)縮容流水線(xiàn)提供資源度量。MetricsServer特性適用于大多數(shù)集群的單個(gè)部署。每15秒收集一次指標(biāo)以實(shí)現(xiàn)快速自動(dòng)擴(kuò)縮容。具有較高的資源效率??芍С侄噙_(dá)5000個(gè)節(jié)點(diǎn)的集群。任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)實(shí)現(xiàn)任務(wù)7.2.1部署MetricesServer安裝MetricsServer使用kubectlapply命令基于YAML格式的配置文件安裝。修改部署配置文件containers:-args:---cert-dir=/tmp---secure-port=443---kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname---kubelet-use-node-status-port---metric-resolution=15s---kubelet-insecure-tls#增加此啟動(dòng)參數(shù)#針對(duì)國(guó)內(nèi)環(huán)境替換鏡像#image:registry.k8s.io/metrics-server/metrics-server:v0.6.3image:/zailushang/metrics-server:v0.6.0任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)實(shí)現(xiàn)任務(wù)7.2.1部署MetricesServer驗(yàn)證MetricsServer的部署(1)查出MetricsAPI的版本是/apis/metrics.k8s.io/v1beta1。#kubectlapi-versions|grepmetricsmetrics.k8s.io/v1beta1(2)在運(yùn)行kubectl的主機(jī)和KubernetsAPI服務(wù)器之間建立反向代理。#kubectlproxy--port=8088Startingtoserveon:8088(3)打開(kāi)另一個(gè)終端窗口,使用curl命令向/apis/metrics.k8s.io/v1beta1端點(diǎn)發(fā)送GET請(qǐng)求,查看可以通過(guò)MetricsAPI查詢(xún)的資源。結(jié)果表明,可以獲得節(jié)點(diǎn)和Pod的資源。任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)實(shí)現(xiàn)任務(wù)7.2.2通過(guò)HPA實(shí)現(xiàn)Nginx的自動(dòng)擴(kuò)縮容創(chuàng)建并運(yùn)行NginxapiVersion:apps/v1#版本號(hào)kind:Deployment#類(lèi)型為Deploymentmetadata:#元數(shù)據(jù)
name:nginxlabels:#標(biāo)簽
app:nginxspec:#詳細(xì)信息
selector:#選擇器,指定該控制器管理哪些PodmatchLabels:#匹配規(guī)則
app:nginxtemplate:#定義模板,當(dāng)副本數(shù)量不足時(shí)會(huì)根據(jù)模板定義創(chuàng)建Pod副本
metadata:labels:app:nginx#Pod的標(biāo)簽
spec:containers:#容器列表(本例僅定義一個(gè)容器)
-name:nginx#容器的名稱(chēng)
image:nginx:1.17.2#容器所用的鏡像
resources:requests:cpu:100mmemory:200Mi任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)實(shí)現(xiàn)任務(wù)7.2.2通過(guò)HPA實(shí)現(xiàn)Nginx的自動(dòng)擴(kuò)縮容創(chuàng)建并運(yùn)行NginxapiVersion:v1kind:Service#類(lèi)型為Servicemetadata:name:nginx#為Service對(duì)象命名spec:selector:app:nginx#指定pod的標(biāo)簽
ports:-port:80#Service綁定的端口
targetPort:80#目標(biāo)Pod的端口任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)實(shí)現(xiàn)任務(wù)7.2.2通過(guò)HPA實(shí)現(xiàn)Nginx的自動(dòng)擴(kuò)縮容使用命令行創(chuàng)建HPA并進(jìn)行測(cè)試(1)執(zhí)行kubectlautoscale命令創(chuàng)建HPA。#kubectlautoscaledeploymentnginx--cpu-percent=10--min=1--max=10horizontalpodautoscaler.autoscaling/nginxautoscaled(2)查看該HPA的當(dāng)前狀態(tài)。#kubectlgethpaNAMEREFERENCETARGETSMINPODSMAXPODSREPLICASAGEnginxDeployment/nginx0%/10%110167s(3)查看Nginx的Service對(duì)象的信息,獲得其集群IP地址。#kubectlgetsvcnginxNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEnginxClusterIP4<none>80/TCP2m9s任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)實(shí)現(xiàn)任務(wù)7.2.2通過(guò)HPA實(shí)現(xiàn)Nginx的自動(dòng)擴(kuò)縮容使用命令行創(chuàng)建HPA并進(jìn)行測(cè)試擴(kuò)容測(cè)試(4)打開(kāi)另一個(gè)終端窗口,運(yùn)行一個(gè)循環(huán)語(yǔ)句模擬不停地訪問(wèn)Nginx服務(wù)以便進(jìn)行壓力測(cè)試,不斷增加該P(yáng)od的負(fù)載。#whiletrue;dowget-q-O-4>/dev/null;done(5)監(jiān)測(cè)該HPA。[root@master01~]#kubectlgethpanginx--watchNAMEREFERENCETARGETSMINPODSMAXPODSREPLICASAGEnginxDeployment/nginx10%/10%11015m49snginxDeployment/nginx26%/10%11026m45snginxDeployment/nginx26%/10%11037mnginxDeployment/nginx17%/10%11067m15snginxDeployment/nginx9%/10%11067m30s(6)依次查看Deployment的副本數(shù)和Pod列表,進(jìn)一步驗(yàn)證擴(kuò)容結(jié)果。任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)實(shí)現(xiàn)任務(wù)7.2.2通過(guò)HPA實(shí)現(xiàn)Nginx的自動(dòng)擴(kuò)縮容使用命令行創(chuàng)建HPA并進(jìn)行測(cè)試縮容測(cè)試(7)切換到執(zhí)行壓力測(cè)試語(yǔ)句的終端窗口,終止壓力測(cè)試。(8)切回監(jiān)測(cè)HPA的終端窗口,繼續(xù)觀察HPA的變化。NAMEREFERENCETARGETSMINPODSMAXPODSREPLICASAGEnginxDeployment/nginx0%/10%110610mnginxDeployment/nginx0%/10%110614mnginxDeployment/nginx0%/10%110514mnginxDeployment/nginx0%/10%110114m15s結(jié)束HPA監(jiān)測(cè),然后執(zhí)行以下命令查看Pod,可以發(fā)現(xiàn)回到最初只有一個(gè)副本的狀態(tài)。#kubectlgetpodNAMEREADYSTATUSRESTARTSAGEnginx-5999d8967d-zz2nk1/1Running015m(9)刪除該HPA對(duì)象,清理實(shí)驗(yàn)環(huán)境。任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)實(shí)現(xiàn)任務(wù)7.2.2通過(guò)HPA實(shí)現(xiàn)Nginx的自動(dòng)擴(kuò)縮容通過(guò)配置文件創(chuàng)建HPAapiVersion:autoscaling/v2kind:HorizontalPodAutoscalermetadata:name:nginx-hpaspec:minReplicas:1maxReplicas:10metrics:-type:Resourceresource:name:cputarget:type:UtilizationaverageUtilization:10#CPU平均使用率10%scaleTargetRef:#指定要控制的對(duì)象
apiVersion:apps/v1kind:Deploymentname:nginx任務(wù)7.2實(shí)現(xiàn)水平自動(dòng)擴(kuò)縮容任務(wù)7.1使用StatefulSet運(yùn)行有狀態(tài)應(yīng)用程序任務(wù)7.3管理Pod的調(diào)度任務(wù)7.3管理Pod的調(diào)度任務(wù)說(shuō)明01OPTION02OPTION03OPTION了解Kubernetes調(diào)度流程了解Pod的定向調(diào)度并掌握其實(shí)現(xiàn)方法掌握節(jié)點(diǎn)親和性調(diào)度、Pod間親和性調(diào)度和反親和性調(diào)度04OPTION學(xué)會(huì)基于污點(diǎn)與容忍度進(jìn)一步優(yōu)化Pod調(diào)度任務(wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.1Kubernetes調(diào)度概述調(diào)度解決的是Pod與節(jié)點(diǎn)的匹配問(wèn)題,目的是將Pod部署到適當(dāng)?shù)墓?jié)點(diǎn)上運(yùn)行。調(diào)度是由調(diào)度器來(lái)完成的。任務(wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.2Pod的定向調(diào)度基于節(jié)點(diǎn)名稱(chēng)定向調(diào)度spec:containers:-name:nginximage:nginx:1.14.2nodeName:node01#指定將Pod直接調(diào)度到node01節(jié)點(diǎn)上任務(wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.2Pod的定向調(diào)度基于節(jié)點(diǎn)選擇器定向調(diào)度spec:containers:-name:nginximage:nginx:1.14.2nodeSelector:#使用此字段實(shí)現(xiàn)節(jié)點(diǎn)選擇約束,這是關(guān)鍵
nodeenv:prod#指定調(diào)度到具有nodeenv=prod標(biāo)簽的節(jié)點(diǎn)上任務(wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.3親和性與反親和性調(diào)度應(yīng)用場(chǎng)景將前臺(tái)應(yīng)用程序和后臺(tái)服務(wù)部署在一起。將某類(lèi)應(yīng)用程序部署到某些特定節(jié)點(diǎn)。將不同的應(yīng)用程序部署到不同的節(jié)點(diǎn)。兩個(gè)層級(jí)節(jié)點(diǎn)Pod任務(wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.3親和性與反親和性調(diào)度節(jié)點(diǎn)親和性調(diào)度spec:affinity:nodeAffinity:#節(jié)點(diǎn)親和性
requiredDuringSchedulingIgnoredDuringExecution:#硬性限制規(guī)則
nodeSelectorTerms:#節(jié)點(diǎn)選擇器配置
-matchExpressions:#匹配表達(dá)式
-key:topology.kubernetes.io/zoneoperator:Invalues:-beijing-shanghaipreferredDuringSchedulingIgnoredDuringExecution:#軟性限制規(guī)則
-weight:1#權(quán)重,值的范圍1~100preference:#具體的參考規(guī)則
matchExpressions:#匹配表達(dá)式
-key:departmentoperator:Invalues:-salescontainers:#Pod的容器定義
任務(wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.3親和性與反親和性調(diào)度Pod間親和性與反親和性調(diào)度spec:affinity:podAffinity:#Pod間親和性
requiredDuringSchedulingIgnoredDuringExecution:#硬性限制規(guī)則
-labelSelector:#標(biāo)簽選擇器
matchExpressions:#匹配表達(dá)式
-key:securityoperator:Invalues:-S1topologyKey:topology.kubernetes.io/zone#調(diào)度目標(biāo)的拓?fù)溆蛉蝿?wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.3親和性與反親和性調(diào)度Pod間親和性與反親和性調(diào)度podAntiAffinity:#Pod間反親和性
preferredDuringSchedulingIgnoredDuringExecution:#軟性限制規(guī)則
-weight:100#權(quán)重,取值范圍是1到100podAffinityTerm:#Pod間反親和性條件
labelSelector:matchExpressions:-key:securityoperator:Invalues:-S2topologyKey:topology.kubernetes.io/zone#調(diào)度目標(biāo)的拓?fù)溆?/p>
containers:
任務(wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.4污點(diǎn)與容忍度使用kubectltaint命令給節(jié)點(diǎn)標(biāo)記一個(gè)污點(diǎn)kubectltaintnodes<node_name><key>=<value>:effect在Pod配置文件中通過(guò).spec.toleration字段設(shè)置Pod的容忍度tolerations:-key:string#鍵的名稱(chēng)
operator:string#操作符
value:string#鍵的值,可選
effect:string#作用任務(wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.4污點(diǎn)與容忍度Pod的容忍度與節(jié)點(diǎn)的污點(diǎn)的匹配方式完全匹配不完全匹配特殊情形如果容忍度不指定key字段且operator字段值為Exists,則該容忍度匹配任何污點(diǎn)。如果容忍度不指定effect字段,則可以匹配所有具有該key字段值的污點(diǎn)。任務(wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.4污點(diǎn)與容忍度由節(jié)點(diǎn)上污點(diǎn)的effect屬性決定如何調(diào)度。調(diào)度策略NoSchedule:禁止調(diào)度。PreferNoSchedule:與NoSchedule類(lèi)似,只不過(guò)是非強(qiáng)制性的。NoExecute:不會(huì)將Pod調(diào)度到具有該污點(diǎn)的節(jié)點(diǎn)上,同時(shí)會(huì)將節(jié)點(diǎn)上已經(jīng)存在的Pod驅(qū)逐出去。任務(wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.4污點(diǎn)與容忍度污點(diǎn)和容忍度的常見(jiàn)用例專(zhuān)用節(jié)點(diǎn),將某些節(jié)點(diǎn)專(zhuān)門(mén)分配給特定的一組用戶(hù)使用。配備特殊硬件設(shè)備的節(jié)點(diǎn)?;谖埸c(diǎn)的驅(qū)逐。如果Pod不能容忍這類(lèi)污點(diǎn),Pod會(huì)被立即驅(qū)逐。如果Pod能夠容忍這類(lèi)污點(diǎn),但是在容忍度定義中沒(méi)有指定tolerationSeconds字段,則Pod還會(huì)一直在該節(jié)點(diǎn)上運(yùn)行。如果Pod能夠容忍這類(lèi)污點(diǎn),而且在容忍度定義中指定了tolerationSeconds字段,則Pod還能在該節(jié)點(diǎn)上繼續(xù)運(yùn)行由tolerationSeconds字段所指定的一段時(shí)間。任務(wù)7.3管理Pod的調(diào)度相關(guān)知識(shí)7.3.4污點(diǎn)與容忍度Kubernetes內(nèi)置的污點(diǎn)污點(diǎn)名稱(chēng)說(shuō)明node.kubernetes.io/not-ready節(jié)點(diǎn)未準(zhǔn)備好,相當(dāng)于節(jié)點(diǎn)狀態(tài)Ready的值為"False"node.kubernetes.io/unreachable節(jié)點(diǎn)控制器訪問(wèn)不到節(jié)點(diǎn),相當(dāng)于節(jié)點(diǎn)狀態(tài)Ready的值為"Unknown"node.kubernetes.io/memory-pressure節(jié)點(diǎn)存在內(nèi)存壓力node.kubernetes.io/disk-pressure節(jié)點(diǎn)存在磁盤(pán)壓力node.kubernetes.io/pid-pressure節(jié)點(diǎn)的PID壓力node.kubernetes.io/network-unavailable節(jié)點(diǎn)網(wǎng)絡(luò)不可用node.kubernetes.io/unschedulable節(jié)點(diǎn)不可調(diào)度node.cloudprovider.kubernetes.io/uninitialized如果kubelet啟動(dòng)時(shí)指定一個(gè)外部云平臺(tái)驅(qū)動(dòng),則它將給當(dāng)前節(jié)點(diǎn)添加一個(gè)污點(diǎn)將其標(biāo)志為不可用。初始化該節(jié)點(diǎn)之后,kubelet將刪除此污點(diǎn)任務(wù)7.3管理Pod的調(diào)度任務(wù)實(shí)現(xiàn)任務(wù)7.3.1將應(yīng)用程序部署在特定的節(jié)點(diǎn)上apiVersion:apps/v1kind:Deploymentmetadata:name:nginx-deployspec:replicas:2#副本數(shù)
selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginx#Pod標(biāo)簽任務(wù)7.3管理Pod的調(diào)度任務(wù)實(shí)現(xiàn)任務(wù)7.3.1將應(yīng)用程序部署在特定的節(jié)點(diǎn)上spec:affinity:nodeAffinity:#節(jié)點(diǎn)親和性配置
preferredDuringSchedulingIgnoredDuringExecution:#軟性限制規(guī)則
-weight:80preference:#第1條參考規(guī)則
matchExpressions:-key:nodeenvoperator:Invalues:-prod-weight:50preference:#第2條參考規(guī)則
matchExpressions:-key:ssdoperator:Existscontainers:-name:nginximage:nginx:1.16-alpine任務(wù)7.3管理Pod的調(diào)度任務(wù)實(shí)現(xiàn)任務(wù)7.3.2將同一應(yīng)用程序部署到不同的節(jié)點(diǎn)上apiVersion:apps/v1kind:Deploymentmetadata:name:redis-cachespec:selector:matchLabels:app:storereplicas:3#副本數(shù)
template:metadata:labels:app:store任務(wù)7.3管理Pod的調(diào)度任務(wù)實(shí)現(xiàn)任務(wù)7.3.2將同一應(yīng)用程序部署到不同的節(jié)點(diǎn)上spec:affinity:podAntiAffinity:#Pod間反親和性
requiredDuringSchedulingIgnoredDuringExecution:#硬性限制規(guī)則
-labelSelector:matchExpressions:-key:appoperator:Invalues:-storetopologyKey:"kubernetes.io/hostname"#拓?fù)溆驗(yàn)楣?jié)點(diǎn)
containers:-name:redis-serverimage:redis:3.2-alpine任務(wù)7.3管理Pod的調(diào)度任務(wù)實(shí)現(xiàn)任務(wù)7.3.3將關(guān)聯(lián)的應(yīng)用程序部署到同一節(jié)點(diǎn)上apiVersion:apps/v1kind:Deploymentmetadata:name:web-serverspec:selector:matchLabels:app:web-storereplicas:2#副本數(shù)
template:metadata:labels:app:web-storespec:affinity:任務(wù)7.3管理Pod的調(diào)度任務(wù)實(shí)現(xiàn)任務(wù)7.3.3將關(guān)聯(lián)的應(yīng)用程序部署到同一節(jié)點(diǎn)上podAntiAffinity:#Pod間反親和性
requiredDuringSchedulingIgnoredDuringExecution:#硬性限制規(guī)則
-labelSelector:matchExpressions:-key:appoperator:Invalues:-web-storetopologyKey:"kubernetes.io/hostname"podAffinity:#Pod間親和性
requiredDuringSchedulingIgnoredDuringExecution:#硬性限制規(guī)則
-labelSelector:matchExpressions:-key:appoperator:Invalues:-storetopologyKey:"kubernetes.io/hostname"containers:-name:web-appimage:nginx:1.16-alpine任務(wù)7.3管理Pod的調(diào)度任務(wù)實(shí)現(xiàn)任務(wù)7.3.4示范污點(diǎn)和容忍度的使用(1)為node01節(jié)點(diǎn)標(biāo)記污點(diǎn),其key屬性值設(shè)置為group,value屬性值設(shè)置為info,effect屬性值設(shè)置為NoSchedule,以拒絕將Pod調(diào)度到該節(jié)點(diǎn)上。(2)編寫(xiě)Deployment配置文件。spec:replicas:2selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-name:nginximage:nginx:1.16-alpine任務(wù)7.3管理Pod的調(diào)度任務(wù)實(shí)現(xiàn)任務(wù)7.3.4示范污點(diǎn)和容忍度的使用(3)創(chuàng)建名為nginx-deploy的Deployment對(duì)象。(4)查看該Deployment對(duì)象的Pod副本列表。(5)修改配置文件taint-nginx-deploy.yaml,在其中增加以下容忍度定義。
tolerations:-key:"group"operator:"Equal"value:"info"effect:"NoSchedule"(6)重新應(yīng)用該配置文件。(7)查看該Deployment對(duì)象的Pod副本列表以驗(yàn)證容忍度設(shè)置是否生效。#kubectlgetpod-lapp=nginx-owideNAMEREADYSTATUSRESTARTSAGEIPNODE...nginx-deploy-6496569d95-2rz8g1/1Running082s88node01...nginx-deploy-6496569d95-n626v1/1Running081s1node02...任務(wù)7.3管理Pod的調(diào)度任務(wù)實(shí)現(xiàn)任務(wù)7.3.4示范污點(diǎn)和容忍度的使用(8)對(duì)該Deployment對(duì)象進(jìn)行擴(kuò)容,副本數(shù)增加到4,可以發(fā)現(xiàn)4個(gè)Pod副本都分布在node01和node02兩個(gè)節(jié)點(diǎn)上運(yùn)行。(9)將node01節(jié)點(diǎn)上標(biāo)簽為group=info的污點(diǎn)的effect屬性值修改為NoExecute,以便將該節(jié)點(diǎn)上已經(jīng)存在的Pod驅(qū)逐出去。#kubectltaintnodesnode01group=info:NoExecute--overwrite=truenode/node01modified(10)查看Pod副本列表以驗(yàn)證驅(qū)逐。#kubectlgetpod-lapp=nginx-owideNAMEREADYSTATUSRESTARTSAGEIPNODE...nginx-deploy-6496569d95-2ht6h1/1Running049s4node02...nginx-deploy-6496569d95-2j77n1/1Running03m19s2node02...nginx-deploy-6496569d95-5f5zd1/1Running049s3node02...nginx-deploy-6496569d95-n626v1/1Running07m51s1node02...任務(wù)7.3管理Pod的調(diào)度任務(wù)實(shí)現(xiàn)任務(wù)7.3.4示范污點(diǎn)和容忍度的使用(11)通過(guò)kubectldescribenodenode01命令查看節(jié)點(diǎn)詳細(xì)信息。#kubectldescribenodenode01|grepgroup=infoTaints:group=info:NoExecutegroup=info:NoSchedule(12)清除節(jié)點(diǎn)上的污點(diǎn)。#kubectltaintnodesnode01group-node/node01untainted#kubectltaintnodesnode01group=office:NoExecute-node/node01untainted#kubectltaintnodesnode01group=office:NoSchedule-node/node01untaintedTHANKSKubernetes集群實(shí)戰(zhàn)(微課版)工業(yè)和信息化精品系列教材——云計(jì)算技術(shù)項(xiàng)目8
高效管理應(yīng)用程序的部署能力CAPACITY要求了解Helm及其相關(guān)概念和基本用法掌握使用Helm部署和管理Kubernetes應(yīng)用程序的方法了解Kustomization文件了解Kustomize的基本用法學(xué)會(huì)使用Kustomize管理Kubernetes應(yīng)用程序的部署任務(wù)8.2使用Kustomize定制應(yīng)用程序的部署配置任務(wù)8.1使用Helm簡(jiǎn)化應(yīng)用程序的部署和管理任務(wù)8.1使用Helm簡(jiǎn)化應(yīng)用程序的部署和管理任務(wù)說(shuō)明01OPTION02OPTION03OPTION了解Helm的概念和工作機(jī)制了解Chart結(jié)構(gòu)了解Helm的基本用法04OPTION掌握Helm的安裝和配置方法05OPTION學(xué)會(huì)使用Helm在Kubernetes中部署和管理應(yīng)用程序任務(wù)8.1使用Helm簡(jiǎn)化應(yīng)用程序的部署和管理相關(guān)知識(shí)8.1.1什么是HelmHelm是Kubernetes應(yīng)用程序的包管理器。Helm的主要功能支持公共或私有倉(cāng)庫(kù)實(shí)現(xiàn)Kubernetes應(yīng)用程序軟件包的版本管理和分發(fā)。方便普通用戶(hù)從第三方獲取共享的Kubernetes應(yīng)用程序軟件包。創(chuàng)建和托管自己的Kubernetes應(yīng)用程序軟件包。簡(jiǎn)化Kubernetes應(yīng)用程序的安裝部署。簡(jiǎn)化Kubernetes應(yīng)用程序的管理操作,如升級(jí)、刪除、回滾等。Helm特別適合管理復(fù)雜的Kubernetes應(yīng)用程序。任務(wù)8.1使用Helm簡(jiǎn)化應(yīng)用程序的部署和管理相關(guān)知識(shí)8.1.2Helm是如何工作的Helm的基本概念Chart——代表一個(gè)Helm包,其中包含了在Kubernetes集群中運(yùn)行應(yīng)用程序、工具或服務(wù)所需的所有資源定義等。Repository——用于發(fā)布和存儲(chǔ)Chart的倉(cāng)庫(kù)。Release——代表在Kubernetes集群中運(yùn)行的Chart的一個(gè)實(shí)例。Helm模板Helm在Chart包中使用Gotemplate模板語(yǔ)言來(lái)編寫(xiě)表示Kubernetes資源的模板文件,并提供讓用戶(hù)配置這些模板變量的能力。任務(wù)8.1使用Helm簡(jiǎn)化應(yīng)用程序的部署和管理相關(guān)知識(shí)8.1.2Helm是如何工作的Helm的工作機(jī)制任務(wù)8.1使用Helm簡(jiǎn)化應(yīng)用程序的部署和管理相關(guān)知識(shí)8.1.3Chart結(jié)構(gòu)Chart的文件組織結(jié)構(gòu)wordpress/Chart.yaml#包含Chart描述信息的YAML文件
LICENSE#提供Chart許可證信息的純文本文件,該文件是可選的
README.md#易讀格式的README文件,此文件也是可選的
values.yaml#提供Chart默認(rèn)配置值的YAML文件
values.schema.json#影響values.yaml文件結(jié)構(gòu)的JSON模式,這是可選的
charts/#存放此Chart所依賴(lài)的其他Chart包的目錄
crds/#存放自定義資源定義文件的目錄
templates/#存放用于生成有效的Kubernetes配置文件的模板的目錄
templates/NOTES.txt#包含模板用法簡(jiǎn)要說(shuō)明的純文本文件任務(wù)8.1使用Helm簡(jiǎn)化應(yīng)用程序的部署和管理相關(guān)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年數(shù)據(jù)中心配電系統(tǒng)安裝協(xié)議
- 2024全新物流數(shù)據(jù)服務(wù)居間合同模板下載3篇
- 2024年度商業(yè)股份轉(zhuǎn)讓與公共資源交易合同3篇
- 2024年合伙共營(yíng)合同3篇
- 2024年標(biāo)準(zhǔn)拖拉機(jī)買(mǎi)賣(mài)協(xié)議模板版
- 2024年度營(yíng)業(yè)員崗位勞動(dòng)合同續(xù)簽協(xié)議3篇
- 2024年度運(yùn)輸合同標(biāo)的及運(yùn)輸方式和時(shí)間安排3篇
- 2024年知識(shí)產(chǎn)權(quán)財(cái)產(chǎn)抵押擔(dān)保協(xié)議3篇
- 2024年度國(guó)防獎(jiǎng)學(xué)金獲得者培養(yǎng)協(xié)議3篇
- 2024年專(zhuān)利權(quán)質(zhì)押合同3篇
- 中心靜脈壓CVP監(jiān)測(cè)專(zhuān)家講座
- 大豆購(gòu)貨合同范本(2024版)
- 裝修出租合同范本
- 任命基金管理人協(xié)議
- 研學(xué)旅游基地設(shè)計(jì)方案
- 張成?!豆补芾韺W(xué)》(修訂版)課后習(xí)題詳解
- 托育、早教中心崗位績(jī)效考核標(biāo)準(zhǔn)
- 小罐茶行業(yè)分析報(bào)告
- 福建省國(guó)土空間規(guī)劃(2021-2035年)公眾版
- 西方社會(huì)思想兩千年智慧樹(shù)知到期末考試答案章節(jié)答案2024年復(fù)旦大學(xué)
- 新時(shí)代大學(xué)生勞動(dòng)教育智慧樹(shù)知到期末考試答案章節(jié)答案2024年黑龍江農(nóng)業(yè)經(jīng)濟(jì)職業(yè)學(xué)院
評(píng)論
0/150
提交評(píng)論