成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

K8S入門到實戰--跨服務調用

開發 前端
總的來說 k8s service 提供了簡易的服務注冊發現和負載均衡功能,當我們只提供 http 服務時是完全夠用的。

背景

在做傳統業務開發的時候,當我們的服務提供方有多個實例時,往往我們需要將對方的服務列表保存在本地,然后采用一定的算法進行調用;當服務提供方的列表變化時還得及時通知調用方。

student:  
   url:     
   - 192.168.1.1:8081     
   - 192.168.1.2:8081

這樣自然是對雙方都帶來不少的負擔,所以后續推出的服務調用框架都會想辦法解決這個問題。

以 spring cloud 為例:

圖片圖片

服務提供方會向一個服務注冊中心注冊自己的服務(名稱、IP等信息),客戶端每次調用的時候會向服務注冊中心獲取一個節點信息,然后發起調用。

但當我們切換到 k8s 后,這些基礎設施都交給了 k8s 處理了,所以 k8s 自然得有一個組件來解決服務注冊和調用的問題。

也就是我們今天重點介紹的 service。

service

在介紹 service 之前我先調整了源碼:

func main() {  
   http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Request) {  
      name, _ := os.Hostname()  
      log.Printf("%s ping", name)  
      fmt.Fprint(w, "pong")  
   })  
   http.HandleFunc("/service", func(w http.ResponseWriter, r *http.Request) {  
      resp, err := http.Get("http://k8s-combat-service:8081/ping")  
      if err != nil {  
         log.Println(err)  
         fmt.Fprint(w, err)  
         return  
      }  
      fmt.Fprint(w, resp.Status)  
   })  
  
   http.ListenAndServe(":8081", nil)  
}

新增了一個 /service 的接口,這個接口會通過 service 的方式調用服務提供者的服務,然后重新打包。

make docker

同時也新增了一個 deployment-service.yaml:

apiVersion: apps/v1  
kind: Deployment  
metadata:  
  labels:  
    app: k8s-combat-service # 通過標簽選擇關聯  
  name: k8s-combat-service  
spec:  
  replicas: 1  
  selector:  
    matchLabels:  
      app: k8s-combat-service  
  template:  
    metadata:  
      labels:  
        app: k8s-combat-service  
    spec:  
      containers:  
        - name: k8s-combat-service  
          image: crossoverjie/k8s-combat:v1  
          imagePullPolicy: Always  
          resources:  
            limits:  
              cpu: "1"  
              memory: 100Mi  
            requests:  
              cpu: "0.1"  
              memory: 10Mi  
---  
apiVersion: v1  
kind: Service  
metadata:  
  name: k8s-combat-service  
spec:  
  selector:  
    app: k8s-combat-service # 通過標簽選擇關聯  
  type: ClusterIP  
  ports:  
    - port: 8081        # 本 Service 的端口  
      targetPort: 8081  # 容器端口  
      name: app

使用相同的鏡像部署一個新的 deployment,名稱為 k8s-combat-service,重點是新增了一個kind: Service 的對象。

這個就是用于聲明 service 的組件,在這個組件中也是使用 selector 標簽和 deployment 進行了關聯。

也就是說這個 service 用于服務于名稱等于 k8s-combat-service 的 deployment。

下面的兩個端口也很好理解,一個是代理的端口, 另一個是  service 自身提供出去的端口。

至于 type: ClusterIP 是用于聲明不同類型的 service,除此之外的類型還有:

  • NodePort
  • LoadBalancer
  • ExternalName等類型,默認是 ClusterIP,現在不用糾結這幾種類型的作用,后續我們在講到 Ingress 的時候會具體介紹。

負載測試

我們先分別將這兩個 deployment 部署好:

k apply -f deployment/deployment.yaml
k apply -f deployment/deployment-service.yaml

? k get pod
NAME                                  READY   STATUS    RESTARTS   AGE
k8s-combat-7867bfb596-67p5m           1/1     Running   0          3h22m
k8s-combat-service-5b77f59bf7-zpqwt   1/1     Running   0          3h22m

由于我新增了一個 /service 的接口,用于在 k8s-combat 中通過 service 調用 k8s-combat-service 的接口。

resp, err := http.Get("http://k8s-combat-service:8081/ping")

其中 k8s-combat-service 服務的域名就是他的服務名稱。

如果是跨 namespace 調用時,需要指定一個完整名稱,在后續的章節會演示。

