Kubernetes 笔记 02 demo 初体验

本文首发于我的公众号 CloudDeveloper,欢迎大家关注,和我一起来学习云计算。

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

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

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

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

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

  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 集群

在交互界面输入 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 了。

第二步:部署一个 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 的信息。

第三步:探索 APP

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

更详细信息使用 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 查看映射到的节点的端口。

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

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

第五步:APP 的弹性伸缩

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

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

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

减少副本数为 2 个: 

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

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

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

第六步:更新 APP

当前 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 的笔记整理出来,分享给你,希望对你有帮助。如有可能,请随手转发分享一下,让更多的人也参与进来。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据和云

安全警报:Oracle 2018一月号安全补丁修复由来已久安全漏洞

在美西时间2018一月16日,北京时间今天凌晨,Oracle公司发布了 2018 年第一个安全补丁,这被称为 - Oracle Critical Patch U...

3115
来自专栏R语言___生物信息

Anaconda安装使用

Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本p...

5527
来自专栏蓝天

解决C++代码单元测试中的难题-不可验证和IO调用

1.在编译单元测试代码时,加上UNIT_TEST宏(名字可以为其它你喜欢的),并将private定义成public,即:

541
来自专栏大魏分享(微信公众号:david-share)

Openshift3.9高可用部署考虑点1

一个典型的OCP高可用架构是:master至少应为三个,且为奇数个(上面有etcd);

2644
来自专栏不二小段

Python性能提升20倍居然不是标题党?

前两天有小伙伴发了篇文章给我,让我验证一下靠不靠谱,标题写着《如何在 i5 上实现 20 倍的 Python 运行速度?》,我看了不以为然,八成又是个标题党。看...

3218
来自专栏美团技术团队

【美团技术博客】Docker系列之二:基于容器的自动构建

自动构建系统是从美团的自动部署系统发展出来的一个新功能。每当开发人员提交代码到仓库后,系统会自动根据开发人员定制的构建配置,启动新的Docker容器,在其中对源...

39810
来自专栏程序人生 阅读快乐

自建DNS服务器

不晓得为撒,用网上的一些公共DNS服务的时候,总是莫名其妙的有些网站无法解析,有时候114能解析,阿里DNS不行或者腾讯DNS不行,导致总是来回切换DNS,很是...

8222
来自专栏Debian社区

Ubuntu Server自18.04 LTS开始不再提供32位镜像

2016年6月份Canonical公司在社区公布的草案,明确自Ubuntu 16.10开始逐步放弃32位支持,并在Ubuntu 18.10中彻底移除对32位架构...

1264
来自专栏云知识学习

IIS Windows 集成身份验证弹出输入用户名密码的解决办法

如果您正在设置您的IIS身份验证方式为“ Windows 集成身份验证 ”,并且您在使用IE访问您的站点时发现IE仍然要求您输入您的用户名和密码,而且您又不知道...

37913
来自专栏IT笔记

大型架构之科普工具篇

当系统中出现“生产“和“消费“的速度或稳定性等因素不一致的时候,就需要消息队列,作为抽象层,弥合双方的差异。“ 消息 ”是在两台计算机间传送的数据单位。消息可以...

5386

扫码关注云+社区

领取腾讯云代金券