搭建免費(fèi)的 K8s 集群,10 秒部署應(yīng)用

自 2014 年第一個(gè)版本發(fā)布以來(lái),K8s 在開(kāi)源社區(qū)迅速走紅,包括 Red Hat、VMware、Canonical 在內(nèi)的許多有影響力的公司都加入了開(kāi)發(fā)和推廣陣營(yíng)。目前,K8s 已經(jīng)成為增長(zhǎng)最快、市場(chǎng)份額最高的容器編排引擎產(chǎn)品。
但是,知識(shí)門(mén)檻越高,越需要搭建一個(gè)最小可用的 K8s 系統(tǒng)。如果直接學(xué)習(xí)理論知識(shí)和概念,很容易剛開(kāi)始就放棄。
今天給大家介紹如何通過(guò)網(wǎng)頁(yè)瀏覽器創(chuàng)建預(yù)部署的 K8s 集群,免費(fèi)快速體驗(yàn) K8s 的功能和應(yīng)用場(chǎng)景,無(wú)需深入了解即可開(kāi)始體驗(yàn)。
Kubernetes.io
如果還不知道,K8s 官網(wǎng)為大家準(zhǔn)備了現(xiàn)成的最低可用系統(tǒng)。只需訪問(wèn) https://kubernetes.io/docs/tutorials/kubernetes-basics/,您即可看到以下內(nèi)容:

本教程將指導(dǎo)您完成創(chuàng)建 K8s 集群、部署應(yīng)用、訪問(wèn)應(yīng)用、擴(kuò)展應(yīng)用、更新應(yīng)用等最常見(jiàn)的使用場(chǎng)景,快速建立起從感覺(jué)上對(duì)它的認(rèn)識(shí)。
創(chuàng)建 K8s 集群
點(diǎn)擊教程菜單 1. Create a Cluster->Interactive Tutorial - Creating a Cluster

它將為環(huán)境做好準(zhǔn)備:

環(huán)境準(zhǔn)備好后,您將看到 “Kubernetes Bootcamp Terminal” 的字樣。

現(xiàn)在檢查版本,并啟動(dòng)你的 minikube:

