在Kubernetes中部署應用(三)

目標

  • 學習瞭解應用的部署
  • 使用 kubectl 在 Kubernetes 上部署第一個應用

Kubernetes 部署

Deployment 負責創建和更新應用程序的實例

一旦運行了 Kubernetes 集羣,就可以在其上部署容器化應用程序。 爲此,您需要創建 Kubernetes Deployment 配置。Deployment 指揮 Kubernetes 如何創建和更新應用程序的實例。創建 Deployment 後,Kubernetes master 將應用程序實例調度到集羣中的各個節點上。

創建應用程序實例後,Kubernetes Deployment 控制器會持續監視這些實例。 如果託管實例的節點關閉或被刪除,則 Deployment 控制器會將該實例替換爲羣集中另一個節點上的實例。 這提供了一種自我修復機制來解決機器故障維護問題。

部署你在 Kubernetes 上的第一個應用程序

在這裏插入圖片描述

您可以使用 Kubernetes 命令行界面創建和管理 Deployment,Kubectl.Kubectl 使用 Kubernetes API 與集羣進行交互。

應用部署實例

  1. 通過運行kubectl version命令,檢查kubectl是否配置爲與集羣對話:
kubectl version

2.要查看羣集中的節點,請運行kubectl get nodes命令:

$ kubectl get nodes
NAME       STATUS   ROLES    AGE    VERSION
minikube   Ready    master   3m8s   v1.15.0

在這裏,我們看到可用的節點。Kubernetes將根據節點可用資源選擇部署應用程序的位置。

  1. 部署我們的應用程序,讓我們使用kubectl create deployment命令在Kubernetes上部署第一個應用。我們需要提供部署名稱和應用程序鏡像位置(包括Docker hub 鏡像url)。
$ kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
deployment.apps/kubernetes-bootcamp created
  1. 剛剛通過創建部署來部署了第一個應用程序。搜索可運行應用程序實例的合適Node(我們只有1個可用Node)
    計劃應用程序在該Node上運行 將羣集配置爲在需要時在新Node上重新安排實例

要列出展開,請使用get deployments命令:

$ kubectl get deployments
NAME                  READY   UP-TO-DATE   AVAILABLE   AGE
kubernetes-bootcamp   1/1     1            1           5m24s

我們看到有一個部署正在運行您的應用程序的單個實例。實例正在node上的Docker容器中運行。

  1. 查看應用程序
    運行在Kubernetes內部的pod運行在一個私有的、隔離的網絡上。默認情況下,它們在同一個kubernetes集羣內的其他pod和服務中可見,但在該網絡之外則不可見。當我們使用kubectl時,我們通過一個API端點與我們的應用程序進行交互。

kubectl命令可以創建一個代理,將通信轉發到集羣範圍的專用網絡。

我們將打開第二個終端窗口來運行代理。

echo -e "\n\n\n\e[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tab\n";
kubectl proxy
$
$ echo -e "\n\n\n\e[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tab\n";



Starting Proxy. After starting it will not output a response. Please click the first Terminal Tab

$ kubectl proxy
Starting to serve on 127.0.0.1:8001
echo -e "\n\n\n\e[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tab\n";
kubectl proxy
echo -e "\n\n\n\e[92mStarting Proxy. After starting it will not output a response. Please click the first Terminal Tab\n";
kubectl proxy

我們現在在主機(在線終端)和Kubernetes集羣之間建立了連接。proxy允許從這些終端直接訪問API。
您可以看到通過proxy端點承載的所有這些api。例如,我們可以使用curl命令直接通過API查詢版本:

$ curl http://localhost:8001/version
{
  "major": "1",
  "minor": "15",
  "gitVersion": "v1.15.0",
  "gitCommit": "e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529",
  "gitTreeState": "clean",
  "buildDate": "2019-06-19T16:32:14Z",
  "goVersion": "go1.12.5",
  "compiler": "gc",
  "platform": "linux/amd64"
}$

如果無法訪問端口8001,請確保上面啓動的kubectl代理正在運行。
API服務器將根據pod名稱自動爲每個pod創建一個端點,該端點也可以通過代理訪問。
首先我們需要獲取Pod name,然後將其存儲在環境變量Pod_name中:

$ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
$ echo Name of the Pod: $POD_NAME
Name of the Pod: kubernetes-bootcamp-75bccb7d87-zfv7q

注意:檢查終端頂部。代理在終端2中運行,最近的命令在終端1中執行。代理仍然在終端2中運行,這允許curl命令使用localhost:8001工作。

參考

kubernetes手冊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章