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
- 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中,並對外提供服務,自動更新回滾程式碼等。