使用k8s部署springboot+redis简单应用
准备
本文将使用k8s部署一个springboot+redis应用,由于是示例,所以功能比较简单,只有设置值和获取值两个api。
(1)设置值
(2)获取值
构建Web应用
(1)创建一个springboot工程
(2)引入redis和jedis的maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>
(3)创建redis工具类,连接redis,redisIp使用变量引入
@Component
public class RedisUtil {
@Value("${redisIp}")
private String redisIp;
@Value("${redisPort:6379}")
private int redisPort;
@Bean
public RedisConnectionFactory initRedisConnFactory() {
RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration(redisIp, redisPort);
// configuration.setPassword("123456");
JedisConnectionFactory connectionFactory = new JedisConnectionFactory(configuration);
return connectionFactory;
}
@Bean
public RedisTemplate getRedisTemplate(){
RedisTemplate redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(initRedisConnFactory());
return redisTemplate;
}
}
(4)创建api
@RestController
@RequestMapping(value = "/api/v1/k8s")
public class K8sDemoController {
@Autowired
private RedisTemplate redisTemplate;
/**
* 设值
* @param key
* @param value
* @return
*/
@GetMapping(value = "/setkv")
@ResponseBody
public String setKV(@RequestParam String key,@RequestParam String value) {
ValueOperations valueOperations = redisTemplate.opsForValue();
valueOperations.set(key,value);
return "设置成功";
}
/**
* 获取值
* @param key
* @return
*/
@GetMapping(value = "/get/{key}")
@ResponseBody
public String get(@PathVariable(value = "key") String key) {
ValueOperations valueOperations = redisTemplate.opsForValue();
String result = String.valueOf(valueOperations.get(key));
return result;
}
}
(5)打成jar包上传至服务器待用,同时需要将jdk的安装包也放到服务器上
使用k8s启动一个redis服务
注:k8s的所有资源都可以使用yaml文件进行描述
(1)创建一个名为redis-controller.yaml的文件
apiVersion: v1
kind: ReplicationController
metadata:
name: redis
labels:
name: redis
spec:
replicas: 1 #副本数为1
selector:
name: redis
template: #模板
metadata:
name: redis
labels:
name: redis
spec:
containers:
- name: redis
image: redis:latest
imagePullPolicy: IfNotPresent #镜像拉取策略
ports:
- containerPort: 6379 #容器端口
使用如下命令创建redis的ReplicationController控制器
kubectl create -f redis-controller.yaml
查看是否创建成功:
kubectl get rc
查看创建的Pod:
kubectl get pods
(2)创建一个名为redis-svc.yaml文件
apiVersion: v1
kind: Service
metadata:
name: redis
spec:
selector:
name: redis #选择的Pod标签
ports:
- port: 6379 #暴露端口号
targetPort: 6379 #服务端口号
使用如下命令创建redis的Service:
kubectl create -f redis-svc.yaml
查看是否创建成功:
kubectl get svc
如上图所知,当前redis被分配的IP为
10.109.56.243
redis已启动。
使用Dockerfile创建web应用镜像
Dockerfile内容如下:
#基础镜像
FROM centos:7
#标签信息
LABEL author=lsy
#设置变量,后续直接引用
ENV path=/usr/soft
#创建目录
RUN mkdir ${path}
#设置工作目录
WORKDIR ${path}
#将jdk安装包放入容器中的目录中,此命令会自动进行解压
ADD jdk-8u191-linux-x64.tar.gz ${path}
#设置容器java环境
ENV JAVA_HOME=${path}/jdk1.8.0_191
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#将web应用jar包拷贝到目录中
COPY k8s_demo-1.0.jar ${path}
#暴露8080端口
EXPOSE 8080
#容器刚启动时运行命令
CMD java -jar -DredisIp=10.109.56.243 k8s_demo-1.0.jar
容器启动后执行的命令中的redisIp参数是由上一步获取的,k8s允许集群中服务间进行直接访问。
java -jar -DredisIp=10.109.56.243 k8s_demo-1.0.jar
在Dockerfile文件所在目录使用如下命令构建镜像:
docker build -t cnode-1:5000/k8sdemo:v1.2 .
使用如下命令查看镜像:
docker images
镜像创建成功之后,需要将镜像推送到私有仓库:
docker push cnode-1:5000/k8sdemo:v1.2
至此,web应用镜像已构建成功并推送至私有仓库
使用k8s部署web应用
(1)创建名为k8sdemo-controller.yaml的yaml文件
apiVersion: v1
kind: ReplicationController
metadata:
name: k8sdemo
labels:
name: k8sdemo
spec:
replicas: 3 #副本数为3,k8s会自动进行负载均衡
selector:
name: k8sdemo
template:
metadata:
name: k8sdemo
labels:
name: k8sdemo
spec:
containers:
- name: k8sdemo
image: cnode-1:5000/k8sdemo:v1.2 #刚上传至私有仓库的镜像
imagePullPolicy: IfNotPresent #镜像拉取策略
ports:
- containerPort: 8080
使用如下命令创建web app的ReplicationController控制器:
kubectl create -f k8sdemo-controller.yaml
查看是否创建成功:
查看是否有创建3个Pod:
(2)创建名为k8sdemo-svc.yaml的yaml文件
apiVersion: v1
kind: Service
metadata:
name: k8sdemo
spec:
type: NodePort
selector:
name: k8sdemo
ports:
- port: 8080
targetPort: 8080
nodePort: 30080
由于此web app需要允许外部访问,所以需要将Service的spec.type设置为NodePort,同时需要在spec.ports里设置对应暴露给外部访问的端口好nodePort,这里设置的是30080
使用如下命令创建web app的Service:
kubectl create -f k8sdemo-svc.yaml
查看是否创建成功:
如上图,可看到其将8080端口映射到集群节点的30080端口。
接下来,就可以使用30080端口访问web app的api。
验证
(1)设置一个key=name,value=liusy
(2)获取key=name的值
===============================
我是Liusy,一个喜欢健身的程序员。
欢迎关注微信公众号【Liusy01】,一起交流Java技术及健身,获取更多干货,领取Java进阶干货,领取最新大厂面试资料,一起成为Java大神。
来都来了,关注一波再溜呗。
使用k8s部署springboot+redis简单应用的更多相关文章
- K8S 部署 SpringBoot 项目(一篇够用)
现在比较多的互联网公司都在尝试将微服务迁到云上,这样的能够通过一些成熟的云容器管理平台更为方便地管理微服务集群,从而提高微服务的稳定性,同时也能较好地提升团队开发效率. 但是迁云存在一定的技术难点,今 ...
- springboot redis简单结合
参考: https://www.cnblogs.com/ityouknow/p/5748830.htmlhttp://blog.csdn.net/i_vic/article/details/53081 ...
- k8s部署spring-boot项目失败
现象:spring-boot项目启动到某个地方停止,然后容器重启 解决:扩大内存和核心数
- SpringBoot+Redis简单使用
1.引入依赖 在pom.xml中加入 <dependency> <groupId>org.springframework.boot</groupId> <ar ...
- k8s学习笔记(1)- 简单部署springboot应用
前言:k8s全称kubernetes,k8s是为容器服务而生的一个可移植容器的编排管理工具,越来越多的公司正在拥抱k8s,并且当前k8s已经主导了云业务流程,关于更多的k8s知识,可自行学习 1.k8 ...
- 从安装linux(centos7.6)系统到部署springboot java程序到k8s(大纲)
本文说明从安装linux系统开始,一直到在k8s运行springboot程序全过程 本文假设在自己电脑操作,因此linux系统使用vmware虚拟机,linux发行版使用centos 7.6.1810 ...
- k8s学习笔记(2)- Rancher2.x部署springboot应用及高可用、扩容
前言:上一篇介绍基于k3s环境,使用kubectl部署springboot简单项目应用,本篇介绍基于rancher2.x部署应用程序 1.上篇已部署一个springboot应用,我们可以通过ranch ...
- 最简单的 K8S 部署文件编写姿势,没有之一!
1. 头疼编写K8S部署文件? K8S yaml 参数很多,需要边写边查? 保留回滚版本数怎么设? 如何探测启动成功,如何探活? 如何分配和限制资源? 如何设置时区?否则打印日志是GMT标准时间 如何 ...
- jenkins流水线部署springboot应用到k8s集群(k3s+jenkins+gitee+maven+docker)(1)
前言:前面写过2篇文章,介绍jenkins通过slave节点部署构建并发布应用到虚拟机中,本篇介绍k8s(k3s)环境下,部署jenkins,通过流水线脚本方式构建发布应用到k8s(k3s)集群环境中 ...
随机推荐
- 04 . Vue组件注册,数据交互,调试工具及组件插槽介绍及使用
vue组件 组件(Component)是 Vue.js 最强大的功能之一. 组件可以扩展 HTML 元素,封装可重用的代码. 组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的 ...
- Mysql之存储过程与存储函数
1 存储过程 1.1 什么是存储过程 存储过程是一组为了完成某项特定功能的sql语句集,其实质上就是一段存储在数据库中的代码,他可以由声明式的sql语句(如CREATE,UPDATE,SELECT等语 ...
- Ceph对象主本损坏的修复方法
前言 问题的触发是在进行一个目录的查询的时候,osd就会挂掉,开始以为是osd操作超时了,后来发现每次访问这个对象都有问题 log [WRN] : slow request 60.793196 sec ...
- 理解 ASP.NET Core: 处理管道
理解 ASP.NET Core 处理管道 在 ASP.NET Core 的管道处理部分,实现思想已经不是传统的面向对象模式,而是切换到了函数式编程模式.这导致代码的逻辑大大简化,但是,对于熟悉面向对象 ...
- 应届生应聘阿里,腾讯,美团90%会被问到的Netty面试题!史上最全系列!
1.BIO.NIO 和 AIO 的区别? BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理.线程开销大.伪异步 IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源 ...
- Zabbix监控笔记
了解zabbix,有必要了聊一下监控系统相关内容 企业中常用的开源监视系统目前有 cacti.Nagios.Open-Falcon.zabbix.prometheus等 使用监控系统的目的在于 /1. ...
- 如何用MathType 7输入x的一阶导数
物理学.几何学.经济学等学科中的一些重要概念都可以用导数来表示.如,导数可以表示运动物体的瞬时速度和加速度.可以表示曲线在一点的斜率.还可以表示经济学中的边际和弹性.那么作为专业的公式编辑器,如何输入 ...
- Java Bean拷贝工具Orika原理解析
最近面试被问及对象拷贝怎样才能高效,实际上问的就是Orika或者BeanCopier的原理.由于网上对Orika原理的解析并不太多-因此本文重点讲解一下Orika的原理.(Orika是基于JavaBe ...
- Ubuntu14.04下安装Composer
下载Composer: curl -sS https://getcomposer.org/installer | php 安装Composer: /usr/bin/php composer.phar ...
- redlock分布式锁真的安全吗
此文是对http://zhangtielei.com/posts/blog-redlock-reasoning-part2.html文章的个人归纳,如有问题请联系删除 什么是redlock redlo ...