继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Kubernetes 笔记 02 demo 初体验

青春有我
关注TA
已关注
手记 1072
粉丝 205
获赞 1007

从前面的文章我们知道,Kubernetes 脱胎于 Google 的 Borg,Borg 在 Kubernetes 诞生之初已经在 Google 内部身经百战 10 余年,且不说它的历史源远流长,就凭它是出自 Google 那帮天才工程师之手,就知道它的学习难度不低。

对于这种有一定学习门槛的技术,最好的入门方式是先玩起来,如果刚开始就沉迷在那些理论中,很容易从入门到放弃。

可喜的是,Google 已经考虑到了这一点,官方文档提供了一个很小的 demo,麻雀虽小,五脏俱全,这个 demo 基本涵盖了 K8S 的基本概念,通过它,可以轻松构建一个 K8S 集群,玩转 K8S,我们现在就去玩一玩。(PS:下面提到的概念,我们后面会详细讨论,不理解可以暂时跳过)

打开:
https://kubernetes.io/docs/tutorials/kubernetes-basics

映入眼帘的是图文并茂的 6 个步骤:

webp

image

  1. 创建一个 K8S 集群

  2. 部署 APP

  3. 探索 APP

  4. 访问 APP

  5. APP 弹性伸缩

  6. 更新 APP

在开始每个步骤之前,先来了解个东西——minikube。顾名思义,这是一个迷你版的 K8S,一个轻量级的 K8S 实现,对于平常的学习体验,使用它可以达到和使用 K8S 一样的效果。它的部署方式足够简单,All-In-One,一个集群只有一个节点,K8S 所有组件都部署在这个节点上。

用户也可以使用 Web UI 和 minikube CLI 的方式来管理 K8S 集群,比如:启动,停止,删除,获取状态等。官方的 demo 就是使用 minikube CLI 来完成的。

话不多说,下面我们就开始体验下 K8S 之旅吧。

第一步:创建一个 K8S 集群

webp

image

在交互界面输入 minikube start 就创建了一个 K8S 集群,这个集群创建在一台 VM 上,K8S 所有组件都跑在这台 VM 上。

接下来我们就可以使用 K8S 命令行工具 kubectl 来操作这个集群了。

kubectl version 查看 K8S 的版本号:

webp

image

看到两个 version,client version 指 kubectl 的 version,server version 就是 K8S 的 version。

kubectl get nodes 获取集群节点数:

webp

image

可以看到这个 demo 只有一个节点,就是前面创建的 VM。statusready,说明该节点准备好部署 APP 了。

第二步:部署一个 APP

执行命令:

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

就完成了一个 APP 的部署。

webp

image

其中,--image 指定 APP 的 Docker 镜像,--port 设置 APP 对外服务的端口,kubectl run 会下载镜像,然后创建 deployment,根据 deployment 创建 APP。deployment 就像是 APP 的说明书,它指导怎么创建 和维护 APP。APP 创建完运行在 Docker 容器中,使用 kubectl get deployments 可以查看 deployment 的信息。

第三步:探索 APP

上一步创建完 deployment,会接着创建 Pod 来运行 APP 容器,K8S 使用 Pod 来管理容器资源,一个 Pod 可以包含一个或多个容器,在这个例子,一个 Pod 就只有一个 APP 容器。使用 kubectl get pods 查看当前 Pod 信息。

webp

image

更详细信息使用 kubectl describe pods 查看。

kubectl 工具对于排错很有帮助,下面几个是较为常用的命令:

  • kubectl get - 列出资源

  • kubectl describe - 显示资源的详细信息

  • kubectl logs - 输出 Pod 中容器的日志

  • kubectl exec - 在 Pod 容器中执行命令

第四步:访问 APP

默认情况下,所有 Pod 都只能在集群内部访问,上面看到每个 Pod 有 IP 和端口,Pod 之间可以直接访问。外部想要访问 Pod, 需要将端口暴露出去,执行如下命令:

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

将容器的端口(8080)映射到节点的端口。

执行 kubectl get services 查看映射到的节点的端口。

webp

image

可以看到容器的 8080 端口已经映射到节点的 31915 端口。外部可以通过 NodeIP:Port 的方式就可以访问到 Pod 内的容器,如下:

webp

image

service 是 K8S 中对 Pod 的进一步抽象,是外部访问 Pod 的入口。如果把 K8S 集群想象成一个组织,那么 service 就是这个组织的接口人,为什么需要 service,这个留作后面的内容再讲,在这里你可以把它暂时理解成端口映射。

第五步:APP 的弹性伸缩

为了满足高可用,Pod 可以自动扩容和缩容。默认情况下,Pod 只会运行一个副本,这是由 deployment 定义的,可以通过 kubectl get deployments 查看副本数,通过 kubectl scale deployments/app --replicas=num 增加或减少副本数。

比如,增加副本数到 4 个:

webp

image

看到 Pod 数也增加到了 4 个。

减少副本数为 2 个:

webp

image

看到两个副本显示 Terminating,表示正在中止,过段时间再看就只有两个了。

对于多副本的情况,访问 APP 会实现负载均衡,如下:

webp

image

看到每次请求访问都落在不同的 Pod 上,这个功能是由 service 来完成的。

第六步:更新 APP

当前 APP 使用的镜像版本是 v1,需要升级到 v2,执行如下命令:

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

webp

image

看到升级过程是先中止之前的 4 个副本,再重开 4 个副本。

如果回退到 v1 版本,只用执行如下命令即可:

kubectl rollout undo deployments/kubernetes-bootcamp

webp

image

至此,我们已经通过官方这个 demo 体验了一把 K8S 的功能和使用方法,下面我会陆陆续续把自己学习 K8S 的笔记整理出来,分享给你,希望对你有帮助。如有可能,请随手转发分享一下,让更多的人也参与进来。



作者:CloudDeveloper
链接:https://www.jianshu.com/p/0a722e80a11e


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP