云端的生存之道,第 1 单元:将 Spring Boot 部署到 Kubernetes

初始化 Kubernetes 集群

第一步是初始化 IBM Cloud 上的 Kubernetes 集群。IBM Cloud 可能需要几分钟时间来启动新的 Kubernetes 集群;因此,通过先执行初始化操作,可以在后台运行的同时完成一些其他步骤。

  1. 登录到您的 IBM Cloud 帐户。在 Dashboard 页面的右上方,您应该会看到按钮 Create resource

    如果该按钮未出现在此页面的顶部,请在资源目录页面中查找 Kubernetes Service

  2. 在本教程中,您将创建一个免费的 Lite Kubernetes 集群

    。要初始化 Lite 集群,您需要升级自己的 IBM Cloud 帐户(如果尚未升级)。

    别担心。本教程中的所有资源都是免费的;在闲置一段时间(通常为 30 天)后,它们将被关闭,或者被控制在免费限制范围内。您的信用卡对帐单上不会出现任何新的费用。

    我也输入了自己的信用卡信息来完成此操作,所以我们是共同进退的!

  3. 在您升级帐户之后,选择 Lite ;对于集群名称,使用 living-on-the-cloud ,然后选择 Create cluster

IBM Cloud 现在将开始初始化 Kubernetes 集群。如前所述,这将需要几分钟时间,因此,在 IBM Cloud 完成初始化过程的同时,可继续执行后续步骤。

创建一个容器注册表

  1. 返回到资源目录页面,搜索 Container Registry 并将其选中;它应如下所示:

    在创建注册表页面上,您可以查看定价套餐。默认情况下,我们的帐户将设置为 Lite 套餐,因此,它会受到速率限制,以便遵循 0.5GB 存储空间和 5GB 提取数据的限制。

  2. 单击 Create 以转至 Registry 主页,其中为您提供 Container Registry 的概述 - 可用的名称空间、注册表和镜像的数量。

配置 IBM Cloud 和 Docker CLI

  1. 如果您尚未安装 IBM Cloud 命令行界面(CLI),请 下载 并进行安装。
  2. 打开终端或命令窗口,然后输入以下命令以验证安装是否成功:

    ibmcloud --version

    您会获得类似下面的返回结果:

    ibmcloud version 0.14.0+3303164-2019-02-07T02:13:34+00:00

让我们开始配置 IBM Cloud CLI 以使用 IBM Cloud 帐户资源。

  1. 运行以下命令以安装容器注册表插件:

    ibmcloud plugin install container-registry -r Bluemix

  2. 完成安装脚本后,运行以下命令以确保安装成功:

    ibmcloud cr info

    您会获得与下面类似的输出:

    Container Registry us.icr.io
    Container Registry API endpoint https://us.icr.io/api
    IBM Cloud API endpoint https://api.ng.bluemix.net
    IBM Cloud account details
    IBM Cloud organization details

    注意:如果先前安装了容器注册表,并且容器注册表 URL 包含" bluemix" 一词,请了解如何更新您的 API 端点。

  3. 使用以下命令以通过 IBM Cloud CLI 登录到您的 IBM Cloud 帐户:

    ibmcloud login -a https://api.ng.bluemix.net

    系统会提示您输入与 IBM Cloud 帐户关联的电子邮件和密码。

    注意:如果您使用联合 IBM Cloud 帐户,请执行这些步骤。

  4. 在登录后,为容器注册表创建一个名称空间。虽然名称空间的名称可以随意,但在本教程和系列教程中,我将使用 living-on-the-cloud

    要创建名称空间,请运行以下命令:

    ibmcloud cr namespace-add living-on-the-cloud

    您会获得以下响应:

    Adding namespace 'living-on-the-cloud'...

    Successfully added namespace 'living-on-the-cloud'

  5. 使用以下命令行登录到容器注册表:

    ibmcloud cr login

  6. 创建要用于 Docker 命令行的 API 令牌。

    ibmcloud cr token-add --description "Living on the Cloud" --non-expiring --readwrite

    描述也可以随意,但在本系列教程中,我将使用 "Living on the Cloud" 。

    您会获得类似下面的响应:

    Token identifier b6ff5759-e085-58da-8086-ead373a9e9da
    Token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiNmZmNTc1OS1lMDg1LTU4ZGEtODA4Ni1lYWQzNzNhOWU5ZGEiLCJpc3MiOiJyZWdpc3RyeS5uZy5ibHVlbWl4Lm5ldCJ9.1zgwfBe6epmFrh-PfZWR5Kf3ZyyL4M6QFLymLCPyqEM

  7. 将 Docker 守护程序链接到容器注册表:

    docker login us.icr.io -u token

    当系统提示您输入密码时,请使用您获得的令牌。

