本文首发于个人公众号 CloudDeveloper,欢迎你们关注,和我一块儿来学习云计算。html
从前面的文章咱们知道,Kubernetes 脱胎于 Google 的 Borg,Borg 在 Kubernetes 诞生之初已经在 Google 内部身经百战 10 余年,且不说它的历史源远流长,就凭它是出自 Google 那帮天才工程师之手,就知道它的学习难度不低。node
对于这种有必定学习门槛的技术,最好的入门方式是先玩起来,若是刚开始就沉迷在那些理论中,很容易从入门到放弃。网络
可喜的是,Google 已经考虑到了这一点,官方文档提供了一个很小的 demo,麻雀虽小,五脏俱全,这个 demo 基本涵盖了 K8S 的基本概念,经过它,能够轻松构建一个 K8S 集群,玩转 K8S,咱们如今就去玩一玩。(PS:下面提到的概念,咱们后面会详细讨论,不理解能够暂时跳过)app
打开:
https://kubernetes.io/docs/tutorials/kubernetes-basics 负载均衡
映入眼帘的是图文并茂的 6 个步骤: 工具
在开始每一个步骤以前,先来了解个东西——minikube
。顾名思义,这是一个迷你版的 K8S,一个轻量级的 K8S 实现,对于日常的学习体验,使用它能够达到和使用 K8S 同样的效果。它的部署方式足够简单,All-In-One,一个集群只有一个节点,K8S 全部组件都部署在这个节点上。学习
用户也可使用 Web UI 和 minikube CLI 的方式来管理 K8S 集群,好比:启动,中止,删除,获取状态等。官方的 demo 就是使用 minikube CLI 来完成的。google
话很少说,下面咱们就开始体验下 K8S 之旅吧。云计算
在交互界面输入 minikube start
就建立了一个 K8S 集群,这个集群建立在一台 VM 上,K8S 全部组件都跑在这台 VM 上。命令行
接下来咱们就可使用 K8S 命令行工具 kubectl
来操做这个集群了。
kubectl version
查看 K8S 的版本号:
看到两个 version,client version
指 kubectl 的 version,server version
就是 K8S 的 version。
kubectl get nodes
获取集群节点数:
能够看到这个 demo 只有一个节点,就是前面建立的 VM。status
是 ready
,说明该节点准备好部署 APP 了。
执行命令:
kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080
就完成了一个 APP 的部署。
其中,--image
指定 APP 的 Docker 镜像,--port
设置 APP 对外服务的端口,kubectl run
会下载镜像,而后建立 deployment
,根据 deployment 建立 APP。deployment 就像是 APP 的说明书,它指导怎么建立 和维护 APP。APP 建立完运行在 Docker 容器中,使用 kubectl get deployments
能够查看 deployment 的信息。
上一步建立完 deployment,会接着建立 Pod 来运行 APP 容器,K8S 使用 Pod 来管理容器资源,一个 Pod 能够包含一个或多个容器,在这个例子,一个 Pod 就只有一个 APP 容器。使用 kubectl get pods
查看当前 Pod 信息。
更详细信息使用 kubectl describe pods
查看。
kubectl 工具对于排错颇有帮助,下面几个是较为经常使用的命令:
默认状况下,全部 Pod 都只能在集群内部访问,上面看到每一个 Pod 有 IP 和端口,Pod 之间能够直接访问。外部想要访问 Pod, 须要将端口暴露出去,执行以下命令:
kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
将容器的端口(8080)映射到节点的端口。
执行 kubectl get services
查看映射到的节点的端口。
能够看到容器的 8080 端口已经映射到节点的 31915 端口。外部能够经过 NodeIP:Port
的方式就能够访问到 Pod 内的容器,以下:
service
是 K8S 中对 Pod 的进一步抽象,是外部访问 Pod 的入口。若是把 K8S 集群想象成一个组织,那么 service 就是这个组织的接口人,为何须要 service,这个留做后面的内容再讲,在这里你能够把它暂时理解成端口映射。
为了知足高可用,Pod 能够自动扩容和缩容。默认状况下,Pod 只会运行一个副本,这是由 deployment 定义的,能够经过 kubectl get deployments
查看副本数,经过 kubectl scale deployments/app --replicas=num
增长或减小副本数。
好比,增长副本数到 4 个:
看到 Pod 数也增长到了 4 个。
减小副本数为 2 个:
看到两个副本显示 Terminating,表示正在停止,过段时间再看就只有两个了。
对于多副本的状况,访问 APP 会实现负载均衡,以下:
看到每次请求访问都落在不一样的 Pod 上,这个功能是由 service 来完成的。
当前 APP 使用的镜像版本是 v1,须要升级到 v2,执行以下命令:
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
看到升级过程是先停止以前的 4 个副本,再重开 4 个副本。
若是回退到 v1 版本,只用执行以下命令便可:
kubectl rollout undo deployments/kubernetes-bootcamp
至此,咱们已经经过官方这个 demo 体验了一把 K8S 的功能和使用方法,下面我会陆陆续续把本身学习 K8S 的笔记整理出来,分享给你,但愿对你有帮助。若有可能,请随手转发分享一下,让更多的人也参与进来。
最后,仍是继续送书,容器网络专家倪朋飞写的《K8S 指南》电子书,若有须要后台回复“K8S”(以前回复过就不用回复了)。如需加群学习回复“加群”。
更多干货欢迎你们关注公众号 CloudDeveloper(一个集云计算大小事的公众号) 查看: