自 2014 年第一个版本发布以来,K8s 在开源社区迅速走红,包括 Red Hat、VMware、Canonical 在内的许多有影响力的公司都加入了开发和推广阵营。目前,K8s 已经成为增长最快、市场份额最高的容器编排引擎产品。
但是,知识门槛越高,越需要搭建一个最小可用的 K8s 系统。如果直接学习理论知识和概念,很容易刚开始就放弃。
今天给大家介绍如何通过网页浏览器创建预部署的 K8s 集群,免费快速体验 K8s 的功能和应用场景,无需深入了解即可开始体验。
Kubernetes.io
如果还不知道,K8s 官网为大家准备了现成的最低可用系统。只需访问 https://kubernetes.io/docs/tutorials/kubernetes-basics/,您即可看到以下内容:

本教程将指导您完成创建 K8s 集群、部署应用、访问应用、扩展应用、更新应用等最常见的使用场景,快速建立起从感觉上对它的认识。
创建 K8s 集群
点击教程菜单 1. Create a Cluster->Interactive Tutorial – Creating a Cluster

它将为环境做好准备:

环境准备好后,您将看到 “Kubernetes Bootcamp Terminal” 的字样。

现在检查版本,并启动你的 minikube:

准备就绪后,运行以下命令进行验证:
$ kubectl get svcNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22s$ kubectl get nodeNAME STATUS ROLES AGE VERSIONminikube Ready control-plane,master 27s v1.20.2$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22s $ kubectl get node NAME STATUS ROLES AGE VERSION minikube Ready control-plane,master 27s v1.20.2$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22s $ kubectl get node NAME STATUS ROLES AGE VERSION minikube Ready control-plane,master 27s v1.20.2
现在您只需几秒钟就拥有一个 minikube K8s 集群!您可通过以下方式查看集群信息:
$ kubectl cluster-infoKubernetes control plane is running at https://172.17.0.32:8443KubeDNS is running at https://172.17.0.32:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxyTo further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.$ 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'.$ 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'.
部署应用程序
现在我们有了集群,让我们部署一个应用程序示例:
$ kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1deployment.apps/kubernetes-bootcamp created$ kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 deployment.apps/kubernetes-bootcamp created$ kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 deployment.apps/kubernetes-bootcamp created
这里 deployment 是 K8s 的术语,可以理解为应用(部署)。在上面的示例中,我们使用的是容器镜像(Docker Image) gcr.io/google-samples/kubernetes-bootcamp:v1。
在 K8s 中,还有一个重要的名词 Pod。Pod 是容器的集合,通常将一组密切相关的容器放入一个 Pod 中。同一个 Pod 中的所有容器共享 IP 地址和端口,即它们在同一个网络命名空间中。Pod 是 Kubernetes 调度的最小单位,并且同一个 Pod 中的容器总是一起调度的。
让我们查看一下与我们的部署关联的 pod:
$ kubectl get podsNAME READY STATUS RESTARTS AGEkubernetes-bootcamp-57978f5f5d-rfpww 1/1 Running 0 2m10s$ kubectl get pods NAME READY STATUS RESTARTS AGE kubernetes-bootcamp-57978f5f5d-rfpww 1/1 Running 0 2m10s$ kubectl get pods NAME READY STATUS RESTARTS AGE kubernetes-bootcamp-57978f5f5d-rfpww 1/1 Running 0 2m10s
kubectl proxy
在 K8s 中运行的 Pod 同时也运行在一个私有的、隔离的网络上。默认情况下,它们在同一个 K8s 集群中的其他 pod 和服务中是可见的,但在该网络之外不可见。为了访问我们的应用程序,我们需要使用 kubectl proxy 命令。此命令创建一个代理,它将通信转发到集群范围内的私有网络中。代理可以通过按 control-C 来终止,并且在其运行时不会显示任何输出。
$ kubectl proxyStarting to serve on 127.0.0.1:8001$ kubectl proxy Starting to serve on 127.0.0.1:8001$ kubectl proxy Starting to serve on 127.0.0.1:8001
现在打开一个新终端,您应该可以访问应用程序端点:
$ 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"}$ 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" }$ 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" }
规模应用
默认情况下,应用程序只会运行一个副本,您可以使用 kubectl get deployments 来检查副本的数量。
$ kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1$ kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1$ kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
执行以下命令将副本数增加到 3:
$ kubectl scale deployment/kubernetes-bootcamp --replicas=3deployment.apps/kubernetes-bootcamp scaled$ kubectl get deploymentNAME READY UP-TO-DATE AVAILABLE AGEkubernetes-bootcamp 3/3 3 3 105s$ 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 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 看到当前的 Pod 也增加到了 3 个
$ kubectl get podsNAME READY STATUS RESTARTS AGEkubernetes-bootcamp-fb5c67579-kc6xc 1/1 Running 0 29skubernetes-bootcamp-fb5c67579-p2vnv 1/1 Running 0 29skubernetes-bootcamp-fb5c67579-w7jw9 1/1 Running 0 118s$ 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$ 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
将规模减小也很方便,执行以下命令即可:
$ kubectl scale deployments/kubernetes-bootcamp --replicas=2$ kubectl scale deployments/kubernetes-bootcamp --replicas=2$ kubectl scale deployments/kubernetes-bootcamp --replicas=2
滚动更新
当前应用使用的镜像版本是 v1。运行以下命令将其升级到 v2:
$ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2deployment.apps/kubernetes-bootcamp image updated$ kubectl get podsNAME READY STATUS RESTARTS AGEkubernetes-bootcamp-57978f5f5d-8g944 1/1 Running 0 30skubernetes-bootcamp-57978f5f5d-rccwb 1/1 Terminating 0 13skubernetes-bootcamp-57978f5f5d-t5v84 1/1 Running 0 13skubernetes-bootcamp-769746fd4-6fxgl 1/1 Running 0 2skubernetes-bootcamp-769746fd4-h8784 0/1 ContainerCreating 0 0s$ 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$ 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
可以观察到滚动更新的 kubectl get pods 过程:v1 版 Pod 被逐个删除,同时新的 v2 版 Pod 被启动。更新完成后即可访问新版本的应用程序。
如果要回滚到 v1 版本,可执行 kubectl rollout undo 命令,也很简单:
$ kubectl rollout undo deployments/kubernetes-bootcampdeployment.apps/kubernetes-bootcamp rolled back$ kubectl get podsNAME READY STATUS RESTARTS AGEkubernetes-bootcamp-57978f5f5d-5xpzm 0/1 ContainerCreating 0 1skubernetes-bootcamp-57978f5f5d-5zgvj 1/1 Running 0 3skubernetes-bootcamp-57978f5f5d-qml9r 1/1 Running 0 4skubernetes-bootcamp-769746fd4-6fxgl 1/1 Running 0 2m15skubernetes-bootcamp-769746fd4-9mzbs 1/1 Terminating 0 2m11skubernetes-bootcamp-769746fd4-h8784 1/1 Terminating 0 2m13s$ 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$ 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
至此,我们通过官网的互动教程快速体验了 K8s 的功能和用法。如果您是 K8s 新手,这应该可以让您无需先花费时间和金钱来创建 K8s 集群就能体验到 K8s 的工作原理。
链接:https://blog.devgenius.io/k8s-build-free-k8s-cluster-and-deploy-application-in-10-seconds-d013ae5e5a92
(版权归原作者所有,侵删)
暂无评论内容