小白學k8s 4 使用k8s發布go應用

2022-06-21 02:30:10 字數 4115 閱讀 3936

使用ingress

部署ingress

配置ingress**策略

新增本機的host

參考搭建了一套k8s,嘗試發布乙個go應用

映象打包

之前已經打包過乙個go的映象了,這次就直接跳過了,打包記錄

編寫yaml檔案

kind: deployment

metadata:

spec:

replicas: 2

selector:

matchlabels:

template:

metadata:

labels:

spec:

containers:

image: liz2019/test-docker-go-hub

resources:

limits:

memory: "128mi"

cpu: "500m"

ports:

- containerport: 8000

啟動name ready status restarts age

暴露應用

檢視通過nodeip加埠可以直接訪問

什麼是ingress呢

k8s 的服務(service)時說暴露了service的三種方式clusterip、nodeport與loadbalance,這幾種方式都是在service的維度提供的,service的作用體現在兩個方面,對集群內部,它不斷跟蹤pod的變化,更新endpoint中對應pod的物件,提供了ip不斷變化的pod的服務發現機制,對集群外部,他類似負載均衡器,可以在集群內外部對pod進行訪問。但是,單獨用service暴露服務的方式,在實際生產環境中不太合適:

ingress可以簡單理解為service的service,他通過獨立的ingress物件來制定請求**的規則,把請求路由到乙個或多個service中。這樣就把服務與請求規則解耦了,可以從業務維度統一考慮業務的暴露,而不用為每個service單獨考慮。

ingress根據不同的請求規則,會把請求傳送到不同的service。

ingress與ingress-controller

指的是k8s中的乙個api物件,一般用yaml配置。作用是定義請求如何**到service的規則,可以理解為配置模板。

具體實現反向**及負載均衡的程式,對ingress定義的規則進行解析,根據配置的規則來實現請求**。

簡單來說,ingress-controller才是負責具體**的元件,通過各種方式將它暴露在集群入口,外部對集群的請求流量會先到ingress-controller,而ingress物件是用來告訴ingress-controller該如何**請求,比如哪些網域名稱哪些path要**到哪些服務等等。

在kubernetes中,ingress controller將以pod的形式執行,監控api server的/ingr ess介面後端的backend services,如果service發生變化,則ingress controller應自動 更新其**規則。

ingress

ingress的部署,需要考慮兩個方面:

1、ingress-controller是作為pod來執行的,以什麼方式部署比較好

2、ingress解決了把如何請求路由到集群內部,那它自己怎麼暴露給外部比較好

到目前為止,kubernetes主要有有三種暴露服務的方式

loadblancer service

如果要把ingress部署在公有雲,那用這種方式比較合適。用deployment部署ingress-controller,建立乙個type為loadbalancer的service關聯這組pod。大部分公有雲,都會為loadbalancer的service自動建立乙個負載均衡器,通常還繫結了公網位址。只要把網域名稱解析指向該位址,就實現了集群服務的對外暴露。

nodeport service

用deployment模式部署ingress-controller,並建立對應的服務,但是type為nodeport。這樣,ingress就會暴露在集群節點ip的特定埠上。由於nodeport暴露的埠是隨機埠,一般會在前面再搭建一套負載均衡器來**請求。該方式一般用於宿主機是相對固定的環境ip位址不變的場景。nodeport方式暴露ingress雖然簡單方便,但是nodeport多了一層nat,在請求量級很大時可能對效能會有一定影響。

hostnetwork service

用daemonset結合nodeselector來部署ingress-controller到特定的node上,然後使用hostnetwork直接把該pod與宿主機node的網路打通,直接使用宿主機的80/433埠就能訪問服務。這時,ingress-controller所在的node機器就很類似傳統架構的邊緣節點,比如機房入口的nginx伺服器。該方式整個請求鏈路最簡單,效能相對nodeport模式更好。缺點是由於直接利用宿主機節點的網路和埠,乙個node只能部署乙個ingress-controller pod。比較適合大併發的生產環境使用。

mandatory.yaml位址

建立$ kubectl get pods -n ingress-nginx

$ kubectl get service -n ingress-nginx

首先檢視service

$ kubectl get svc

name type cluster-ip external-ip port(s) age

配置ingress

檢視

$ kubectl get pod -n ingress-nginx -o wide

name ready status restarts age ip node nominated node readiness gates

nginx-ingress-controller-495zq 1/1 running 0 13m 192.168.56.202 192.168.56.202 nginx-ingress-controller-6nlrb 1/1 running 0 13m 192.168.56.203 192.168.56.203

nginx-ingress-controller是在192.168.56.202上面的,所以我們下面的host就配置到這個機器中。

$ sudo vi /etc/hosts

// 根據ingress部署的ip

192.168.56.202 www.liz-test.com

訪問結果

【k8s 安裝 ingress】

【k8s ingress原理及ingress-nginx部署測試】

【kubernetes deployment 故障排查常見方法[譯]】

【kubernetes部署-ingress】

k8s灰度更新 k8s實現灰度發布

灰度發布在實際生產部署中是經常被使用的方式,常規的方法是手動從前端lb 負載均衡 上將後端伺服器摘掉,然後,停服務,最後上傳 完成軟連線更新。在使用ci cd工具時,這個過程變得自動化了,我們只需要通過jenkins這個功能強大的開源持續整合和部署工具,就可以聯合gitlab 或 gogs 來實現自...

K8s部署prometheus監控K8s細節

prometheus 一些配置檔案可以再github上找到。部署 root kube prometheus manifests 目錄下所有檔案 部署 root kube prometheus manifests setup 目錄下所有檔案 要注意的是自己要建立乙個工作空間 如果報錯執行下面語句 部署...

k8s 多租戶 k8s 基礎介紹

備註 1 每乙個pod裡執行著乙個特殊的容器 pause容器,其他容器都是業務容器,這些業務容器共享pause容器的網路棧和volume 邏輯卷 掛載卷。因此他們之間的通訊和資料交換更為高效。2 k8s設計了pod物件,將每個服務程序包裝到相應的pod中,使其成為pod中執行的乙個容器 contai...