1. 程式人生 > >Kubernetes教程 - Kubernetes綜合指南(Use Guide)

Kubernetes教程 - Kubernetes綜合指南(Use Guide)

英文原作者:Sahiti Kappagantula  翻譯&轉載:https://www.edureka.co/blog/kubernetes-tutorial/

 

Kubernetes教程 - Kubernetes綜合指南(Use Guide)

 

Kubernetes是一個平臺,可以消除部署容器化應用程式所涉及的手動過程。在這篇關於Kubernetes Tutorial的部落格中,您將瞭解與此多容器管理解決方案相關的所有概念。

本教程將介紹以下主題:

現在,在本部落格向前推進之前,讓我快速向您簡要介紹一下集裝箱化。

因此,在容器出現之前,開發人員和測試人員之間總是有一些關係。這通常是因為在開發方面工作的,在測試方面不起作用。它們都存在於不同的環境中。現在,為了避免這種情況,引入了容器,以便開發人員和測試人員都在同一頁面上。

同時處理大量容器也是一個問題。有時在執行容器時,在產品方面,幾乎沒有提出問題,這些問題在開發階段並不存在。這種場景引入了Container Orchestration System。 在深入研究編排系統之前,讓我快速列出沒有這個系統所面臨的挑戰。

 

正如您在上圖中看到的,當多個服務在容器內執行時,您可能希望擴充套件這些容器。在大型工業中,這很難做到。那是因為它會增加維護服務的成本,以及並排執行它們的複雜性。

現在,為了避免手動設定服務並克服挑戰,需要一些重要的東西。這就是Container Orchestration Engine的用武之地

這個引擎允許我們組織多個容器,以便啟動所有底層機器,容器健康並在叢集環境中分佈。在今天的世界中,主要有兩個這樣的引擎:KubernetesDocker Swarm

 

Kubernetes教程:  Kubernetes vs Docker Swarm

Kubernetes  和  Docker Swarm  是當今市場上領先的容器編排工具。所以在使用它們之前,你應該知道它們究竟是什麼以及它們是如何工作的。

此外,在部落格中,我將深入探討Kubernetes,但要了解Docker,您可以點選這裡

 

正如您可以參考上面的圖片,Kubernetes與Docker Swarm相比,擁有一個非常活躍的社群,並在許多組織中實現自動擴充套件。同樣,與Kubernetes相比,Docker Swarm有一個易於啟動的叢集,但它僅限於Docker API的功能。

好吧,夥計們,這些不是這些頂級工具之間的唯一區別。如果您想知道這兩個容器編排工具之間的詳細差異,可以單擊此處。

 

如果我可以在兩者之間選擇我的選擇,那麼它必須是Kubernetes,因為容器需要被管理並連線到外部世界以執行諸如排程,負載平衡和分發之類的任務。

但是,如果你從邏輯上思考,Docker Swarm會提供更好的選擇,因為它執行在Docker之上嗎?如果我是你,我肯定會對使用哪種工具感到困惑。但是,嘿,Kubernetes是市場上無可爭議的領導者,並且還擁有更好的功能性Docker容器。

現在,您已經瞭解了對Kubernetes的需求,這是一個美好的時光,我告訴您什麼是Kubernetes?

 

Kubernetes教程:  什麼是Kubernetes?

Kubernetes是一個開源的系統,負責處理將容器排程到計算群集的工作,並管理工作負載以確保它們按使用者的意圖執行。作為Google的佼佼者,它提供了出色的社群,並與所有云提供商合作,成為一個 多容器管理解決方案。

 

Kubernetes教程:  Kubernetes功能

