k8s学习实践--迁移自己的springcloud微服务项目到k8s

最近入职了新公司,项目用到以前没用到的k8s,k8s学习实践系列记录一下我的学习demo吧。

背景

我已经有了k8s集群,上面做了mysql并支持持久化存储(PVC+PV+NFS),现在要迁移自己的服务到k8s集群中,并使用k8s中的mysql服务。mysql服务之前那篇文章已经搭好了。

由于我的是springcloud微服务应用,使用了spring consul注册中心,迁移时还需要迁移注册中心。

实现步骤

1.本地测试

1.1测试k8s的mysql服务连通性

使用centos ip+port测试是否程序是否可连接k8s的mysql服务
(1)查询k8s的mysql服务port

[root@m bootstrap-k8s]# kubectl get svc -n bootstrap-k8s
NAME              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
bootstrap-mysql   ClusterIP   10.111.182.202   <none>        3307/TCP         2d14h
mysql             NodePort    10.111.185.243   <none>        3308:31266/TCP   16h

本地测试先使用ip方式,后续上了集群再使用k8s service name方式访问。
(2)修改本地配置文件

# datasource
spring.datasource.url = jdbc:mysql://192.168.209.128:31266/bootstrap?useSSL=false&allowPublicKeyRetrieval=true&autoReconnect=true&serverTimezone=Asia/Shanghai
spring.datasource.username = root
spring.datasource.password = Cc123456#

# 是否启用consul
spring.cloud.consul.enabled = true 
spring.cloud.consul.host = 192.168.209.128
spring.cloud.consul.port = 8500

(3)启动本地服务,测试访问正常
在这里插入图片描述

1.2测试application.properties后续使用configMap

上一步正常访问后通过maven打成jar包,将application.properties复制到与jar包同级目录
在这里插入图片描述
使用java -jar bootstrap-0.0.1-SNAPSHOT.jar -Dspring.config.location=./application.properties命令启动服务,访问http://localhost:8012/test/testMybatis,成功即可。后续迁移到k8s就使用这种方式进行使用application.properties。
在这里插入图片描述
这一步主要是方便我们迁移到k8s以后修改数据库配置。端口号这里修改只是为了有没有起效果,后续端口yaml文件还是要和properties中一样的,否则服务启动起来访问不了。

2.将应用程序做成镜像并推送至仓库

因为我之前推送过,以免混淆,此次全部用2.0版本
(1)上传jar包和application.properties文件
在这里插入图片描述
(2)Dockerfile并生成镜像

[root@m application]# vi Dockerfile 
FROM openjdk:8-jre-alpine
COPY bootstrap-0.0.2-SNAPSHOT.jar /bootstrap-0.0.2.jar
ENTRYPOINT ["java","-jar","/bootstrap-0.0.2.jar"]

[root@m application]# docker build -t cclady/bootstrap-k8s-image:v2.0 .
Sending build context to Docker daemon  49.14MB
Step 1/3 : FROM openjdk:8-jre-alpine
 ---> f7a292bbb70c
Step 2/3 : COPY bootstrap-0.0.2-SNAPSHOT.jar /bootstrap-0.0.2.jar
 ---> f11a70569a02
Step 3/3 : ENTRYPOINT ["java","-jar","/bootstrap-0.0.2.jar"]
 ---> Running in d27e4bb458c8
Removing intermediate container d27e4bb458c8
 ---> 0b65505d8144
Successfully built 0b65505d8144
Successfully tagged cclady/bootstrap-k8s-image:v2.0

(3)推送镜像至仓库

[root@m application]# docker login
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@m application]# docker push cclady/bootstrap-k8s-image:v2.0
The push refers to repository [docker.io/cclady/bootstrap-k8s-image]
33791b63d729: Pushed 
edd61588d126: Layer already exists 
9b9b7f3d56a0: Layer already exists 
f1b5933fe4b5: Layer already exists 
v2.0: digest: sha256:fff4195d70e557bcf732136ef7a1cd2418f809f7e9d870d3435587b5672c757f size: 1159

3.编写注册中心资源文件并创建资源

(1)我们先手动docker run一个consul

docker run -d --net=host -e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' consul 

(2)然后去查看它的详情信息,这样帮助我们写k8s资源的yaml文件

[root@m application]# docker ps -a | grep consul
66649880b8b2        consul                 "docker-entrypoint.s…"   About a minute ago   Up About a minute                                    quirky_taussig
[root@m application]# docker inspect 66649880b8b2
[
    {
   
        "Id": "66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580",
        "Created": "2021-07-22T09:08:22.990798553Z",
        "Path": "docker-entrypoint.sh",
        "Args": [
            "agent",
            "-dev",
            "-client",
            "0.0.0.0"
        ],
        "State": {
   
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 64039,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-07-22T09:08:23.223065956Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:0846dc12365b73e2ffe2eb25541c30f1580d16b4ed424643f58975f3deae3ab0",
        "ResolvConfPath": "/var/lib/docker/containers/66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580/hostname",
        "HostsPath": "/var/lib/docker/containers/66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580/hosts",
        "LogPath": "/var/lib/docker/containers/66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580/66649880b8b2beb8bbab9dd37968f7a5b115dcc42c895aa1a2df3421a050a580-json.log",
        "Name": "/quirky_taussig",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel":
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值