虽小犹荣

现在可以开始做一些我最喜欢的事情了 - 编码。这次只是编写一个简单的应用程序,但是随着您继续学习本系列教程,我将向您展示如何向该应用程序添加新功能。

  1. 转至 start.spring.io

    • Group ID 和 Artifact 可以由您决定,但我分别使用了 com.ibm.developerstorm-tracker *(因为我们正在讨论云,而 storm(风暴)即表示云,明白了吗?)。
    • 对于 Dependencies ,您将需要引入 Web

  2. 单击 Generate Project ,这将使用您刚刚输入的值来下载一个脚手架式 Spring Boot 项目的 ZIP 压缩文件。

  3. 解压缩该压缩文件,然后在您的 IDE 中打开该项目。

目前,storm-tracker 应用程序将仅执行非常简单的"Hello World"。

  1. 创建名为 StormTrackerController 的新类并向其添加 @GetMapping ,这将返回 "Hello World"

    作为响应。

    完整的类应如下所示:

    @RestController
    @RequestMapping("/api/v1/storms")
    public class StormTrackerController {

    @GetMapping
    public ResponseEntity helloWorld(){
    return ResponseEntity.ok("Hello World");
    }
    }

    此时最好启动该应用程序并验证一切是否正常运行。如果您不熟悉 Spring Boot,那么端点应位于 http:localhost:8080/api/v1/storms

  2. pom.xml

    中,您将添加一个插件来将该应用程序容器化,并将其推送到您刚刚在 IBM Cloud 帐户上设置的容器注册表。

    在 pom.xml 中的 下,添加以下内容:


    io.fabric8
    docker-maven-plugin
    true



    us.icr.io/living-on-the-cloud/${project.name}

    adoptopenjdk/openjdk8-openj9


    java
    -jar
    /${project.build.finalName}.jar



    /
    dir
    artifact





    让我们快速完成此插件配置的重要部分。

    • 下,您将设置名称以及镜像在容器注册表中的存储位置:

      <name>us.icr.io/living-on-the-cloud/${project.name}</name>

      • us.icr.io 是 IBM Cloud 容器注册表的 API 端点(可能需要进行更改以与您的区域匹配)。
      • living-on-the-cloud 是您之前创建的容器名称空间。
      • ${project.name} 是仓库的名称,该仓库是一个容器仓库,用于存储所有相关镜像;如果您使用的是之前提供的相同值,那么它可以解析为 storm-tracker
    • 下,声明应基于哪个镜像来构建 Docker 镜像:

      <from>adoptopenjdk/openjdk8-openj9</from>

      对于基础 Docker 镜像,您使用的是 AdoptOpenJDK OpenJ9 镜像的 Java 8 版本。(了解有关 AdoptOpenJDKOpenJ9 的更多信息。)Eclipse OpenJ9 是可免费使用的开源 JVM 实现,它大约占用 Hotspot 所用内存的 60%。

    • 同样在 下,您将定义 Docker 镜像的入口点,并将项目工件复制到 Docker 镜像中:


       <arg>java</arg>
       <arg>-jar</arg>
       <arg>/${project.build.finalName}.jar</arg>
      



      /
      dir
      artifact
项目工件是在执行 **mvn package** 时构建的 JAR 文件。
  1. 弄清楚这一切后,执行以下命令来构建项目,将其容器化,然后将其推送到容器注册表:

    mvn package docker:build docker:push

    在构建执行结束时,您会看到以下输出:

    [INFO] DOCKER> Pushed us.icr.io/living-on-the-cloud/storm-tracker in 14 seconds

如果返回到容器注册表主页,那么您会看到它现在存储了一个镜像:

部署到 Kubernetes

至此,您的 Kubernetes 集群有望完成初始化。要验证是否已完成初始化,请返回到 Dashboard 页面并查看您刚刚创建的集群的状态是否为 Normal

下一部分将会执行相当多的命令。但不用担心,我将介绍每一条命令的用法。

  1. 将 container-service 插件添加到 IBM Cloud CLI,这还将下载并安装 kubectl

    ibmcloud plugin install container-service

    注意:如果要了解"kubectl"的发音,请 观看权威指南 (由 Waldo Grundenwald 编写)。

  2. 将 IBM Cloud CLI 设置为您集群所在的区域。在先前的镜像中,区域为 Dallas(它将转换为 us-south )。如果您的集群位于其他区域,那么可以运行命令 ibmcloud regions

    来查看所有区域。

    要设置区域,请运行以下命令:

    ibmcloud ks region-set us-south

  3. 下载您集群的配置信息:

    ibmcloud ks cluster-config living-on-the-cloud

    此命令的输出响应应如下所示:

    export KUBECONFIG=/Users/<username>/.bluemix/plugins/container-service/clusters/living-on-the-cloud/kube-config-hou02-living-on-the-cloud.yml

    我们将复制此行并将其粘贴到终端以设置环境变量 KUBECONFIG ( kubectl 将从中读取值)。

  4. 要验证 kubectl

    能否连接到您的集群,请运行以下命令:

    kubectl get nodes

    返回的输出应如下所示:

    NAME STATUS ROLES AGE VERSION
    10.77.223.210 Ready 8h v1.11.7+IKS

在正确配置了命令行后,现在可以开始部署并配置 Spring Boot 应用程序。

  1. 部署并运行您之前在集群上创建的镜像:

    kubectl run storm-tracker --image=us.icr.io/living-on-the-cloud/storm-tracker

    此行告知 Kubernetes 运行 --image argument 所定义的名为 storm-tracker 的镜像。

  2. 为了能够从外部 IP 访问您的服务,您需要公开该服务,如下所示:

    kubectl expose deployment storm-tracker --port=8080 --target-port=8080 --name=storm-tracker-service --type=NodePort

    该代码包含许多项,我将为您分解:

    expose
    deployment
    storm-tracker
    --port=8080
    --targetPort=8080

  3. 要查找已公开的端口,可以要求 Kubernetes 提供您刚刚创建的 NodePort

    的描述:

    kubectl describe service storm-tracker-service

    这会提供以下输出:

    Name: storm-tracker-service
    Namespace: default
    Labels: run=storm-tracker
    Annotations:
    Selector: run=storm-tracker
    Type: NodePort
    IP: XXX.XXX.XXX.XXX
    Port: 8080/TCP
    TargetPort: 8080/TCP
    NodePort: 30299/TCP
    Endpoints: XXX.XXX.XXX.XXX:8080
    Session Affinity: None
    External Traffic Policy: Cluster
    Events:

    在此示例输出中,公开的端口为 30299 。

  4. 您还需要获取 Kubernetes 集群的公共 IP:

    ibmcloud ks workers --cluster living-on-the-cloud

    输出应如下所示:

    ID Public IP Private IP Machine Type State Status Zone Version
    kube-hou02-paeb33817993d9417f9ad8cfad7fcf270e-w1 184.172.XXX.XXX XXX.XXX.XXX.XXX free normal Ready hou02 1.11.7_1544

  5. 使用来自这些输出的公共 IP 和端口,您应该能够在 <public IP>:<exposed port>/api/v1/storms 中调用您的 Spring Boot 应用程序。

