Kubernetes 笔记 02 demo 初体验

原文: Kubernetes 笔记 02 demo 初体验

本文首发于个人公众号 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 个步骤: 工具

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 来完成的。google

话很少说,下面咱们就开始体验下 K8S 之旅吧。云计算

第一步:建立一个 K8S 集群

image

在交互界面输入 minikube start 就建立了一个 K8S 集群,这个集群建立在一台 VM 上,K8S 全部组件都跑在这台 VM 上。命令行

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

kubectl version 查看 K8S 的版本号:

image

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

kubectl get nodes 获取集群节点数:

image

能够看到这个 demo 只有一个节点,就是前面建立的 VM。status 是 ready,说明该节点准备好部署 APP 了。

第二步:部署一个 APP

执行命令: 

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

就完成了一个 APP 的部署。

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 信息。

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 查看映射到的节点的端口。

image

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

image

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

第五步:APP 的弹性伸缩

为了知足高可用,Pod 能够自动扩容和缩容。默认状况下,Pod 只会运行一个副本,这是由 deployment 定义的,能够经过 kubectl get deployments 查看副本数,经过 kubectl scale deployments/app --replicas=num 增长或减小副本数。 

好比,增长副本数到 4 个: 

image

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

减小副本数为 2 个: 

image

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

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

image

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

第六步:更新 APP

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

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

image

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

若是回退到 v1 版本,只用执行以下命令便可:

kubectl rollout undo deployments/kubernetes-bootcamp

image

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

最后,仍是继续送书,容器网络专家倪朋飞写的《K8S 指南》电子书,若有须要后台回复“K8S”(以前回复过就不用回复了)。如需加群学习回复“加群”。

更多干货欢迎你们关注公众号 CloudDeveloper(一个集云计算大小事的公众号) 查看:

image.png

相关文章
相关标签/搜索