K8S实战基础篇:一文带你深入了解K8S实战部署SpringBoot项目

1.前言

2.简介

2.1.为什么写这篇文章

2.2.需求描述

2.3.需求分析

3. 部署实战

3.1 环境准备

3.2 image准备

3.3 部署2个实例

3.3.1 编写yaml文件

3.3.2 启动

3.3.3 引入Ingress

3.3.3.1 Ingress简介

3.3.3.2 Ingress 安装

3.3.3.3 Ingress 配置启动

3.3.3.4 验证

3.3.3.4 自动扩缩

4. 总结

1.前言

云原生可以说是当下互联网行业最火爆的概念和技术,云原生从字面意思上来看可以分成云和原生两个部分。

云是和本地相对的,传统的应用必须跑在本地服务器上,现在流行的应用都跑在云端,云包含了IaaS,、PaaS和SaaS。

原生就是土生土长的意思,我们在开始设计应用的时候就考虑到应用将来是运行云环境里面的,要充分利用云资源的优点,比如️云服务的弹性和分布式优势。

聊到云原生,避不开的就是容器技术,而docker作为最流行的容器技术,已经经过很多年的线上实战。今天我们不深入聊云原生,docker这些技术概念,今天我们聊一聊时下最火的容器编排技术:K8S-实战部署SpringBoot项目。

2.简介

2.1.为什么写这篇文章

前言中提到云原生、docker、K8S,我是18年第一次docker,也是在18年接触K8S,相对这门技术来说,我接触的时候已经有些晚了,因为在之后的面试中,已经感受到这些技术在大厂已经用的很成熟了,之前都在小公司,并不了解这些技术是什么,干什么用,加上国内这方面的资料又比较少,学起来是相当吃力。而到大厂之后,发现这些技术无处不在,并且基础设施建设已经很完备,一键部署云端的骚操作,让开发只需要关心业务而无需关心安装部署等繁琐的工作。祸兮福之所倚;福兮祸之所伏,大厂的技术设施完备的同时,另一方面也消弱了你去了解基础设施背后的技术原理能力。正是认识到这一点,今天才写这篇文章,为迷途中的孩子找到回家的路。废话不多,撸起袖子,干就完了!

这里没有任何马后炮套话,只有粗暴的干货。写大家看得懂、用得着、赚得到的文章是唯一宗旨!

2.2.需求描述

我有一个简单的Springboot项目,想部署在K8S集群中,能够实现扩缩容,负载均衡,同时我有一个互联网域名,我想把这个域名绑定在这个服务上,能够在有网络的地方访问。

2.3.需求分析

这个需求我想在很多刚开始接触docker,k8s等技术的老铁身上都会遇到过,真正实现起来,并不是那么容易,听我一一道来:

image—Springboot项目一般是以jar包的形式跑在像centos等服务器上,运行nohup java -jar xxx.jar &命令就能启动起来。但是在k8s中,运行起来的的并不是jar,而是image,因此我们需要把jar打包成image;

自动扩缩—最基础的image有了,接下来就要考虑的是自动扩缩:顾名思义,比如说就是在服务访问量大的时候,我可以添加实例,来减少每个服务实例的压力,在访问量小的时候,我可以删除一部分实例,来实现资源的高效利用。

负载均衡—当我们的实例越来越多,我并不希望把所有的请求都落在一个实例上,如若不然,我们自动扩缩也就没了意义,传统方法我们可以用Nginx等实现负载均衡,待会来看看K8S能做些什么

域名绑定—这个就没什么好说的了。

3. 部署实战

3.1 环境准备

工欲善其事,必先利其器:

Springboot jar包

K8S集群环境

K8S集群环境部署我就不在这里展开讲了,我们准备一个最简单的Springboot项目,里面只有一个接口,访问localhost:8088,返回服务器的hostname,当整个部署工作完成之后,我们通过域名访问这个接口,返回的应该是不同的container的hostname,那我们的任务就完成了。

@GetMapping("/")

    public String sayHello() throws UnknownHostException {

        String hostname = "Unknown";

        InetAddress address = InetAddress.getLocalHost();

        hostname = address.getHostName();

        return hostname;

    }

3.2 image准备

我们都知道,所有image的生成都离不开Dockerfile技术,我们有了一个jar包,要利用Dockerfile技术生成一个image。废话不多,上代码:

#使用jdk8作为基础镜像

FROM java:8

#指定作者

MAINTAINER ***

#暴漏容器的8088端口

#EXPOSE 8088

#将复制指定的docker-demo-0.0.1-SNAPSHOT.jar为容器中的job.jar,相当于拷贝到容器中取了个别名

ADD docker-demo-0.0.1-SNAPSHOT.jar /job.jar

#创建一个新的容器并在新的容器中运行命令

RUN bash -c 'touch /job.jar'

#设置时区

ENV TZ=PRC

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

#相当于在容器中用cmd命令执行jar包  指定外部配置文件

ENTRYPOINT ["java","-jar","/job.jar"]

Dockerfile文件里面有注释,具体的每一行代码什么意思我就不展开多讲了,这不是今天的重点,接下来,我们把docker-demo-0.0.1-SNAPSHOT.jar,Dockerfile文件放在同一个目录,上传到K8S的master 节点上,在目录内执行如下命令生成images

$ docker build .

我们可以看到生成image的过程,通过docker images 查看镜像

生成一个 docker-demo:latest的image镜像。

注意:我们部署的是集群,要想K8S集群中都能拉到这个镜像,那我们有以下两种方式:

方法一:我们把这个docker-demo:latest上传到远端仓库,这个仓库可以是我们自己的,或者是像我一样注册一个阿里云的账号,上传到阿里云自己的容器镜像服务仓库,如下图:

具体步骤:

1.1 docker登陆阿里云容器镜像服务,需要输入密码

$ docker login --username=xxxx(写自己的用户名) registry.cn-hangzhou.aliyuncs.com

1

1.2 在阿里云上创建命名空间:例:cuixhao-docker-demo

1.3 镜像打标签

$ docker tag docker-demo:latest registry.cn-hangzhou.aliyuncs.com/cuixhao-docker-demo/docker-demo:latest

1.4 push到阿里云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值