结束语

虽然感觉貌似费了很多功夫才完成此过程,但实际上,将镜像部署到 Kubernetes 非常容易。我演示的许多步骤都是一次性初始设置的一部分。这仍然非常简单,在不到 30 分钟的时间里,您从零开始部署了一个可供全球访问的应用程序!

当然,本指南仅介绍了一小部分的 Kubernetes 功能以及现代应用程序通常期望获得的功能。在学习本系列教程的过程中,您将继续了解要添加到此应用程序的新功能,并学习如何在生产环境中自动完成构建、部署和操作应用程序的许多任务。

Image placeholder
左一
未设置
  0人点赞

没有讨论,发表一下自己的看法吧

推荐文章
云端的生存之道,第 2 单元:将 Spring Boot 应用程序连接到云托管的数据库

前提条件 本系列教程的第1部分,因为本教程直接以第1部分中的课程内容和完成的操作为基础。 一个IBMCloud帐户 云原生数据持久性 IBMCloud提供了许多可持久存储数据的选项。在本教程中,我

GitHub 被墙后的生存之道

背景 从今天开始,陆陆续续看到很多小伙伴说Github登录不上去了,我当然也不例外,但对于我这样的重度Github使用者,这是无法接受的。 前提 首先SS是肯定可以解决我们的访问问题的,但是这里我不会

Kubernetes 基础信息:什么是 Kubernetes?

简介 Kubernetes(常简称为K8s,在希腊语意为“舵手”或“驾驶员”)是用于自动部署、扩展和管理容器化(containerized)应用程序的开源系统。 由JoeBeda、BrendanBur

SpringBoot个人应用开发框架(SpringBoot版本2.1)+IDEA

前言: 此笔记为本人首个SpringBoot项目框架学习实践记录,期间参考了许多大神的笔记和心得。 参考文档如下: 项目git地址: 一、创建SpringBoot工程 1.1创建父POM工程结

再见 Spring Boot 1.X ,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring官方在其博客宣布,SpringBoot1.x停止维护,SpringBoot1.x生命周期正式结束。其实早在2018年7月30号,Spring官方就已经在博客进行过预告,

Spring Boot 高效数据聚合之道

项目地址和示例代码:https://github.com/lvyahui8/spring-boot-data-aggregator 背景 接口开发是后端开发中最常见的场景,可能是RESTFul接口,也

Spring-SpringAOP原理,手写Spring事务框架

一、Spring核心知识Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由RodJohnson在其著作ExpertOne-On-OneJ2EEDevelopm

SpringBoot 整合 Dubbo

1.整合dubbo 有的人或许会说已经有spring-cloud了,你整合dubbo干什么,其实没啥意图,主要就是想整合一下,毕竟dubbo在国内使用的还是很多的,你会一点点总不至于让你显得那么尴尬。

使用 Kubernetes 来部署你的 Laravel 程序

说明 Laravel是开发PHP应用程序的优秀框架。无论您是需要构建新想法的原型,开发MVP(最小可行产品)还是发布成熟的企业系统,Laravel都可以促进所有开发任务和工作流程。 如何处理部署应用

如何在生产环境中部署Kubernetes集群?

如果把kubernetes集群应用于生产环境中,需要做哪些准备?我们先要弄清楚一个词,什么是“生产就绪”?生产就绪,是我们经常听到的一个专业术语,大概意思是已经准备好并已处于即将生产的状态。但是,到底

【Kubernetes系列】第5篇 Ingress controller – traefik组件介绍

1.概述为了能够让Ingress资源能够工作,在Kubernetes集群中必须至少有一个运行中的ingresscontroller组件。也就是说如果在kubernetes集群中没有一个ingressc

