1. 程式人生 > >kubernetes教程(基礎篇)

kubernetes教程(基礎篇)

Kubernetes協調一個高度可用的計算機叢集,這些計算機連線起來作為一個單元工作。

Kubernetes中的抽象允許您將容器化應用程式部署到叢集,而無需將它們專門繫結到單個計算機上。為了利用這種新的部署模型,應用程式需要以一種將它們與單個主機分離的方式打包:它們需要集裝箱化。與過去的部署模型相比,容器化應用程式更加靈活和可用,其中應用程式直接安裝到特定計算機上,因為程式包深度整合到主機中。Kubernetes以更有效的方式自動化跨叢集分發和排程應用程式容器。

1.建立叢集

安裝官網步驟安裝完環境後,就開始建立一個叢集。

minikube start --vm-driver=xhyve

2.部署應用程式(deployments)

一旦運行了Kubernetes叢集,就可以在其上部署容器化應用程式。建立Kubernetes Deployment配置。

獲取節點資訊:

kubectl get nodes

建立第一個應用

kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080

檢視是否成功

kubectl get deployments

檢視單個

kubectl describe deployments/applicationstore

建立應用程式例項後,Kubernetes Deployment Controller會持續監視這些例項。如果託管例項的節點關閉或被刪除,則Deployment控制器會替換它。這提供了一種自我修復機制來解決機器故障或維護問題。

建立部署時,Kubernetes建立了一個Pod來託管您的應用程式例項。Pod是一個Kubernetes抽象,表示一組一個或多個應用程式容器(如Docker或rkt),以及這些容器的一些共享資源。

Pod中的容器共享IP地址和埠空間,始終位於同一位置並共同排程,並在同一節點上的共享上下文中執行。

3.對外提供服務(services)

儘管每個Pod都具有唯一的IP地址,但如果沒有服務,這些IP不會在群集外部公開。服務允許您的應用程式接收流量。通過type

在ServiceSpec中指定a ,可以以不同方式公開服務

  • ClusterIP(預設) - 在群集中的內部IP上公開服務。此型別使服務只能從群集中訪問。
  • NodePort - 使用NAT在叢集中每個選定節點的同一埠上公開服務。使用可從群集外部訪問服務<NodeIP>:<NodePort>。ClusterIP的超集。
  • LoadBalancer - 在當前雲中建立外部負載均衡器(如果支援),併為服務分配固定的外部IP。NodePort的超級使用者。
  • ExternalName - externalName通過返回帶有名稱的CNAME記錄,使用任意名稱(在規範中指定)公開服務。沒有使用代理。此型別需要v1.7或更高版本kube-dns

獲取pods資訊

kubectl get pods

獲取services資訊

kubectl get services

使用expose命令對外暴露deployments

kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080

再次獲取services資訊,你就可以看到你的services了。

4.擴充套件應用(同一個服務新增副本數)

當流量增加時,我們需要擴充套件應用程式以滿足使用者需求。

使用scale命令

kubectl scale deployments/kubernetes-bootcamp --replicas=4

再次檢視deploymnets,你會發現副本數變成了4個。表示成功了。

kubectl get deployments

5.更新應用(還可以做回滾)

使用者希望應用程式始終可用,開發人員應該每天多次部署新版本的應用程式。在Kubernetes中,這是通過滾動更新完成的。滾動更新允許通過使用新的例項逐步更新Pods例項來實現部署的更新,而無需停機。新的Pod將在具有可用資源的節點上進行排程。

滾動更新允許以下操作:

  • 將應用程式從一個環境推廣到另一個環境(通過容器映像更新)
  • 回滾到以前的版本
  • 持續整合和持續交付應用程式,無需停機

通過設定不同的docker image映象版本實現

kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2

線上程式碼有問題,快速回滾:

kubectl rollout status deployments/kubernetes-bootcamp

檢視歷史版本:

kubectl rollout history deployment/nginx-deployment

以上內容僅限於命令列的方式,供你瞭解一些k8s的基礎命令。下一章節,我將介紹使用配置的方式,如何將線上服務部署到k8s中,並對外提供服務,自動更新回滾程式碼等。