您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么實現Kubernetes應用部署”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么實現Kubernetes應用部署”吧!
概述
當希望在Kubernetes中部署應用程序時,通常要定義三個組件:
部署(Deployment):這是創建Pod應用程序副本的方法
服務(Service):將流量調度到Pods的內部負載平衡器
入口(Ingress):描述流量如何從群集外部流到服務。
直觀圖示
首先,在Kubernetes中,應用程序應該通過兩層負載均衡對外公開:內部負載均衡器和外部負載均衡器。
其次,內部的負載均衡器又被稱為服務,而外部的負載均衡器稱為入口。
最后:Pods不會直接部署。相反,Deployment會在其上創建Pods和觀察者。
應用YAML示例
一個簡單的Hello World應用程序為例,該應用程序的YAML如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
labels:
track: canary
spec:
selector:
matchLabels:
any-name: my-app
template:
metadata:
labels:
any-name: my-app
spec:
containers:
- name: cont1
image: learnk8s/app:1.0.0
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- port: 80
targetPort: 8080
selector:
name: app
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: my-ingress
spec:
rules:
- http:
paths:
- backend:
serviceName: app
servicePort: 80
path: /
該定義很長,不好發現組件之間的相互聯系。
比如下這些問題:
什么時候應該使用端口80,什么時候應該使用端口8080?
為了避免沖突,是否應要為每個服務都創建一個新端口?
標簽名稱重要嗎?各處命名是否都應該一致?
要回答這些問題,請接著往下看:
連接部署和服務
實際上服務和部署沒有直接連接,服務跳過部署直接指向Pod。因此,要注意的實際上是Pod和服務之間的相互關系。
關鍵點
他們關系中要注意:
服務選擇器應至少與Pod的一個標簽匹配;
服務的目標端口(targetPort)應該與Pod內容器的容器端口(containerPort)匹配;
服務端口可以是任何數字。多個服務也可以使用同一端口,因為它們分配了不同的IP地址。
直觀圖示
1. 考慮服務下Pod公開的端口
2.創建Pod時,應為Pod中的每個容器定義端口containerPort。
3.創建服務時,可以定義端口和目標端口。但是只能用目標端口連接容器
4.目標端口和容器端口應該匹配。
5. 如果容器公開了端口3000,則targetPort應該與該數字匹配。
如果查看YAML,則標簽和ports/targetPor應該匹配:
常見問題
那么部署頂部track: canary標簽是干什么的?
需要應該匹配嗎?
部署的track: canary標簽屬于部署,服務選擇器沒有使用它來做流量調度。所以這個標簽完全可以刪除,或者為它分配其他值。
matchLabels選擇器呢?
它必須與Pod標簽匹配,部署用它來跟蹤Pod。
Pod配置修改,如何測試?
我們可以使用以下命令檢查Pod的標簽是否正確:
kubectl get pods --show-labels
對于屬于多個應用程序的Pod使用:
kubectl get pods --selector any-name=my-app --show-labels
其中any-name = my-app表示標簽any-name:my-app。
或者可以直接連接到Pod:可以使用kubectl port-forward命令連接到服務并測試連接。
kubectl port-forward service/
其中,service/
如果可以連接,則說明設置正確。如果不能,則很可能配置了標簽,或者端口不匹配。
服務和入口連接
應用程序發布的最后一個一步是配置Ingress入口。
關鍵點
入口必須知道如何檢索服務,然后檢索Pod并將流量調度到它們。入口按名稱和公開的端口來檢索服務。
在入口和服務中應該匹配兩件事:
Ingress的servicePort應該與Service的端口匹配
Ingress的serviceName應該與Service的名稱匹配
直觀圖示
首先,已經該服務發布了一個端口。
其次,入口中有一個名為服務端口(servicePort)的字段。
在次,服務端口和入口服務端口應始終匹配。
最后,如果為服務分配了端口80,也應將其servicePort更改為80。
先示例配置要注意的字段:
常見問題
如何測試入口的功能?
可以對kubectl port-forward使用與之前相同的策略,但是應該連接到Ingress控制器,而不是連接到服務。
首先,使用以下命令檢索Ingress控制器的Pod名稱:
kubectl get pods --all-namespaces
對確認的Ingress Pod(可能在不同的命名空間中)執行下面命令:
kubectl describe pod nginx-ingress-controller-6fc5bcc --namespace kube-system|grep Ports
用得到端口連接到Pod:
kubectl port-forward nginx-ingress-controller-6fc5bcc 3000:80 --namespace kube-system
這樣訪問計算機上的端口3000時,請求都會被轉發到Ingress控制器Pod上的端口80。你訪問localhost:3000,就能看到發布的應用程序。
感謝各位的閱讀,以上就是“怎么實現Kubernetes應用部署”的內容了,經過本文的學習后,相信大家對怎么實現Kubernetes應用部署這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。