总结:以下状态字段全部。 这是节点上的一个重要模块,负责维护和管理节点上运行的所有容器,并确保运行状态符合用户的期望。
在上一篇文章“在 Kubernetes 上运行 SAP UI5 应用程序(第 1 部分)”中,我们向您展示了如何在 Docker 上运行简单的 SAP UI5 应用程序并创建 Docker 映像成功整合。 包含此 UI5 应用程序的文件将上传到 Docker Hub。
本文继续本主题,向您展示如何在 Kubernetes 上运行此 Docker 映像。
文章目录
Kubernetes 中的两个关键概念:Pod 和部署
经验借助Kubernetes来保证部分应用的高可用和可扩展性
有使用Kubernetes滚动升级(rolling update)功能的经验
有什么好处你正在运行一个应用程序吗?从 Jerry 在 10 多天的有限时间里了解到的,Kubernetes 确保应用程序开发人员开发的应用程序具有高可用性、可扩展性和容错性。以确保这一点。 > 部署和运行方法,以便应用程序开发人员不必花费大量时间和精力来学习 Kubernetes 的底层细节。
也就是说,建立 Kubernetes 环境和配置系统可以完全交给 Kubernetes 管理员,但作为 Kubernetes 消费者,应用程序开发人员只需要学习一些简单的 kubectl 命令即可。 。 您可以轻松地将应用程序部署在 Kubernetes 上,并享受 Kubernetes 作为平台为您的应用程序带来的非功能性改进,几乎无需额外成本。
我将使用上一篇文章中使用的UI5应用程序继续进行说明。
Jerry 很穷,无力购买额外的服务器来构建自己的 Kubernetes 集群环境。 幸运的是,Kubernetes 并没有抛弃我们这些可怜的程序员。 您还可以选择 Kubernetes 集群即服务解决方案。
在我的另一篇文章《巨人肩膀上的牛顿:Kubernetes 和 SAP Kyma》中,我提到了 Gardener,一个用于创建 Kubernetes 集群的开源解决方案:
https:// github.com/gardener
在 SAP 的 Gardener 上创建了一个基于 Google Cloud Platform 的 Kubernetes 集群,名为 jerry1204。
您可以: 可以看到这个创建的集群的Kubernetes版本还是比较新的,1.12.3仅比12月3日刚刚发布的1.13版本低一些。
访问上面的选项卡以使用此 Kubernetes 集群。 当然,像 SAP 上海学院教授 Kubernetes 培训课程的老司机更喜欢使用命令行。
由于是免费集群,因此只会分配一个工作节点:
控制台和命令行 kubectl Work 中看到的 Kubernetes 集群节点信息获取节点 -o Wide 显示相同的内容:
Kubernetes 中的两个重要概念:Pod 和 Deployments
接下来使用命令行使用上一篇文章中上传到 Docker Hub 的镜像 i042416/ui5-nginx。
kubectl run jerry-ui5 --image=i042416/ui5-nginx
这个命令行会在幕后做很多事情。完成了。
首先,保证 Kubernetes 上运行的应用的高可用性、可扩展性和容错性的 Kubernetes 机制是什么?
答案是豆荚。 点击上面的 Kubernetes 架构图可以放大。 可以看到该节点包含多个Pod,每个Pod又包含多个容器。 顾名思义,Pod 是指运行应用程序的载体,是 Kubernetes 的基本运行单元。 Kubernetes 系统整体设计负责管理 Pod,包括如何部署和运行 Pod,如何保证运行的 Pod 总数等于一个常量,以及 Pod 内应用程序提供的服务如何暴露给外部。它围绕中心进行。
我回到之前的命令行,尝试运行另一个命令,kubectl get pod,但果然,pod 创建并诞生了。 做过。 40 秒过去了(年龄 = 40 岁)。
使用describe命令查看该pod的详细信息。
kubectl描述pod jerry-ui5-6ffd46bb95-]6bgpg
下图中容器ID后面的docker:/ / 表示这是一个 Docker 容器。 当然,这并不意味着Kubernetes只支持Docker这种容器技术。 例如,Kubernetes 在 CoreOS 上也支持 Rocket。
描述性命名输出的事件区域显示了 Pod 从诞生到服务开始的生命周期。跳转到生命周期状态:
Scheduled->Pulling->Pulled->Created->Started
您还可以从每个状态的 from 字段中看到大量信息。
默认 - 调度程序的调度状态。 调度器是 Kubernetes 的一个组件,负责将 pod 调度到适当的节点。 具体适合什么类型的节点取决于 Kubernetes Scheduler 调度算法的实现,但 Jerry 没有研究过。 如果您将调度程序视为一个黑匣子,那么它的输入是 Pod 和多个节点的列表,其输出是 Pod 和匹配节点之间的绑定。 此状态消息显示“将 XXX 分配给 shoot--jerrytest-jerry1204-worker-yamer-z1-XXX”(继续)。 以 shoot--jerrytest 开头的字符串是 pod 分配到的节点的名称。
所有来自以下状态的字段均为kubelet,shoot--jerrytest-jerry1204-worker-yamer-z1-XXX 这里,kubelet 是 Kubernetes 节点上的一个重要模块,负责维护和管理节点上运行的所有容器,并确保 pod 的运行状态符合用户的期望。
您还可以在 Kubernetes Web 控制台中看到此正在运行的 pod。
除了 pod 之外,Kubernetes 是第二个 pod。关键概念是扩展。
如果运行另一个命令kubectl getdeploy,您将看到除了生成 pod 之外,kubectl run 命令还生成部署。 以下数字为该命令的 Desired、Current、Up-to-Date 和Available 输出,与上述几乎所有 Kubernetes 设计都以 pod 为中心的事实结合起来,作为指导思想,这并不难推断生成的部署也适用于 pod。
事实上,刚接触 Kubernetes 的人都会明白,部署的首要职责是保证 Pod 的数量和健康状况。
在上一篇文章中,我们已经解释了如何使用docker run启动docker镜像。 然而,在 Kubernetes 世界中,我们并不直接处理在 pod 内运行的 Docker 容器。 相反,您可以通过 Kubernetes 服务将 Pod 内的应用程序提供的服务公开给外部使用。
到目前为止,Kubernetes集群上还没有生成任何应用程序相关的服务。 命令 kubectl get svc 仅返回 Kubernetes 标准服务。
因此,使用命令kubectl Expose来公开刚刚使用kubectl run创建服务生成的部署。基于
kubectl 公有部署 jerry-ui5 --type=LoadBalancer --port=80 --target-port=80
执行expose命令时,get svc命令返回服务。马苏。 与部署同名的 IP 地址暴露给外部访问,如 35.205.230.209。
因此请使用 URL 35.205。 .230.209/ webapp您可以访问在 Kubernetes Pod 中运行的 SAP UI5。
使用 Kubernetes 保证应用程序高可用性和可扩展性的一些经验
到目前为止,SAP UI5 应用程序仅运行在 Kubernetes 集群上的单个工作节点 pod 上。 我还没有体验过这个应用程序的运行时性能以及在 Docker 容器中运行它之前的情况。 不同之处。
尝试横向扩展 Kubernetes 部署。 在 Kubernetes 控制台中选择您的部署,然后从菜单中运行 Scale 命令来设置新的 Pod 数量。 在下面的屏幕截图中,数字 3 表示我们告诉此部署,它应该尝试确保命令运行后 pod 的数量增加。
当然,控制台的图形菜单也有一个对应的命令行,我们将使用它。 之后。
点击上图中的“确定”按钮后,再次运行kubectl get pod。 可以看到水平扩展后生成了两个新的部署。 所以这次get pod命令总共返回了三个pod。 最后两个豆荚是在横向扩展后立即创建的。
使用kubectl description 命令查看部署详细信息。 您可以在“副本”字段中查看此部署控制的 pod 的运行时详细信息。
3 个已更新 | 3 个可用 | 0 个不可用
此处,kubectl删除并再次检查。 新的 Pod 在生成时会自动生成,并且正在运行的 Pod 总数仍为 3。
Kubernetes滚动升级(Rolling Update)功能体验
滚动升级是Kubernetes的一个关键功能。 顾名思义,这是一种平滑迁移升级方式。 无中断服务升级是通过每个容器的替换升级来实现的。 下图显示了部署描述命令的输出。 StrategyType字段表示kubectl run创建的部署的默认升级方法是滚动升级。
我设计了一个像这样的简单升级场景。 SAP UI5 应用程序版本 1.0 在 Kubernetes 节点上的 10 个 Pod 上同时运行。 假设您的整个应用程序没有中断,您可以通过滚动升级升级到版本 2.0。
上一篇文章中您上传到Docker Hub的镜像标签是默认最新的,因此您需要在Docker Hub上创建两个镜像,标签为v1.0和v2.0。
以下命令行将标记为 v1.0 的镜像推送到 Docker Hub。
更改UI5应用详情页标题,添加以下内容以前(v2.0) 用于指示此版本的应用程序是版本 2.0。
同样,将2.0版本镜像推送到: 在 Docker Hub 上:
Docker Hub 上的两个版本的镜像均已准备就绪:
首先是 1.0 版本,请使用图像。 启动运行 SAP UI5 应用程序的单个 Pod:
kubectl run jerry-ui5 --image=i042416/ui5-nginx:v1。 >
使用scale命令将1个pod水平缩放到10个pod。
kubectlscale --replicas=10deployment/jerry-ui5
strong>
上图是,显示 kubectl get pod 返回 10 个正在运行的 pod。
使用以下命令触发滚动升级,将名为 jerry-ui5 的基于部署的镜像从 v1.0 升级到 v2.0 升级到。 >:
kubectl set imagedeployment/jerry-ui5 i042416/ui5-nginx=i042416/ui5-nginx:v2.0
要查看滚动升级的实时进度,请使用kubectl rollout statusdeployment/jerry-ui5。 上面的日志显示了在给定时间点有多少旧版本 Pod 正在等待终止,以及有多少新版本 Pod 已经可用。
X 个旧副本正在等待终止。
Y 个更新副本可用。
单击任意 pod 可查看其详细信息并验证您正在使用的 Docker 映像是否已存在。 v2.0版本:
最后,当我在浏览器中查看订单详情页面的标题时,看到了订单详情的标题页 。 稍后(v2.0)。 我再次确认了。 滚动升级成功完成。
本文仅向您展示 Kubernetes 功能的冰山一角。 更多细节等待我们知晓。 毕竟SAP云平台很快就会支持Kubernetes环境。 感谢您的阅读。
获取更多Jerry原创文章,请关注公众号“王子熙”:
评论前必须登录!
注册