您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)如何進行Kubernetes服務(wù)類型的淺析,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。
在Kubernetes中,服務(wù)總是能使其網(wǎng)絡(luò)訪問到一個或一組Pod上。服務(wù)將會根據(jù)標簽選擇Pod并且當對這些服務(wù)建立網(wǎng)絡(luò)時,它會選擇集群中所有與服務(wù)的selector相匹配的Pod,并選擇其中的一個,然后將網(wǎng)絡(luò)請求轉(zhuǎn)發(fā)給它。
Deployment主要負責讓一組pod在集群中保持運行
服務(wù)主要負責在集群中啟用對一組pod的網(wǎng)絡(luò)訪問
我們可以使用deployment而不使用服務(wù),所以我們可以保持幾個相同的Pod在K8S集群中運行。此外,Deployment的規(guī)??梢詳U大和縮小,pod也可以復制。在Kubernetes中,單個pod可以直接通過網(wǎng)絡(luò)請求單獨訪問,因此要跟蹤pod會有些困難。
我們也可以使用一個服務(wù)類型而不需要deployment。如果我們這樣做,將創(chuàng)建一個單一的pod,而不是像我們在deployment中那樣一起創(chuàng)建所有pod。不過,我們還有另一種替代方案,即我們的服務(wù)能夠根據(jù)分配給它們的標簽進行選擇,從而將網(wǎng)絡(luò)請求路由到這些Pod。
在Kubernetes中,有兩種方式可以發(fā)現(xiàn)服務(wù):
DNS類型。DNS server被添加到集群中,以便觀察Kubernetes API為每個新服務(wù)創(chuàng)建DNS record set。當整個集群啟用DNS后,所有的Pod都應(yīng)該能夠自動進行服務(wù)名稱解析。
ENV變量。在這一發(fā)現(xiàn)方法中,一個pod運行在一個節(jié)點上,所以 kubelet為每個active服務(wù)添加環(huán)境變量。
服務(wù)規(guī)范中的類型屬性決定了服務(wù)如何暴露在網(wǎng)絡(luò)中。比如,ClusterIP、NodePort和LoadBalancer。
ClusterIP
—默認值。該服務(wù)只能從Kubernetes集群內(nèi)訪問。
NodePort
—這使得服務(wù)可以通過集群中每個節(jié)點上的靜態(tài)端口訪問。
LoadBalancer
—服務(wù)通過云提供商的負載均衡器功能可以從外部訪問。阿里云、AWS、Azure都提供了這一功能。
通過deployment kind的幫助,以“Hello World” App形式的簡單示例將會幫助你更好地理解如何創(chuàng)建服務(wù)。
我們的操作流程是,當我們看到應(yīng)用程序已經(jīng)部署完成并且以up狀態(tài)運行的時候,我們將創(chuàng)建服務(wù)(Cluster IP)來訪問Kubernetes中的應(yīng)用程序。
現(xiàn)在,讓我們創(chuàng)建一個正在運行的deployment
“kubectl run hello-world –replicas=3 –labels=”run=load-balancer-example” –image=gcr.io/google-samples/node-hello:1.0 –port=8080”.
這里,這個命令在Kubernetes中創(chuàng)建了一個有兩個應(yīng)用程序副本的deployment。
接下來,
run "kubectl get deployment hello-world" so see that the deployment is running. Now we can check the replicaset and pods that the deployment created. $ kubectl get deployments hello-world NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-world 3 3 3 3 76s
應(yīng)用程序現(xiàn)在正在運行,如果你想要訪問新創(chuàng)建的應(yīng)用程序,我們需要創(chuàng)建ClusterIP類型的服務(wù):
為服務(wù)創(chuàng)建一個YAML manifest并應(yīng)用它,或
使用kubectl expose
命令,這是一個更為簡單的選項。因為這一命令可以無需創(chuàng)建YAML文件即可創(chuàng)建一個服務(wù)。
$ kubectl expose deployment hello-world --type=ClusterIP --name=example-service service "example-service" exposed
在這里,我們將創(chuàng)建一個名為example-service的服務(wù),類型為ClusterIP。
那么,現(xiàn)在我們將訪問我們的應(yīng)用程序:
run “kubectl get service example-service” to get our port number.
然后,我們需要執(zhí)行port-forward
命令。因為我們的服務(wù)類型是ClusterIP,所以只能在集群內(nèi)訪問,因此我們必須通過轉(zhuǎn)發(fā)端口到集群中的本地端口才能訪問我們的應(yīng)用程序。
我們可以使用其他類型,如LoadBalancer,這將在AWS或GCP中創(chuàng)建一個LB,然后我們可以使用給LB的DNS地址和我們端口號來訪問應(yīng)用程序。
$ kubectl get service example-service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-service ClusterIP 100.20.167.76 <none> 8080/TCP 1h $ kubectl port-forward service/example-service 8080:8080 Forwarding from 127.0.0.1:8080 -> 8080
現(xiàn)在我們可以從工作站瀏覽http://localhost:8080,并且我們應(yīng)該會看到:
Hello Kubernetes!
此示例YAML創(chuàng)建了可用于外部網(wǎng)絡(luò)請求的服務(wù)。在這里,我們提到了帶Value的NodePort,因此服務(wù)被映射到集群中每個節(jié)點上的端口。
下面是一個yaml的例子,它將展示我們?nèi)绾卧贙ubernetes中使用NodePort服務(wù)類型。
kind: Service apiVersion: v1 metadata: name: hostname-service spec: # Expose the service on a static port on each node # so that we can access the service from outside the cluster type: NodePort # When the node receives a request on the static port (30163) # "select pods with the label 'app' set to 'echo-hostname'" # and forward the request to one of them selector: app: echo-hostname ports: # Three types of ports for a service # nodePort - a static port assigned on each the node # port - port exposed internally in the cluster # targetPort - the container port to send requests to - nodePort: 30163 port: 8080 targetPort: 80
關(guān)于如何進行Kubernetes服務(wù)類型的淺析就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。