我們整個的調用流程如下:

圖片圖片

相信大家也看得出來相對于 spring cloud 這類微服務框架提供的客戶端負載方式,service 是一種服務端負載,有點類似于 Nginx 的反向代理。

為了更直觀的驗證這個流程,此時我將 k8s-combat-service 的副本數增加到 2:

spec:  
  replicas: 2

只需要再次執行:

? k apply -f deployment/deployment-service.yaml
deployment.apps/k8s-combat-service configured
service/k8s-combat-service unchanged

圖片圖片

不管我們對 deployment 的做了什么變更,都只需要 apply 這個 yaml  文件即可, k8s 會自動將當前的 deployment 調整為我們預期的狀態(比如這里的副本數量增加為 2);這也就是 k8s 中常說的聲明式 API。

可以看到此時 k8s-combat-service 的副本數已經變為兩個了。如果我們此時查看這個 service 的描述時:

? k describe svc k8s-combat-service |grep Endpoints
Endpoints:         192.168.130.133:8081,192.168.130.29:8081

會發現它已經代理了這兩個 Pod 的 IP。

圖片圖片

此時,我進入了 k8s-combat-7867bfb596-67p5m 的容器:

k exec -it k8s-combat-7867bfb596-67p5m bash
curl http://127.0.0.1:8081/service

并執行兩次 /service 接口,發現請求會輪訓進入 k8s-combat-service 的代理的 IP 中。

由于 k8s service 是基于 TCP/UDP 的四層負載,所以在 http1.1  中是可以做到請求級的負載均衡,但如果是類似于 gRPC 這類長鏈接就無法做到請求級的負載均衡。

換句話說 service 只支持連接級別的負載。

如果要支持 gRPC,就得使用 Istio 這類服務網格,相關內容會在后續章節詳解。

總結

總的來說, k8s service 提供了簡易的服務注冊發現和負載均衡功能,當我們只提供 http 服務時是完全夠用的。

責任編輯:武曉燕 來源: crossoverJie
相關推薦

2023-09-06 08:12:04

k8s云原生

2023-09-27 08:09:22

2023-11-01 08:08:22

k8s服務網格

2020-05-12 10:20:39

K8s kubernetes中間件

2023-08-03 08:36:30

Service服務架構

2022-10-10 12:54:00

Flink運維

2023-11-06 01:17:25

主機容器選項

2024-02-01 09:48:17

2022-04-22 13:32:01

K8s容器引擎架構

2024-11-27 16:37:57

2023-02-27 07:40:00

2021-03-11 12:31:33

K8sCoreDNSDNS服務器

2023-11-06 07:16:22

WasmK8s模塊

2022-02-18 10:47:47

微服務k8s項目

2023-11-15 13:44:00

k8s-域名日志

2023-11-27 13:54:00

kubernetes高可用

2023-03-06 07:19:50

2023-09-15 08:00:20

Ingress網關Istio

2024-05-20 15:39:00

Karmada混合云多云

2022-09-07 09:22:36

SpringBootWeb
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产超碰人人爽人人做人人爱 | 国产黄色小视频 | 欧美日韩成人影院 | 日韩成人免费视频 | 天堂成人av | 欧美一级黄色片在线观看 | 精品一区二区免费视频 | 精品久久国产视频 | a级免费视频 | 日本在线一区二区 | 国产一级视频在线观看 | 久久久久久久99 | 成人免费一区二区三区牛牛 | 午夜视频在线观看网址 | 日韩在线不卡视频 | 国产一区二区激情视频 | 欧美日韩一本 | 久久久久国产精品午夜一区 | 精品久久精品 | 亚洲综合大片69999 | 国产欧美视频一区二区 | 91污在线 | 日韩在线国产精品 | 日韩欧美一级精品久久 | 精品久久久久久久久久久 | 中文字幕久久久 | 激情久久网 | 国产在线观看不卡一区二区三区 | 国产成人精品午夜视频免费 | 一区二区视频 | 欧美成人在线网站 | 免费看一级毛片 | www.久草.com | 成人午夜性成交 | 99精品网站| 国产精品久久久久久久久久久免费看 | 91精品国产日韩91久久久久久 | 在线播放中文字幕 | 99精品欧美一区二区三区综合在线 | 欧美日韩在线看 | 亚洲精品乱码久久久久久久久 |