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

圖解Kubernetes應用部署

開發 前端
在一切皆容器的時代,Kubernetes無疑是一個時代寵兒。越來越多的企業和個人開始使用Kubernetes來虛擬化自己的業務,管理自己的容器。那么如何在Kubernetes部署應用,以及對運行中的集群出現故障如何排查就成了大家日益關注的問題了。

 在一切皆容器的時代,Kubernetes無疑是一個時代寵兒。越來越多的企業和個人開始使用Kubernetes來虛擬化自己的業務,管理自己的容器。那么如何在Kubernetes部署應用,以及對運行中的集群出現故障如何排查就成了大家日益關注的問題了。本文蟲蟲給大家以直觀圖示方式介紹如何在Kubernetes中部署一個應用以及如何排查Kubernetes的故障(下一篇,請等待)。

 

[[284919]]

 

概述

當希望在Kubernetes中部署應用程序時,通常要定義三個組件:

  • 部署(Deployment):這是創建Pod應用程序副本的方法
  • 服務(Service):將流量調度到Pods的內部負載平衡器
  • 入口(Ingress):描述流量如何從群集外部流到服務。

直觀圖示

首先,在Kubernetes中,應用程序應該通過兩層負載均衡對外公開:內部負載均衡器和外部負載均衡器。

 

圖解Kubernetes應用部署

 

其次,內部的負載均衡器又被稱為服務,而外部的負載均衡器稱為入口。

 

圖解Kubernetes應用部署

 

最后:Pods不會直接部署。相反,Deployment會在其上創建Pods和觀察者。

 

圖解Kubernetes應用部署

 

應用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公開的端口

 

圖解Kubernetes應用部署

 

2.創建Pod時,應為Pod中的每個容器定義端口containerPort。

 

圖解Kubernetes應用部署

 

3.創建服務時,可以定義端口和目標端口。但是只能用目標端口連接容器

 

圖解Kubernetes應用部署

 

4.目標端口和容器端口應該匹配。

 

圖解Kubernetes應用部署

 

5. 如果容器公開了端口3000,則targetPort應該與該數字匹配。

 

圖解Kubernetes應用部署

 

如果查看YAML,則標簽和ports/targetPor應該匹配:

 

圖解Kubernetes應用部署

 

常見問題

那么部署頂部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/ 3000:80

其中,service/是服務的名稱,比如示例中為" my-service";3000是希望在計算機上打開的端口;80是"服務"在"端口"字段中公開的端口。

如果可以連接,則說明設置正確。如果不能,則很可能配置了標簽,或者端口不匹配。

服務和入口連接

應用程序發布的最后一個一步是配置Ingress入口。

關鍵點

入口必須知道如何檢索服務,然后檢索Pod并將流量調度到它們。入口按名稱和公開的端口來檢索服務。

在入口和服務中應該匹配兩件事:

  • Ingress的servicePort應該與Service的端口匹配
  • Ingress的serviceName應該與Service的名稱匹配

直觀圖示

首先,已經該服務發布了一個端口。

 

圖解Kubernetes應用部署

 

其次,入口中有一個名為服務端口(servicePort)的字段。

 

圖解Kubernetes應用部署

 

在次,服務端口和入口服務端口應始終匹配。

 

圖解Kubernetes應用部署

 

最后,如果為服務分配了端口80,也應將其servicePort更改為80。

 

圖解Kubernetes應用部署

 

先示例配置要注意的字段:

 

圖解Kubernetes應用部署

 

常見問題

如何測試入口的功能?

可以對kubectl port-forward使用與之前相同的策略,但是應該連接到Ingress控制器,而不是連接到服務。

首先,使用以下命令檢索Ingress控制器的Pod名稱:

kubectl get pods --all-namespaces

 

圖解Kubernetes應用部署

 

對確認的Ingress Pod(可能在不同的命名空間中)執行下面命令:

kubectl describe pod nginx-ingress-controller-6fc5bcc --namespace kube-system|grep Ports

 

圖解Kubernetes應用部署

 

用得到端口連接到Pod:

kubectl port-forward nginx-ingress-controller-6fc5bcc 3000:80 --namespace kube-system

這樣訪問計算機上的端口3000時,請求都會被轉發到Ingress控制器Pod上的端口80。你訪問localhost:3000,就能看到發布的應用程序。

總結

最后,我們總結回顧一下哪些端口和標簽應該匹配點:

服務選擇器應與Pod的標簽匹配;

服務目標端口(targetPort)應該與Pod內的容器的容器端口(containerPort)相匹配;

服務端口可以是任何數字。多個服務可以使用同一端口,因為它們分配了不同的IP地址;

入口的服務端口servicePort應該與服務中的端口相匹配;

服務的名稱應與入口中的字段服務名(serviceName)相匹配。

責任編輯:華軒 來源: 今日頭條
相關推薦

2019-10-24 10:25:32

Kubernetes網絡集群

2015-07-01 13:34:22

Kubernetes應用部署模型

2020-12-11 19:06:03

Kubernetes工具應用程序

2022-03-15 11:01:39

KubernetesLinux平滑升級

2019-12-09 10:40:15

YAMLBashKubernetes

2020-09-29 10:15:54

開發技能Kubernetes

2021-11-02 08:41:44

Kubernetes Nginx部開源

2019-11-07 14:00:36

MySQL數據庫SQL

2020-12-04 18:44:29

KubernetesHTTPS Wordpress

2023-02-06 07:41:27

2022-08-21 16:50:36

Kubeadm?Kubernetes

2020-11-25 15:49:38

Kubernetes程序技巧

2021-11-02 17:27:40

部署高可用Kubernetes

2018-08-16 17:25:20

阿里云ServerlessKubernetes

2020-04-02 09:58:26

Kubernetes容器開發

2021-12-27 10:40:13

Kubernetes網絡圖解Linux

2013-03-12 10:54:49

云安全云計算

2017-01-05 09:18:12

容器Docker

2019-06-03 09:00:25

Kubernetes部署金絲雀版本

2019-08-09 10:58:48

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩视频在线播放 | 日韩欧美成人一区二区三区 | 国产精品久久久久久中文字 | 国产精品a久久久久 | 欧美一区二区三区的 | 国产91一区二区三区 | 91麻豆精品国产91久久久久久久久 | 美女在线观看av | 在线看av的网址 | 狠狠色狠狠色综合系列 | 四虎首页 | 日韩一区二区三区av | 69亚洲精品 | 亚洲香蕉| 成人在线观看中文字幕 | av黄色片 | 国产精品成av人在线视午夜片 | 日本精品一区二区三区四区 | 色婷婷九月| 久久久久国产精品 | 黑人精品 | 国产成人免费视频网站高清观看视频 | 女同久久 | 欧美精品综合 | 国产日韩欧美二区 | 91青青草视频 | 欧美一区二区三区在线视频 | 欧美一级在线 | 亚洲高清三级 | 国产成人精品一区二区三区在线 | 91佛爷在线观看 | 国产特级毛片aaaaaa喷潮 | 国产精品一区在线 | 亚洲精品一区在线观看 | 日本不卡在线视频 | 影音先锋成人资源 | 偷拍自拍网 | 欧美h版 | 亚洲www | 欧美一区二区三区视频 | 一区视频|