久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何體驗Service所提供的功能

152次閱讀
沒有評論

共計 2658 個字符,預計需要花費 7 分鐘才能閱讀完成。

這篇文章給大家介紹如何體驗 Service 所提供的功能,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

創建

創建 Service 對象時,Kubernetes 會根據 spec.selector 來查找擁有指定標簽的 Pod,查找到 Pod 就維護一組拓撲關系,如果查找不到也不會自動創建 Pod(配置中沒有 Pod 模版),所以本例中用到的 Pod 對象需要單獨創建,在開始之前,假定我們已使用前面介紹 Deployment 時使用的配置創建了一組 label 為 app: nginx 的 Pod 對象,這些 Pod 通過端口 80 對外提供服務。

首先,我們將以下配置保存到名為 service.yaml 的文件中:

apiVersion: v1
kind: Service
metadata:
 name: nginx-service
spec:
 selector:
 app: nginx
 ports:
 - protocol: TCP
 port: 80
 targetPort: 80

然后,創建 Service 對象:

[root@ecs-d8b6 manifests]# kubectl create -f service.yaml 
service/nginx-service created

查看

接著查看剛剛創建的 Service 對象:

[root@ecs-d8b6 manifests]# kubectl get services nginx-service -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
nginx-service ClusterIP 10.0.0.83  none  80/TCP 56s app=nginx

命令行輸出中各字段含義如下:

NAME:Service 對象名稱,對應配置中的 metadata.name;

TYPE:Service 類型,默認為 ClusterIP 類型,更多的類型將在后面的章節中介紹;

CLUSTER-IP:自動分配的 Cluster IP;

EXTERNAL-IP:外部 IP 地址,用于接收集群外部流量的地址,在后面介紹 Service 類型時詳細介紹;

PORT(S):Service 對外暴露的端口列表,本例中只對外暴露一個端口,對應配置中的 spec.ports;

AGE:創建至今經歷的時間;

SELECTOR:標簽選擇器,Service 根據此選擇器查看后端 Pod,對應配置中的 spec.selector。

當前 Kubernetes 支持多種 Service 類型,來應對不同的使用場景:

ClusterIP:Service 通過一個只能在集群內部訪問的 Cluster IP 來暴露服務;

NodePort:Service 通過 Node 上的某個端口來暴露服務;

LoadBalancer:Service 通過具體云廠商提供的負載均衡器來暴露服務;

ExternalName:Service 僅對外暴露一個域名;

查看 Pod 拓撲

盡管 Service 會通過 selector 來查找 Pod,但查找到的 Pod 信息并不直接記錄到 Service 對象中,而是記錄到一個 Endpoints 對象中,進一步說當創建 Service 對象時,Kubernetes 還會創建一個同名的 Endpoints 對象,來記錄后端的 Pod 拓撲。關于 Endpoints,我們會在后續的章節中詳細介紹,此處僅做初步介紹。

查看隨 Service 一并創建的 Endpoints 對象:

[root@ecs-d8b6 manifests]# kubectl get endpoints nginx-service 
NAME ENDPOINTS AGE
nginx-service 172.17.0.4:80,172.17.0.5:80,172.17.0.6:80 20m

可以看到,該 Endpoints 對象記錄了 Service 匹配到的所有 Pod 地址。

訪問 Service

在集群內部,可以直接訪問 Service 的 Cluster IP,流量將會被自動轉發到后端的某個 Pod 中:

[root@ecs-d8b6 manifests]# curl 10.0.0.83
 !DOCTYPE html 
 html 
 head 
 /head 
 body 
 h2 Welcome to nginx! /h2 
 /body 
 /html

更新

當更新 Service 的 spec.selector 時,Kubernetes 會自動按照新的 spec.selector 配置查找 Pod,并更新 Endpoints 對象。

使用 kubectl edit service nginx-service 命令來修改 Service,并指定一個無法匹配到任何 Pod 的 spec.selector,可以看到 Endpoints 對象中的 Pod 拓撲信息也會相應地消失掉,如下所示:

[root@ecs-d8b6 manifests]# kubectl get endpoints nginx-service 
NAME ENDPOINTS AGE
nginx-service  none  31m

刪除

當刪除 Service 對象時,隨 Service 對象創建而自動創建的 Endpoints 對象也會一并刪除,后端的 Pod 不會被刪除,它仍然受相應的 Pod 控制器管理。

[root@ecs-d8b6 manifests]# kubectl delete service nginx-service 
service  nginx-service  deleted
[root@ecs-d8b6 manifests]# kubectl get endpoints nginx-service
Error from server (NotFound): endpoints  nginx-service  not found
[root@ecs-d8b6 manifests]# kubectl get pods 
NAME READY STATUS RESTARTS AGE
nginx-deployment-5f67bd6bb-9nspj 1/1 Running 0 37m
nginx-deployment-5f67bd6bb-hl8xw 1/1 Running 0 37m
nginx-deployment-5f67bd6bb-pkv7h 1/1 Running 0 37m

關于如何體驗 Service 所提供的功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-17發表,共計2658字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 稻城县| 和平县| 建宁县| 衡阳市| 新兴县| 雅安市| 灵台县| 尉犁县| 麻江县| 宁南县| 金沙县| 双峰县| 海宁市| 全椒县| 塔河县| 紫阳县| 禄丰县| 绥芬河市| 琼海市| 赤城县| 宁乡县| 平陆县| 嘉鱼县| 天气| 辽源市| 象州县| 罗田县| 射洪县| 元阳县| 勃利县| 阜宁县| 新和县| 武清区| 房山区| 东丽区| 广东省| 新平| 鹤山市| 利津县| 龙岩市| 华安县|