【三小时学会Kubernetes!(五) 】完成整个架构
完成整个架构
现在我们学习了完成架构的所有必须的资源,因此这一节会非常快。图 22 中灰色的部分是需要做的事情。让我们从底部开始:部署 sa-logic 的部署。

图 22:当前应用程序状态
部署 SA-Logic
在终端中进入资源清单文件所在的目录,然后运行如下命令:
kubectl apply -f sa-logic-deployment.yaml --record deployment "sa-logic" created
SA-Logic 的部署会创建三个 Pod(Pod 上运行着我们的 Python 应用)。该命令还会给 Pod 贴上 app: sa-logic 的标签。有了这个标签,我们就能从 SA-Logic 服务中利用选择器来选择这些 Pod。请花点时间打开 sa-logic-deployment.yaml,查看其内容。
这里的概念都是一样的,因此我们可以直接讲解下一个资源:SA-Logic 服务。
SA Logic 服务
首先来解释下为什么需要该服务。我们的 Java 应用(在 SA-WebApp 部署的 Pod 中运行)依赖于 Python 应用提供的情感分析。但现在,与我们在本地运行一切服务时的状况不同,我们并没有一个单一的 Python 应用监听着某个端口,我们只有两个 Pod,如果需要,我们可以有更多的 Pod。
这就是为什么需要“服务”为一组提供相同功能的 Pod 提供访问入口。这就是说,我们可以利用 SA-Logic 服务作为所有 SA-Logic Pod 的访问入口。
运行如下命令:
kubectl apply -f service-sa-logic.yaml service "sa-logic" created
更新后的应用程序状态:现在我们有两个 Pod 在运行(包含 Python 应用程序),并且 SA-Logic 服务提供了访问入口,该访问入口将在 SA-WebApp 的 Pod 中使用。

图23:更新后的应用程序状态
现在需要部署 SA-WebApp Pod,我们需要用到部署资源。
SA-WebApp 部署
我们已经学过了部署,尽管这个部署会用到更多的特性。打开 sa-web-app-deployment.yaml 文件,会发现以下的新内容:
- image: rinormaloku/sentiment-analysis-web-app
imagePullPolicy: Always
name: sa-web-app
env:
- name: SA_LOGIC_API_URL
value: "http://sa-logic"
ports:
- containerPort: 8080
我们感兴趣的第一件事就是 env 属性。我们猜测它定义了环境变量 SA_LOGIC_API_URl,值为在 Pod 内的值为 http://sa-logic。但为什么要初始化成 http://sa-logic,sa-logic 究竟是什么?
我们先来介绍下 kube-dns。
KUBE-DNS
Kubernetes 有个特殊的 Pod 叫做 kube-dns。默认情况下,所有 Pod 都用它作为 DNS 服务器。kube-dns 的一个重要属性就是它为每个建立的访问都创建一条 DNS 记录。
这就是说当我们创建 sa-logic 服务时,它会获得一个 IP 地址。它的名字会加入到 kube-dns 中(和它的 IP 地址一起)。这样所有 Pod 都能够把 sa-logic 翻译成 SA-Logic 服务的 IP 地址。
好,现在可以继续了:
SA WebApp 部署(续)
运行以下命令:
kubectl apply -f sa-web-app-deployment.yaml --record deployment "sa-web-app" created
完了。剩下的工作就是通过 LoadBalancer 服务将 SA-WebApp Pod 暴露到外部。LoadBalancer 服务提供了 SA-WebApp Pod 的访问入口,这样 React 应用程序就能发送 HTTP 请求了。
SA-WebApp 服务
打开 service-sa-web-app-lb.yaml 文件,可以看到内容还是挺熟悉的。
所以我们可以运行如下命令:
kubectl apply -f service-sa-web-app-lb.yaml service "sa-web-app-lb" created
这样架构就完成了。但还有一点不完美的地方。在部署 SA-Frontend Pod 之后,容器映像指向了 http://localhost:8080/sentiment 处的 SA-WebApp。但现在我们需要将其更新为 SA-WebApp LoadBalancer 的 IP 地址(其作用是 SA-WebApp Pod 的访问入口)。
修补该不完美是个快速复习一切的绝佳机会(如果能不参照以下的指南独立完成更好)。下面我们开始:
- 执行下列命令获取 SA-WebApp LoadBalancer 的 IP:
minikube service list |-------------|----------------------|-----------------------------| | NAMESPACE | NAME | URL | |-------------|----------------------|-----------------------------| | default | kubernetes | No node port | | default | sa-frontend-lb | http://192.168.99.100:30708 | | default | sa-logic | No node port | | default | sa-web-app-lb | http://192.168.99.100:31691 | | kube-system | kube-dns | No node port | | kube-system | kubernetes-dashboard | http://192.168.99.100:30000 | |-------------|----------------------|-----------------------------|
在 sa-frontend/src/App.js 中使用 SA-WebApp LoadBalancer 的 IP,如下:analyzeSentence() { fetch('http://192.168.99.100:31691/sentiment', { /* shortened for brevity */}) .then(response => response.json()) .then(data => this.setState(data)); }
构建静态文件 npm build (需要先切换到 sa-front-end 目录);
构建容器映像:
docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend:minikube .
- 将映像推送到 Docker hub:
docker push $DOCKER_USER_ID/sentiment-analysis-frontend:minikube
- 编辑 sa-frontend-deployment.yaml 并使用新的映像;
- 执行 kubectl apply -f sa-frontend-deployment.yaml 命令。
刷新浏览器(如果你关闭了浏览器,则执行 minikube service sa-frontend-lb)。敲个句子试试看!

