目錄
- 通過NodePort Service在外部通路叢集應用
- 通過LoadBalancer Service在外部通路叢集應用
- Microsoft SQL Server資料庫部署
為了便于了解和學習,請先閱讀上一篇《通過Service通路應用 (1)》再繼續學習本篇内容。
通過NodePort Service在外部通路叢集應用
這時候我們就可以使用NodePort類型的Service了。NodePort服務類型允許在每個節點的IP(任意節點IP)上使用靜态端口(NodePort)公開服務,我們可以在叢集之外通過請求<NodeIP>:<NodePort>來通路服務。
YAML定義如下所示:
kind: Service #資源類型
apiVersion: v1
metadata: #标準中繼資料
name: nodeport-service #服務名稱
spec: #規範定義
type: NodePort #服務類型,這裡是節點端口
ports: #端口清單
- port: 80 #目前端口
nodePort: 31001 #節點端口,注意預設的端口範圍為“30000-32767”,注意不要沖突
selector: #标簽選擇器
app: demo
接下來,我們來執行Service的建立并查詢Service:
kubectl create -f nodePortService.yaml
kubectl get services nodeport-service
如上圖所示,我們建立了名為“nodeport-service”的Service,該Service映射“31001”節點端口,并且建立了“11.3.138.104”的叢集IP,也就是說,Service可以通過“節點IP:節點端口”或“叢集IP(spec.clusterIp):端口”進行通路。
接下來,在叢集外部的計算機,我們通過節點IP和節點端口(172.16.2.201:31001)即可通路剛剛部署的Demo應用:
雖然我們可以在外部通路叢集中的應用,但是也可以看到該方案有不少不足:
- 每個端口僅能支援一個服務,不能沖突
- 端口範圍必須為“30000-32767”,非常不友好
- 如果節點IP發生變化,服務也将無法通路
是以,用于開發測試還說得過去,用于生産的話,會影響“升職加薪赢取白富美”!我們得尋求更佳方案。
通過LoadBalancer Service在外部通路叢集應用
LoadBalancer Service是暴露服務到外部(Internet)的标準方式,它可以完美的解決我們上面的問題,不過使用之前,我們得有一個loadBalancerIP——負載均衡IP。一般的雲廠商都能夠提供這個服務。這裡我們以騰訊雲為例進行講解。
首先,我們需要在騰訊雲的k8s叢集建立一個Demo Deployment,配置參考上文。
接下來,我們需要建立一個負載均衡服務,以便得到負載均衡IP:
有了IP,我們就可以建立LoadBalancer Service了,YAML定義如下所示:
apiVersion: v1 #api版本
kind: Service #Service
metadata: #标準中繼資料
name: demo #名稱
namespace: default #命名空間
spec: #規範
clusterIP: 10.3.255.28 #叢集IP
loadBalancerIP: 106.52.99.55 #負載均衡IP
ports: #端口清單
- name: tcp-80-80
nodePort: 31504 #節點IP
port: 80 #Pod端口
protocol: TCP #協定
targetPort: 80 #服務端口
selector: #選擇器
app: demo
k8s-app: demo
qcloud-app: demo
type: LoadBalancer #服務類型,這裡為負載均衡服務類型
如上述定義所示,我們進行建立Service。該定義設定了叢集IP為“10.3.255.28”,負載均衡IP(loadBalancerIP)為“106.52.99.55”,節點端口為“31504”。Service定義好了,我們對負載均衡服務進行配置,配置一個TCP監聽器如下所示:
接下來,我們就可以盡情通路了。通過節點IP和端口通路:
通過負載均衡IP通路:
通過綁定域名通路(請設定域名解析為負載均衡IP):
Microsoft SQL Server資料庫部署
為了讓大家更好的使用上述對象進行部署,本節筆者使用大家熟知的Microsoft SQL Server資料庫來進行部署。
-
部署目标
完成Linux版本的Microsoft SQL Server 2017的部署
使用節點目錄“/var/mssql”來存儲資料庫檔案
設定初始密碼為“123456abcD”
開放1433端口,并且允許外部應用通過節點端口“30338”通路資料庫
- YAML定義
接下來,我們需要定義YAML檔案。根據部署目标,我們确定可以使用Deployment對象和Service對象來完成本次部署。YAML檔案定義如下如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
labels:
app: mssql
name: mssql #目前Deployment對象名稱,同一個命名空間下必須唯一
spec:
replicas: 1 #副本集數量
revisionHistoryLimit: 2 #保留的曆史記錄數,設定為0将清理部署的所有曆史記錄,無法復原
strategy:
type: Recreate
template:
metadata:
labels:
app: mssql
spec:
containers:
- env: #環境變量設定
- name: ACCEPT_EULA
value: "Y"
- name: SA_PASSWORD #sa密碼設定
value: 123456abcD
image: mcr.microsoft.com/mssql/server:2017-latest-ubuntu #鏡像
imagePullPolicy: Always
name: mssql
ports:
- containerPort: 1433 #容器端口,SQLServer資料庫預設端口為1433
resources: #資源限制
limits:
cpu: "2"
memory: 2096Mi
requests:
cpu: 100m
memory: 827Mi
volumeMounts:
- mountPath: /var/opt/mssql/
name: data-vol
restartPolicy: Always
terminationGracePeriodSeconds: 30 #Pod結束時等待時長(機關為秒)
volumes:
- name: data-vol
hostPath: #使用主機目錄
path: /var/mssql
---
apiVersion: v1
kind: Service
metadata:
labels:
app: mssql
name: mssql #服務名稱
spec:
ports:
- name: tcp-1433-1433
nodePort: 30338 #節點端口,注意預設的端口範圍為“30000-32767”,注意不要沖突
port: 1433 #端口
protocol: TCP
targetPort: 1433 #目标端口
selector: #Pod标簽選擇器
app: mssql
sessionAffinity: None
type: NodePort #服務類型,這裡是負載均衡類型
- 執行部署
接下來,我們使用指令執行部署:
kubectl apply -f mssqlserver.yaml
“kubectl apply”指令既可以建立資源,也可以用于更新資源對象。接下來我們通過指令可以檢視部署狀态:
kubectl get svc -o wide -lapp=mssql
kubectl get po -o wide -lapp=mssql
kubectl get deployment -o wide -lapp=mssql
如上圖所示,部署已經成功,那麼接下來我們可以使用管理工具進行連接配接通路:
往期内容連結
Docker+ Kubernetes已成為雲計算的主流(二十五)
容器化之後如何節省雲端成本?(二十六)
了解Kubernetes主體架構(二十七)
使用Minikube部署本地Kubernetes叢集(二十八)
使用kubectl管理k8s叢集(二十九)
使用Kubeadm建立k8s叢集之部署規劃(三十)
使用Kubeadm建立k8s叢集之節點部署(三十一)
叢集故障處理之處理思路以及健康狀态檢查(三十二)
叢集故障處理之處理思路以及聽診三闆斧(三十三)
開源導入導出通用庫Magicodes.ExporterAndImporter釋出
使用Kubectl部署應用
通過Service通路應用 (1)
作者:雪雁
出處:http://www.cnblogs.com/codelove/
溝通管道:程式設計交流群<85318032> 産品交流群<897857351>
如果喜歡作者的文章,請關注【麥扣聊技術】訂閱号以便第一時間獲得最新内容。本文版權歸作者和湖南心萊資訊科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。
靜聽鳥語花香,漫賞雲卷雲舒。