您的位置:首页 > 数据库 > Redis

使用k8s部署springboot+redis简单应用

2020-12-07 22:25 756 查看

准备

本文将使用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大神。

来都来了,关注一波再溜呗。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: