Kubernetes集群之Service完整知識_第1頁
Kubernetes集群之Service完整知識_第2頁
Kubernetes集群之Service完整知識_第3頁
Kubernetes集群之Service完整知識_第4頁
Kubernetes集群之Service完整知識_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

Kubernetes集群之Service實(shí)戰(zhàn)案例——\hKubernetes集群之\hKubernetes集群各節(jié)點(diǎn)的規(guī)劃見表1-1,采用單Master集群部署架構(gòu)。表1-1節(jié)點(diǎn)規(guī)劃master基礎(chǔ)\hIP所有節(jié)點(diǎn)安裝CentOS7.5_1804系統(tǒng),并配置主機(jī)名和網(wǎng)卡。[root@localhost~]#hostnamectlset-hostname[root@localhost~]#[root@master~]#cat/etc/sysconfig/network-scripts/ifcfg-Service周期。我們知道Pod資源對象在自愿或非自愿終端后,只能被重構(gòu)的Pod式下,Service為該類Pod其實(shí),就是說Pod存在生命周期,有銷毀,有重建,無法提供一個固定的訪問接口給客戶端。并且為了同類的Pod都能夠?qū)崿F(xiàn)工作負(fù)載的價值,由此Service資源出現(xiàn)了,可以為一類Pod資源對象提供一個固定的訪問接口和負(fù)載均衡,類似于阿里云的負(fù)載均衡或者是VS的功能。但是要知道的是,Service和Pod對象的IP地址,一個是虛擬地址,一個是PodIP地址,都僅僅在集群內(nèi)部可以進(jìn)行訪問,無法接入集群(hostNetwork)以外,還可以使用NodePort或者是LoadBalancer類型的Service資源,或者是有7層負(fù)載均衡能力的IngressService是Kubernetes的核心資源類型之一,Service資源基于標(biāo)簽選擇器將一組Pod定義成一個邏輯組合,并通過自己的IP地址和端口調(diào)度代理請求到組內(nèi)的Pod對象,如圖1-1所示,處理用戶請求的Pod資源,使得從客戶端上看,就像是由Service直接處理并響應(yīng)一樣,是不是很像負(fù)載均衡器呢!Service對象的IP地址也稱為ClusterIP,它位于為Kubernetes集群配置指定專用的IP地址范圍之內(nèi),是一種虛擬的IP地址,它在Service對象創(chuàng)建之后保持不變,并且能夠被同一集群中的Pod資源所訪問。Service端口用于接受客戶端請求,并將請求轉(zhuǎn)發(fā)至后端的Pod應(yīng)用的相應(yīng)端口,這樣的代理機(jī)制,也稱為端口代理,它是基于TCP/IP協(xié)議棧的傳輸層。service ExternalName的形式。在Kubernetesv1.0版本,代理完全在Userspace。在Kubernetesv1.1版本,新增了Iptables代理,但并不是默認(rèn)的運(yùn)行模式。從Kubernetesv1.2起,默認(rèn)就是Iptables代理。在Kubernetesv1.8.0-beta.0中,添加了Ipvs代理。在Kubernetesv1.0版本,Service是“4層”(TCP/UDPoverIP)概念。在Kubernetesv1.1版本,新增了IngressAPI(Beta版),用來表示“7層”(HTTP)服Kube-proxy這個組件始終監(jiān)視著APIServer Userspace如圖1-2所示的這種模式,當(dāng)客戶端Pod請求內(nèi)核空間的ServiceIptables后,把請求轉(zhuǎn)到給用戶空間監(jiān)聽的Kube-proxy的端口,由Kube-proxy來處理后,再由Kube-proxy將請求轉(zhuǎn)給內(nèi)核空間的ServiceIP,再由ServiceIptalbes根據(jù)請求轉(zhuǎn)給各節(jié)點(diǎn)中的的ServicePod。由此可見這個模式有很大的問題,由客戶端請求先進(jìn)入內(nèi)核空間的,又進(jìn)去用戶空間訪問Kube-proxy,由Kube-proxy封裝完成后再進(jìn)去內(nèi)核空間的Iptables,再根據(jù)Iptables的規(guī)則分發(fā)給各節(jié)點(diǎn)的用戶空間的Pod。這樣流量從用戶空間進(jìn)出內(nèi)核帶來的性能損耗是不可接受的。在Kubernetes1.1版本之前,Userspace是默認(rèn)的代理模型。Iptables客戶端IP請求時,直接請求本地內(nèi)核ServiceIP,根據(jù)Iptables的規(guī)則直接將請求轉(zhuǎn)發(fā)到到各Pod上,因?yàn)槭褂肐ptableNAT來完成轉(zhuǎn)發(fā),也存在不可忽視的性能損耗。另外,如果集群中存在上萬的Service/Endpoint,那么Node上的IptablesRules將會非常龐大,性能還會再打折扣。Iptables代理模式由Kubernetes1.1版本引入,自1.2版本開始成為默認(rèn)類型。IpvsIpvs的規(guī)則直接分發(fā)到各Pod上。Kube-proxy會監(jiān)視KubernetesService對象和Endpoints,調(diào)用Netlink接口以相應(yīng)地創(chuàng)建Ipvs規(guī)則并定期與KubernetesService對象和Endpoints對象同步Ipvs規(guī)則,以確保Ipvs狀態(tài)與期望一致。訪問服務(wù)時,流量將被重定向到其中一個后與Iptables類似,Ipvs基于Netfilter的Hook功能,但使用哈希表作為底層數(shù)據(jù)結(jié)構(gòu)并在內(nèi)核空間中工作。這意味著Ipvs可以更快地重定向流量,并且在同步代理規(guī)則時具有更好的性能。此外Ipvs為負(fù)載均衡算法提供了更多選項(xiàng),例如:rrlcdhshsednqIpvs模式假定在運(yùn)行Kube-proxy之前在節(jié)點(diǎn)上都已經(jīng)安裝了IPVS內(nèi)核模塊。當(dāng)Kube-proxy以Ipvs代理模式啟動時,Kube-proxy將驗(yàn)證節(jié)點(diǎn)上是否安裝了IPVS模塊,如果未安裝,則Kube-proxy將回退到Iptables代理模式。在集群內(nèi)部對一個服務(wù)的訪問,主要有兩種方式:環(huán)境變量與DNS當(dāng)一個Pod運(yùn)行在Node上時,Kubelet將為每一個活動的ServiceDockerLink環(huán)境變量:相當(dāng)于 的-link參數(shù)實(shí)現(xiàn)容器連接時設(shè)置的環(huán)境變量KubernetesService環(huán)境變量:Kubernetes為Service設(shè)置的環(huán)境變量形式,{SVCNAME}SERVICE_HOST例如,存在一個名稱為redies-master的Service(它的ClusterIP地址為1,端口號為6379,協(xié)議為TCP),它的環(huán)境變量如下所```shellREDIS_MASTER_SERVICE_HOST=1REDIS_MASTER_SERVICE_PORT=6379REDIS_MASTER_PORT_6379_TCP_PROTO=tcpREDIS_MASTER_PORT_6379_TCP_PORT=6379REDIS_MASTER_PORT_6379_TCP_ADDR=1```Service必須在Pod創(chuàng)建之前被創(chuàng)建,否則Service變量不會被設(shè)置到PodDNSDNS服務(wù)發(fā)現(xiàn)是基于ClusterDNS的,DNS服務(wù)器會對新服務(wù)進(jìn)行監(jiān)控,并為每一個服務(wù)創(chuàng)建DNS記錄,用于域名解析。在集群中,如例如,如果在my-ns命名空間下?lián)碛幸粋€名為my-serivce的服務(wù),則會有一個名為my-service.my-ns的DNS在my-ns命名空間下,Pod將能夠通過名稱my-service在其它命名空間,Pod必須通過my-serivce.my-ns來發(fā)現(xiàn)此服務(wù),此名稱選址的結(jié)果即為ClusterIPKubernetes也支持端口的DNSSRV記錄。如果my-service.my-ns服務(wù)擁有一個TCP協(xié)議名稱為http的端口,就能夠通過http.tcp.my-service.my-ns名稱來發(fā)現(xiàn)http端口的值。KubernetesDNS服務(wù)器是發(fā)現(xiàn)ExternalName類型服務(wù)的唯一途徑。Service類型。默認(rèn)情況下使用ClusterIP。KubernetesClusterIP(default):將服務(wù)暴露在集群內(nèi)部的IPNodePort:將服務(wù)暴露在所選定每一個Node的同一端口,集群外可以通過<NodeIP>:<NodePort>LoadBalancerExternalName:使用一個隨意的名稱來暴露服務(wù),并會返回一個帶有名稱的CNAME LoadBalancer服務(wù)是暴露服務(wù)至\h互聯(lián)網(wǎng)最標(biāo)準(zhǔn)的方案,除了具有集群內(nèi)部IP以及在NodePort上公開服務(wù)之外,還要求云提供商負(fù)載來自外部負(fù)載均衡器的流量將被定向到后端Pod,盡管其工作原理取決于云提供商。一些云提供商允許指定LoadBalancerIP。在這些情ExternalName是Service的特例,它沒有SelectorEndpoint。對于運(yùn)行在集群外部的服務(wù),它通過返回該外3.5節(jié)點(diǎn)將提供的/chinaskills_cloud_paas.iso上傳至/root目錄掛載并把內(nèi)容拷貝到/opt[root@localhost~]#hostnamectlset-hostname[root@localhost~]#[root@master~]#curl-O\h[root@master~]#curl-O\h[root@master~]#curl-O\h[root@master~]#mount-oloopchinaskills_cloud_paas.isomount:/dev/loop0iswrite-protected,mountingread-[root@master~]#cp-rvf/mnt/*[root@master~]#umount[root@master~]#mv/etc/yum.repos.d/*[root@master~]#vibaseurl=file:///opt/kubernetes-[root@master~]#vi localhostlocalhost.localdomainlocalhost4 localhostlocalhost.localdomainlocalhost60 //注意:改為實(shí)際分配的master節(jié)點(diǎn)IP配置防火墻和SELinux([root@master~]#systemctlstopfirewalld&&systemctldisable[root@master~]#iptables-[root@master~]#iptables-[root@master~]#iptables-[root@master~]#iptables-[root@master~]#sed-i's/SELINUX=enforcing/SELINUX=disabled/g'進(jìn)入/opt目錄下,執(zhí)行harbor,k8s-master節(jié)點(diǎn)腳本,部署k8s[root@master~]#cd[root@masteropt]#[root@masteropt]#輸入鏡像倉庫地址(不加http/https): //注意:改為實(shí)際分配的master節(jié)點(diǎn)IP地輸入鏡像倉庫用戶名:輸入鏡像倉庫用戶密碼:您設(shè)置的倉庫地址為:0,用戶名:admin,密碼:是否確認(rèn)(Y/N):[root@masteropt]#創(chuàng)建[root@masteropt]#dockerload-iec5652c3523d:Loadinglayer76d3e24d63f6:Loadinglayerf281464c05be:Loading 7fde79e38c03:Loadinglayer6d4185a1708b:LoadinglayerLoadedimage:[root@masteropt]#dockerimages|grep

02c055ef67f5:Loadinglayer 8months goharbor/redis- 16months [root@masteropt]#dockertagbc8d70f9ef6c //注意:改為實(shí)際分配的master節(jié)點(diǎn)IP[root@masteropt]#dockerpushThepushreferstorepository6d4185a1708b:7fde79e38c03:f281464c05be:76d3e24d63f6:ec5652c3523d:02c055ef67f5:latest:digest:sha256:51a0aaedaa10f05a229a54e1c2977399be0ed5493e8f47304c9aac7aa4b1af84size:[root@masteropt]#viredis-apiVersion:kind:name:redis-namespace:replicas:app:release:app:release:-name:image: //注意:改為實(shí)際分配的master節(jié)點(diǎn)IP-name:containerPort:[root@masteropt]#kubectlapply-fredis-deployment.apps/redis-pod[root@masteropt]#kubectlget redis-pod-67dc75b75d- redis-pod-67dc75b75d- redis-pod-67dc75b75d- 清單創(chuàng)建[root@masteropt]#kubectlexplain VERSION:Serviceisanamedabstractionofsoftwareservice(forexample,consistingoflocalport(forexample3306)thattheproxylistenson,theselectorthatdetermineswhichpodswillanswerrequestssentthe APIVersiondefinestheversionedschemaofthisrepresentationofobject.Serversshouldconvertrecognizedschemastothelatestvalue,andmayrejectunrecognizedvalues.Morehttps://git.k8s.io/community/contributors/devel/sig-architecture/api-kind