Spark in action on Kubernetes – 存储篇

作者|阿里云智能事业群技术专家莫源前言在上篇文章中,SparkinactiononKubernetes–SparkOperator的原理解析我们分析了SparkOperator内部的机制,今天我们会讨

Twitter 宣布抛弃 Mesos,全面转向 Kubernetes

作者|阿里云智能高级技术专家张磊划重点Twitter的基础设施从Mesos全面转向Kubernetes阿里云容器平台团队即将开源 Kubernetes高级作业管理集合美国西部时间5月2日下午7点,Tw

使用 Docker 部署 Spring Boot 项目

Docker技术发展为微服务落地提供了更加便利的环境,使用Docker部署SpringBoot其实非常简单,这篇文章我们就来简单学习下。首先构建一个简单的SpringBoot项目,然后给项目添加Doc

使用Jenkins一键打包部署SpringBoot应用,就是这么6!

SpringBoot实战电商项目mall(25k+star)地址:https://github.com/macrozheng/mall 摘要任何简单操作的背后,都有一套相当复杂的机制。本文将以Spri

Chaos Mesh —— 让应用跟混沌在 Kubernetes 上共舞

作者:殷成文2019年12月31日,我们在GitHub上正式开源了ChaosMesh。作为一个云原生的混沌测试平台,ChaosMesh提供在Kubernetes平台上进行混沌测试的能力。本篇文章将围绕

SpringBoot 中的 Servlet Web 容器

1.前言 SpringBoot支持一下嵌入式Servlet容器: SpringBoot2.0.3.RELEASE需要Java8或9以及SpringFramework5.0.7.RELEASE或更高版本

Github 上 Star 最多的 Spring Boot 个人开源学习项目

2016年,在一次技术调研的过程中认识到了SpringBoot,试用之后便一发不可收拾的爱上它。为了防止学习之后忘记,就在网上连载了 SpringBoot系列文章,没想到这一开始便与SpringBoo

我如何将博客迁移到 Kubernetes(上)

最近Kubernetes的发展,以及在我司的大量应用,自己也迫不及待想要尝尝鲜,虽然我的博客是基于Hexo的纯静态站点,但这并不能阻挡我把它迁移上Kubernetes!毕竟...相比于GitHubPa

我如何将博客迁移到 Kubernetes(下)

前面的部分介绍了如何为我的博客打包Docker镜像,接下来就是重头戏——部署到Kubernetes。 GoogleKubernetesEngine 没错,我现在自用的Kubernetes集群就是

为什么说谷歌Anthos是kubernetes的翻版?

在本周纽约的一次会议活动中,谷歌谈到了Anthos。那么,Anthos到底是什么?有哪些新功能?本文将逐一解答!什么是Anthos?从官方资料来看,Anthos是谷歌的混合云平台,主要作用是保护客户的

当Kubernetes成为云操作系统的标准应用,AWS也亮出了“杀手锏”!

作为云计算领域的排头兵,AWS一直是“老大哥”形象,他的一举一动都牵动着无数人的神经。AWS不仅在云计算领域投入时间早、运行时间长、客户多,在无服务器、容器以及现代化应用工具开发方面,也是当之无愧的引

为什么说Kubernetes的崛起预示着云原生时代到来?

现在,云原生、Kubernetes已经成为企业IT领域的时髦概念,几乎所有的企业都在关注;如果不提这些概念,好像企业就会在云市场竞争中失去绝对话语权。那么,云原生和Kubernetes是怎样一种关系?

美团点评Kubernetes集群管理实践

背景作为国内领先的生活服务平台,美团点评很多业务都具有非常显著、规律的“高峰”和“低谷”特征。尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长。这对集群中心的资源弹性和可用性有非常高的要求

如何应对Kubernetes中的存储管理挑战?

Kubernetes是Google开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。对于那些工作负载多样化、不断变化的企业来说,使用Kubernetes是非常有利的。与容器一样,