Kubernetes的功能如下:

 

  • 自動排程: Kubernetes提供高階排程程式,以根據資源需求和其他約束在叢集節點上啟動容器,同時不犧牲可用性。
  • 自我修復功能: Kubernetes允許在節點死亡時替換和重新安排容器。它還會殺死不響應使用者定義的執行狀況檢查的容器,並且在它們準備好服務之前不會將它們通告給客戶端。 
  • 自動部署和回滾: Kubernetes在監控應用程式執行狀況時推出 對應用程式或其配置的更改,以確保它不會同時終止所有例項。如果出現問題,使用Kubernetes可以回滾更改。
  • 水平擴充套件和負載平衡: Kubernetes可以根據需求通過簡單的命令,使用UI或根據CPU使用情況自動擴充套件和縮小應用程式。

Kubernetes教程:  Kubernetes架構

Kubernetes Architecture具有以下主要元件:

  • 主節點
  • 工/從節點

我將逐一討論它們中的每一個。所以,首先讓我們從理解主節點開始

 

主節點

主節點負責管理Kubernetes叢集。它主要是所有管理任務的切入點。群集中可以有多個主節點來檢查容錯。

 

如上圖所示,主節點具有各種元件,如API伺服器,控制器管理器,排程程式和ETCD。

  • API伺服器:  API伺服器是用於控制叢集的所有REST命令的入口點。
  • 控制器管理器:是一個守護程式,用於管理Kubernetes叢集,並管理不同的非終止控制迴圈。
  • 排程程式: 排程程式將任務排程到從屬節點。它儲存每個從節點的資源使用資訊。
  • ETCD:  ETCD是一個簡單,分散式,一致的鍵值儲存。它主要用於共享配置和服務發現。

 

工/從節點

工作節點包含管理容器之間的網路,與主節點通訊以及將資源分配給預定容器的所有必要服務。

 

如上圖所示,worker節點有各種元件,如Docker Container,Kubelet,Kube-proxy和Pods。

  • Docker容器: Docker在每個工作節點上執行,並執行配置的pod
  • Kubelet:  Kubelet從API伺服器獲取Pod的配置,並確保所描述的容器已啟動並正在執行。
  • Kube-proxy: Kube-proxy充當單個工作節點上的服務的網路代理和負載平衡器
  • 窗格:  窗格是一個或多個邏輯上在節點上一起執行的容器。 

如果您想要詳細解釋Kubernetes Architecture的所有元件,那麼您可以參考我們的 關於Kubernetes Architecture的部落格

 

Yahoo JAPAN  是一家總部位於加利福尼亞州桑尼維爾的網路服務提供商。由於該公司旨在虛擬化硬體,公司 於2012年開始使用  OpenStack 。他們的內部環境變化非常快。然而,由於雲和容器技術的進步,該公司希望能力在各種平臺上推出服務。

問題:如何從一個應用程式程式碼為所有必需的平臺建立映像,並將這些映像部署到每個平臺上?

為了便於您更好地理解,請參閱下圖。在程式碼登錄檔中更改程式碼後,裸金屬映像,Docker容器和VM映像由持續整合工具建立,推送到映像登錄檔,然後部署到每個基礎架構平臺。 

 

 

現在,讓我們關注容器工作流,以瞭解他們如何使用Kubernetes作為部署平臺。請參閱下圖,瞭解平臺架構。

使用OpenStack例項,其上有Docker,Kubernetes,Calico等,以執行各種操作,如Container Networking,Container Registry等。

如果您有多個叢集,那麼管理它們會變得很難嗎?

因此,他們只想建立一個簡單的基礎OpenStack叢集,以提供Kubernetes所需的基本功能,並使OpenStack環境更易於管理。

通過影象建立工作流程和Kubernetes的組合,他們構建了以下工具鏈,使得從程式碼推送到部署變得簡單。

 

這種工具鏈確保考慮了生產部署的所有因素,如多租戶,身份驗證,儲存,網路,服務發現。

這就是人們,雅虎! 在GoogleSolinea的幫助下,JAPAN為執行在OpenStack上的Kubernetes構建了一個自動化工具鏈,用於“一鍵式”程式碼部署。

Kubernetes教程:動手實踐

在本動手中,我將向您展示如何建立部署和服務。我正在使用Amazon EC2例項,使用Kubernetes。好吧,亞馬遜為Kubernetes(Amazon EKS)提供了Amazon Elastic Container Service,這使他們能夠非常快速,輕鬆地在雲中建立Kubernetes叢集。如果您想了解更多相關資訊,可以參考此處的部落格 

步驟1:首先建立一個資料夾,您將在其中建立部署和服務。之後,使用編輯器開啟部署檔案

1

2

3

mkdir handsOn

cd handsOn

vi Deploy.yaml

步驟2:開啟部署檔案後,請提及要部署的應用程式的所有規範。在這裡,我試圖部署一個httpd應用程式。 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

apiVersion: apps/v1  #Defines the API Version

kind: Deployment     #Kinds parameter defines which kind of file is it, over here it is Deployment

metadata:

  name: dep1        #Stores the name of the deployment

spec:               # Under Specifications, you mention all the specifications for the deployment

  replicas: 3       # Number of replicas would be 3

  selector:

   matchLabels:

     app: httpd     #Label name which would be searched is httpd

  template:

    metadata:

    labels:

      app: httpd   #Template name would be httpd

  spec:            # Under Specifications, you mention all the specifications for the containers

   containers:

   - name: httpd   #Name of the containers would be httpd

     image: httpd:latest  #The image which has to be downloaded is httpd:latest

     ports:

     - containerPort: 80 #The application would be exposed on port 80

步驟3:編寫部署檔案後,使用以下命令應用部署。

1

kubectl apply -f Deploy.yaml

  • $ kubectl apply -f Deploy.yaml
  • deployment.apps/dep1  configured

演示快照 -  Kubernetes教程 -  Edureka

這裡-f是用於標記名稱牛逼他的檔名。

第4步:現在,應用部署後,獲取正在執行的pod列表。

1

kubectl get pods -o wide

  • $ kubectl get pods -o wide
  • NAMR                          READY          STATUS           RESTARTS          AGR         IP                          NODE             NOMTNATED MODE
  • dep1-2939-6hzdb          1/1                 running             0                          39m          10.244.1.23           knode                <none>

演示快照 -  Kubernetes教程 -  Edureka

這裡,-o wide用於瞭解部署執行的節點。

步驟5:建立部署後,現在必須建立服務。為此,再次使用編輯器並開啟一個空白服務。yaml檔案

1

vi service.yaml

演示快照 -  Kubernetes教程 -  Edureka

步驟6:開啟服務檔案後,請提及該服務的所有規範。 

1

2

3

4

5

6

7

8

9

10

11

12

apiVersion: v1  #Defines the API Version

kind: Service   #Kinds parameter defines which kind of file is it, over here it is Service

metadata:

  name: netsvc   #Stores the name of the service

spec:            # Under Specifications, you mention all the specifications for the service

  type: NodePort

  selector:

    app: httpd

ports:

-protocol: TCP

 port: 80

 targetPort: 8084    #Target Port number is 8084

步驟7:  編寫服務檔案後,使用以下命令應用服務檔案。

1

kubectl apply -f service.yaml

  • $ kubectl apply -f service.yaml
  • service/netsvc created

步驟8:現在,一旦您的服務應用於檢查服務是否正在執行,請使用以下命令。

1

kubectl get svc

  • $ kubectl get svc
  • NAME               TYPE        CLUSTER-IP        EXTERNAL-IP      PORT(s)          AGE
  • kubernetes        ClusterIP    10.96.0.1                <none>                443/tcp            96m
  • netave               NodePort    10.97.46.48            <none>               80:32657/tcp    16m

演示快照 -  Kubernetes教程 -  Edureka

步驟9:現在,要檢視服務規範,並檢查繫結到哪個端點,請使用以下命令。

1

kubectl describe svc <name of the service>

步驟10:既然我們正在使用amazon ec2例項,要獲取網頁並檢查輸出,請使用以下命令。

1

curl ip-address

$ curl 10.97.46.48:8084
<html><body><h1>It works!</h1></body></html>