準(zhǔn)備就緒后,運(yùn)行以下命令進(jìn)行驗(yàn)證:
$?kubectl?get?svc?
NAME?TYPE?CLUSTER-IP?EXTERNAL-IP?PORT(S)?AGE?
kubernetes?ClusterIP?10.96.0.1??443/TCP?22s?
$?kubectl?get?node?
NAME?STATUS?ROLES?AGE?VERSION?
minikube?Ready?control-plane,master?27s?v1.20.2
現(xiàn)在您只需幾秒鐘就擁有一個(gè) minikube K8s 集群!您可通過(guò)以下方式查看集群信息:
$?kubectl?cluster-info
Kubernetes?control?plane?is?running?at?https://172.17.0.32:8443
KubeDNS?is?running?at?https://172.17.0.32:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To?further?debug?and?diagnose?cluster?problems,?use?'kubectl?cluster-info?dump'.
部署應(yīng)用程序
現(xiàn)在我們有了集群,讓我們部署一個(gè)應(yīng)用程序示例:
$?kubectl?create?deployment?kubernetes-bootcamp?--image=gcr.io/google-samples/kubernetes-bootcamp:v1
deployment.apps/kubernetes-bootcamp?created
這里 deployment 是 K8s 的術(shù)語(yǔ),可以理解為應(yīng)用(部署)。在上面的示例中,我們使用的是容器鏡像(Docker Image) gcr.io/google-samples/kubernetes-bootcamp:v1。
在 K8s 中,還有一個(gè)重要的名詞 Pod。Pod 是容器的集合,通常將一組密切相關(guān)的容器放入一個(gè) Pod 中。同一個(gè) Pod 中的所有容器共享 IP 地址和端口,即它們?cè)谕粋€(gè)網(wǎng)絡(luò)命名空間中。Pod 是 Kubernetes 調(diào)度的最小單位,并且同一個(gè) Pod 中的容器總是一起調(diào)度的。
讓我們查看一下與我們的部署關(guān)聯(lián)的 pod:
$?kubectl?get?pods?
NAME?READY?STATUS?RESTARTS?AGE?
kubernetes-bootcamp-57978f5f5d-rfpww?1/1?Running?0?2m10s
kubectl proxy
在 K8s 中運(yùn)行的 Pod 同時(shí)也運(yùn)行在一個(gè)私有的、隔離的網(wǎng)絡(luò)上。默認(rèn)情況下,它們?cè)谕粋€(gè) K8s 集群中的其他 pod 和服務(wù)中是可見(jiàn)的,但在該網(wǎng)絡(luò)之外不可見(jiàn)。為了訪問(wèn)我們的應(yīng)用程序,我們需要使用 kubectl proxy 命令。此命令創(chuàng)建一個(gè)代理,它將通信轉(zhuǎn)發(fā)到集群范圍內(nèi)的私有網(wǎng)絡(luò)中。代理可以通過(guò)按 control-C 來(lái)終止,并且在其運(yùn)行時(shí)不會(huì)顯示任何輸出。
$?kubectl?proxy
Starting?to?serve?on?127.0.0.1:8001
現(xiàn)在打開(kāi)一個(gè)新終端,您應(yīng)該可以訪問(wèn)應(yīng)用程序端點(diǎn):
$?curl?http://localhost:8001/version
{
??"major":?"1",
??"minor":?"20",
??"gitVersion":?"v1.20.2",
??"gitCommit":?"faecb196815e248d3ecfb03c680a4507229c2a56",
??"gitTreeState":?"clean",
??"buildDate":?"2021-01-13T13:20:00Z",
??"goVersion":?"go1.15.5",
??"compiler":?"gc",
??"platform":?"linux/amd64"
}
規(guī)模應(yīng)用
默認(rèn)情況下,應(yīng)用程序只會(huì)運(yùn)行一個(gè)副本,您可以使用 kubectl get deployments 來(lái)檢查副本的數(shù)量。
$?kubectl?create?deployment?kubernetes-bootcamp?--image=gcr.io/google-samples/kubernetes-bootcamp:v1
執(zhí)行以下命令將副本數(shù)增加到 3:
$?kubectl?scale?deployment/kubernetes-bootcamp?--replicas=3
deployment.apps/kubernetes-bootcamp?scaled
$?kubectl?get?deployment
NAME??????????????????READY???UP-TO-DATE???AVAILABLE???AGE
kubernetes-bootcamp???3/3?????3????????????3???????????105s
您還可以使用 kubectl get pods 看到當(dāng)前的 Pod 也增加到了 3 個(gè)
$?kubectl?get?pods
NAME??????????????????????????????????READY???STATUS????RESTARTS???AGE
kubernetes-bootcamp-fb5c67579-kc6xc???1/1?????Running???0??????????29s
kubernetes-bootcamp-fb5c67579-p2vnv???1/1?????Running???0??????????29s
kubernetes-bootcamp-fb5c67579-w7jw9???1/1?????Running???0??????????118s
將規(guī)模減小也很方便,執(zhí)行以下命令即可:
$?kubectl?scale?deployments/kubernetes-bootcamp?--replicas=2
滾動(dòng)更新
當(dāng)前應(yīng)用使用的鏡像版本是 v1。運(yùn)行以下命令將其升級(jí)到 v2:
$?kubectl?set?image?deployments/kubernetes-bootcamp?kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
deployment.apps/kubernetes-bootcamp?image?updated
$?kubectl?get?pods
NAME???????????????????????????????????READY???STATUS??????????????RESTARTS???AGE
kubernetes-bootcamp-57978f5f5d-8g944???1/1?????Running?????????????0??????????30s
kubernetes-bootcamp-57978f5f5d-rccwb???1/1?????Terminating?????????0??????????13s
kubernetes-bootcamp-57978f5f5d-t5v84???1/1?????Running?????????????0??????????13s
kubernetes-bootcamp-769746fd4-6fxgl????1/1?????Running?????????????0??????????2s
kubernetes-bootcamp-769746fd4-h8784????0/1?????ContainerCreating???0??????????0s
可以觀察到滾動(dòng)更新的 kubectl get pods 過(guò)程:v1 版 Pod 被逐個(gè)刪除,同時(shí)新的 v2 版 Pod 被啟動(dòng)。更新完成后即可訪問(wèn)新版本的應(yīng)用程序。
如果要回滾到 v1 版本,可執(zhí)行 kubectl rollout undo 命令,也很簡(jiǎn)單:
$?kubectl?rollout?undo?deployments/kubernetes-bootcamp
deployment.apps/kubernetes-bootcamp?rolled?back
$?kubectl?get?pods
NAME???????????????????????????????????READY???STATUS??????????????RESTARTS???AGE
kubernetes-bootcamp-57978f5f5d-5xpzm???0/1?????ContainerCreating???0??????????1s
kubernetes-bootcamp-57978f5f5d-5zgvj???1/1?????Running?????????????0??????????3s
kubernetes-bootcamp-57978f5f5d-qml9r???1/1?????Running?????????????0??????????4s
kubernetes-bootcamp-769746fd4-6fxgl????1/1?????Running?????????????0??????????2m15s
kubernetes-bootcamp-769746fd4-9mzbs????1/1?????Terminating?????????0??????????2m11s
kubernetes-bootcamp-769746fd4-h8784????1/1?????Terminating?????????0??????????2m13s
至此,我們通過(guò)官網(wǎng)的互動(dòng)教程快速體驗(yàn)了 K8s 的功能和用法。如果您是 K8s 新手,這應(yīng)該可以讓您無(wú)需先花費(fèi)時(shí)間和金錢(qián)來(lái)創(chuàng)建 K8s 集群就能體驗(yàn)到 K8s 的工作原理。
鏈接:https://blog.devgenius.io/k8s-build-free-k8s-cluster-and-deploy-application-in-10-seconds-d013ae5e5a92
(版權(quán)歸原作者所有,侵刪)