全文总结
Kubernetes 对团队、项目都很有好处,它能简化部署,提供伸缩性、灵活性,可以让我们使用任何底层基础设施。以后我们叫它 Supernetes 吧!
本文中覆盖的内容:
- 构建/打包/运行 ReactJS、Java 和 Python 应用程序;
- Docker容器,如何利用 Dockerfile 定义并构建容器;
- 容器注册目录,我们采用 Docker Hub 作为容器的代码库;
- 介绍了 Kubernetes 的最重要的内容;
- Pod;
- 服务;
- 部署;
- 新概念,如零停机时间部署;
- 创建可伸缩的应用;
- 流程上,我们将整个微服务应用程序转成了 Kubernetes 集群。
本文为你提供了坚实的基础供你在实际的项目中使用,并且帮你更容易地学习更多新概念。
来自:CSDN(微信号:CSDNnews),作者:Rinor Maloku,译者:弯月,责编:郭芮
【三小时学会Kubernetes!(五) 】完成整个架构的更多相关文章
- 三小时学会Kubernetes:容器编排详细指南
三小时学会Kubernetes:容器编排详细指南 如果谁都可以在三个小时内学会Kubernetes,银行为何要为这么简单的东西付一大笔钱? 如果你心存疑虑,我建议你不妨跟着我试一试!在完成本文的学习后 ...
- [转载]三小时学会Kubernetes:容器编排详细指南
原翻译by梁晓勇 原英文:Learn Kubernetes in Under 3 Hours: A Detailed Guide to Orchestrating Containers 我很奇怪,为什 ...
- 【三小时学会Kubernetes!(零) 】系统结构及相关示例微服务介绍
写在前面 牢牢占据容器技术统治地位的 Kubernetes,其重要性想必不言而喻,我保证本文是最详尽的 Kubernetes 技术文档,从我在后台排版了这么漫长的时间就能看出来.废话不多说 — — 以 ...
- 【三小时学会Kubernetes!(四) 】Deployment实践
Deployment 部署 Kubernetes 部署可以帮助每一个应用程序的生命都保持相同的一点:那就是变化.此外,只有挂掉的应用程序才会一尘不变,否则,新的需求会源源不断地涌现,更多代码会被开发出 ...
- 【三小时学会Kubernetes!(三) 】Service实践
服务Service Kubernetes 服务资源可以作为一组提供相同服务的 Pod 的入口.这个资源肩负发现服务和平衡 Pod 之间负荷的重任,如图 16 所示. 图16:Kubernetes 服务 ...
- 【三小时学会Kubernetes!(二) 】Kubernetes 简介及Pod实践
Kubernetes 简介 我向你保证我没有夸大其词,读完本文你会问“为什么我们不称它为 Supernetes?” Kubernetes 是什么? 从容器启动微服务后,我们有一个问题,让我们通过如下问 ...
- 【三小时学会Kubernetes!(一) 】容器简介及为每个服务创建镜像
容器是什么 Kubernetes 是容器管理平台.可想而知我们需要容器去管理它们.但是容器是什么?Docker 官方文档的最佳答案如下: 容器映像是轻量级的.独立的.可执行软件包,包含所有可运行的东西 ...
- 三小时攻克 Kubernetes!
我保证本文是最详尽的 Kubernetes 技术文档,从我在后台排版了这么漫长的时间就能看出来.废话不多说——牢牢占据容器技术统治地位的 Kubernetes,其重要性想必不言而喻. 以下为译文: 为 ...
- 【转载】一个小时学会MySQL数据库
一个小时学会MySQL数据库 目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库技术品牌.服务与架构 1.3.数 ...
随机推荐
- Mysql文章笔记
Mysql名词解释/含义/读书笔记 MVCC(Multiversion concurrency control) MySQL InnoDB存储引擎,实现的是基于多版本号的并发控制协议--MVCC (M ...
- mysql5.7新特性探究
一.MySql5.7增加的特性 1.MySql服务方面新特性 1) 初始化方式改变 MySql5.7之前版本初始化方式: scripts/mysql_install_db MySql5.7版本初始化方 ...
- (转)VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径说明
$(RemoteMachine) 设置为“调试”属性页上“远程计算机”属性的值.有关更多信息,请参见更改用于 C/C++ 调试配置的项目设置. $(References) 以分号分隔的引用列表被添 ...
- PATH and CLASSPATH
PATH and CLASSPATH 1. 可以不设置PATH直接运行Java应用的.PATH的设置只是为了使用上的方便. 2. PATH设置的是Java的bin目录,使得bin目录下的可执行程序能够 ...
- jenkins git gradle android自动化构建配置
需要安装软件(jenkins所在服务器): gradle.SDK 一.gradle安装(服务器部署的gradle版本需要等于或高于开发环境的gradle版本) 1.下载地址:http://servic ...
- 中线,基线,垂直居中vertical-align:middle的一些理解
基线:小写字母xxxxx的下边缘线就是我们的css基线:一般的行内元素都是vertical-align: baseline;默认设置: x-height:就是指小写字母xxxx的高度,下边缘线到上边缘 ...
- hu3613 Best Reward
地址:http://acm.hdu.edu.cn/showproblem.php?pid=3613 题目: Best Reward Time Limit: 2000/1000 MS (Java/Oth ...
- Java命令:Jstack
jstack是java虚拟机自带的一种堆栈跟踪工具. 功能 jstack用于生成java虚拟机当前时刻的线程快照.线程快照是当前java虚拟机内每一条线程正在执行的方法堆栈的集合,生成线程快照的主要目 ...
- tomcat+svn+maven+jenkins实现自动构建
首先说明一个各软件的版本: tomcat:apache-tomcat-8.5.16.tar.gz maven:apache-maven-3.5.0-bin.tar.gz svn:subversion- ...
- 20145216史婧瑶《Java程序设计》第二次实验报告
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...