您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關如何進行Kubernetes服務類型的淺析,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
在Kubernetes中,服務總是能使其網絡訪問到一個或一組Pod上。服務將會根據標簽選擇Pod并且當對這些服務建立網絡時,它會選擇集群中所有與服務的selector相匹配的Pod,并選擇其中的一個,然后將網絡請求轉發給它。
Deployment主要負責讓一組pod在集群中保持運行
服務主要負責在集群中啟用對一組pod的網絡訪問
我們可以使用deployment而不使用服務,所以我們可以保持幾個相同的Pod在K8S集群中運行。此外,Deployment的規模可以擴大和縮小,pod也可以復制。在Kubernetes中,單個pod可以直接通過網絡請求單獨訪問,因此要跟蹤pod會有些困難。
我們也可以使用一個服務類型而不需要deployment。如果我們這樣做,將創建一個單一的pod,而不是像我們在deployment中那樣一起創建所有pod。不過,我們還有另一種替代方案,即我們的服務能夠根據分配給它們的標簽進行選擇,從而將網絡請求路由到這些Pod。
在Kubernetes中,有兩種方式可以發現服務:
DNS類型。DNS server被添加到集群中,以便觀察Kubernetes API為每個新服務創建DNS record set。當整個集群啟用DNS后,所有的Pod都應該能夠自動進行服務名稱解析。
ENV變量。在這一發現方法中,一個pod運行在一個節點上,所以 kubelet為每個active服務添加環境變量。
服務規范中的類型屬性決定了服務如何暴露在網絡中。比如,ClusterIP、NodePort和LoadBalancer。
ClusterIP
—默認值。該服務只能從Kubernetes集群內訪問。
NodePort
—這使得服務可以通過集群中每個節點上的靜態端口訪問。
LoadBalancer
—服務通過云提供商的負載均衡器功能可以從外部訪問。阿里云、AWS、Azure都提供了這一功能。
通過deployment kind的幫助,以“Hello World” App形式的簡單示例將會幫助你更好地理解如何創建服務。
我們的操作流程是,當我們看到應用程序已經部署完成并且以up狀態運行的時候,我們將創建服務(Cluster IP)來訪問Kubernetes中的應用程序。
現在,讓我們創建一個正在運行的deployment
“kubectl run hello-world –replicas=3 –labels=”run=load-balancer-example” –image=gcr.io/google-samples/node-hello:1.0 –port=8080”.
這里,這個命令在Kubernetes中創建了一個有兩個應用程序副本的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
應用程序現在正在運行,如果你想要訪問新創建的應用程序,我們需要創建ClusterIP類型的服務:
為服務創建一個YAML manifest并應用它,或
使用kubectl expose
命令,這是一個更為簡單的選項。因為這一命令可以無需創建YAML文件即可創建一個服務。
$ kubectl expose deployment hello-world --type=ClusterIP --name=example-service service "example-service" exposed
在這里,我們將創建一個名為example-service的服務,類型為ClusterIP。
那么,現在我們將訪問我們的應用程序:
run “kubectl get service example-service” to get our port number.
然后,我們需要執行port-forward
命令。因為我們的服務類型是ClusterIP,所以只能在集群內訪問,因此我們必須通過轉發端口到集群中的本地端口才能訪問我們的應用程序。
我們可以使用其他類型,如LoadBalancer,這將在AWS或GCP中創建一個LB,然后我們可以使用給LB的DNS地址和我們端口號來訪問應用程序。
$ 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
現在我們可以從工作站瀏覽http://localhost:8080,并且我們應該會看到:
Hello Kubernetes!
此示例YAML創建了可用于外部網絡請求的服務。在這里,我們提到了帶Value的NodePort,因此服務被映射到集群中每個節點上的端口。
下面是一個yaml的例子,它將展示我們如何在Kubernetes中使用NodePort服務類型。
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
關于如何進行Kubernetes服務類型的淺析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。