KindisastringvaluerepresentingtheRESTresourcethisrepresents.Serversmayinferthisfromtheendpointtheclientrequeststo.Cannotbeupdated.InCamelCase.Morehttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types- Standardobject'smetadata.Morehttps://git.k8s.io/community/contributors/devel/sig-architecture/api-specSpecdefinesthebehaviorofahttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and- Mostrecentlyobservedstatusoftheservice.PopulatedbytheRead-only.Morehttps://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-創(chuàng)建redis的[root@masteropt]#viredis-apiVersion:kind:name:namespace:app:release:type:-port:targetPort:nodePort:[root@masteropt]#kubectlapply-fredis-service/redis[root@masteropt]#kubectlget CLUSTER- EXTERNAL- [root@masteropt]#kubectldescribesvc Selector: <unset> <unset>Endpoints: 7:80,8:80,9:80Session ExternalTrafficPolicy: 從以上演示可以總結(jié)出:Service不會直接到Pod,Service是直接到Endpoint資源,就是地址加端口,再由Endpoint再關(guān)聯(lián)到PodNodePort的ServiceNodePort即節(jié)點(diǎn)Port,通常在部署Kubernetes集群系統(tǒng)時會預(yù)留一個端口范圍用于NodePort,其范圍默認(rèn)為30000~32767之間的端口。定義NodePort類型的Service資源時,需要使用.spec.type進(jìn)行明確指定。[root@masteropt]#vimyapp-apiVersion:kind:name:myapp-namespace:replicas:app:release:app:release:-name:image:-name:containerPort:[root@masteropt]#kubectlapply-fmyapp-deployment.apps/myapp-pod[root@masteropt]#vimyapp-apiVersion:kind:name:namespace:app:release:type:-port:targetPort:nodePort:[root@masteropt]#dockerload-id39d92664027:Loadinglayer8460a579ab63:Loadinglayerc1dc81a64903:Loadinglayer68695a6cfd7d:Loadinglayer05a9e65e2d53:LoadinglayerLoadedimage:[root@masteropt]#kubectlapply-fmyapp-service/myapp[root@masteropt]#kubectlgetpod-n myapp-pod-559ff5c66- myapp-pod-559ff5c66- myapp-pod-559ff5c66- redis-pod-67dc75b75d- redis-pod-67dc75b75d- redis-pod-67dc75b75d- [root@ma

溫馨提示

  • 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

提交評論