Kubernetes09:【多类型业务迁移】业务系统迁移Kubernetes:传统dubbo服务迁移kubernetes

一、代码如下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注意:这里dubbo的服务打包比较恶心,要加一堆插件执行打包,不像springboot那样比较简单。
在这里插入图片描述
在这里插入图片描述

二、把服务做到镜像中

0、主机打包测试运行下

我们到之前克隆好的项目目录下
在这里插入图片描述

执行打包命令

mvn package

在这里插入图片描述
注意,这里有报错,我们需要把这个dubbo-demo-api安装一下。

在这里插入图片描述

cd dubbo-demo-api/
mvn install

在这里插入图片描述

然后回到刚刚的目录。

cd ../
cd dubbo-demo
ls

在这里插入图片描述
再次执行打包命令

mvn package

在这里插入图片描述
在这里插入图片描述
查看输出了什么

cd target/
ll

在这里插入图片描述

使用jar命令看下

tar -tf dubbo-demo-1.0-SNAPSHOT-assembly.tar.gz

在这里插入图片描述
然后进行解压一下

tar -xvf dubbo-demo-1.0-SNAPSHOT-assembly.tar.gz
cd bin/
ls

在这里插入图片描述

运行一下

sh start.sh

在这里插入图片描述
去看下日志

cd ..
ls
cd logs/

在这里插入图片描述

less stdout.log

在这里插入图片描述
再看下端口

cd conf/
ls
vi dubbo.properties

在这里插入图片描述
端口是20880

netstat -ntlp|grep 20880

在这里插入图片描述

进行测试

telnet 10.155.20.50 20880

在这里插入图片描述
进入之后,输入如下命令可以测试

ls
ls com.mooc.demo.api.DemoService
invoke com.mooc.demo.api.DemoService.sayHello("Dick")
exit

在这里插入图片描述
然后,我们再去使用下停止的命令

sh stop.sh

在这里插入图片描述
测试下端口是不是没有了

netstat -ntlp|grep 20880

在这里插入图片描述

1、搞定基础镜像

我们这个服务也只用java的镜像就行了。
这个我们用之前推送到镜像仓库的镜像就行。

2、搞定服务运行的相关文件

就是我们打包生成的.tar.gz的文件

3、构建镜像

注意,我们这个文件是一个压缩包,我们要新建个目录,把压缩包移动到里面

mkdir ROOT
mv dubbo-demo-1.0-SNAPSHOT-assembly.tar.gz ROOT/
cd ROOT
ls
tar -xvf dubbo-demo-1.0-SNAPSHOT-assembly.tar.gz

在这里插入图片描述
在这里插入图片描述
删除压缩包

rm -f dubbo-demo-1.0-SNAPSHOT-assembly.tar.gz
ls

在这里插入图片描述
然后到这个目录写Dockerfile
在这里插入图片描述

vi Dockerfile

内容如下:

FROM hub.mooc.com/kubernetes/openjdk:8-jre-alpine

COPY target/ROOT /ROOT

ENTRYPOINT ["sh", "/ROOT/bin/start.sh"]

在这里插入图片描述
注意,我们要把start.sh的脚本修改一下,因为是后台运行,运行完就结束了,我们改成前台运行。

把红色框部分删掉
在这里插入图片描述
修改后如下:

在这里插入图片描述
stop.sh就不用修改了。

开始构建镜像

docker build -t dubbo:v1 .

在这里插入图片描述
我们发现有个报错
在这里插入图片描述
把 start.sh里,红色框区域全部删除。
在这里插入图片描述
删除后如下:
在这里插入图片描述
再次构建

docker build -t dubbo:v1 .

在这里插入图片描述
我们发现这个一直卡在这里,去看下脚本
因为这里把日志重定向了,可以去掉,也可以启动后到容器里看,这里我选择去掉。
在这里插入图片描述
去掉后如下:
在这里插入图片描述
再构建

docker build -t dubbo:v1 .

在这里插入图片描述
这里镜像就创建成功了,下面我们来docker run一下。

docker run -it dubbo:v1

在这里插入图片描述

将镜像推送到仓库里。

docker tagdubbo:v1 hub.mooc.com/kubernetes/dubbo:v1
docker push hub.mooc.com/kubernetes/dubbo:v1

在这里插入图片描述

三、制作k8s服务并调度

注意,dubbo的服务发现使用host模式,如果使用桥接的话,因为有个zookeeper,因容器的provider有个内部网段的ip,会把这个ip注册到zookeeper上,consumer会读这个provider内部网段的ip。。如果是集群内部是没问题的,如国是集群外的就无法访问。

在这里插入图片描述

如果非要使用桥接,可以在启动的时候设置环境变量,在环境变量指定宿主机的真实ip,但这个环境变量不好搞,如何在启动的时候拿到宿主机的ip也麻烦,所以只能在宿主机上写个文件挂载到容器中。
在这里插入图片描述
太麻烦,就不用这种了。

host也有一个问题,端口是直接启动在宿主机上的,如20880,如果后续还有其他的dubbo服务也是20880就冲突了。

在这里插入图片描述
所以使用host必须保证每个dubbo服务的端口不一样,我们使用k8s上用脚本实现。

在这里插入图片描述
在 start.sh中添加红色框区域

在这里插入图片描述

1、确定服务发现策略

dubbo.yaml的内容如下:

#deploy
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dubb-demo
spec:
  selector:
    matchLabels:
      app: dubb-demo
  replicas: 1
  template:
    metadata:
      labels:
        app: dubb-demo
    spec:
      hostNetwork: true
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - dubb-demo
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: dubb-demo
        image: hub.mooc.com/kubernetes/dubbo:v1
        ports:
        - containerPort: 20880

在这里插入图片描述

下面来apply一下

kubectl apply -f dubbo.yaml

在这里插入图片描述

看下是否启动了起来

kubectl get pods

在这里插入图片描述

kubectl get pods -o wide

在这里插入图片描述
运行在120上,上去看下端口是否被监听

netstat -ntlp|grep 20880

在这里插入图片描述

再测试下:

ls
ls com.mooc.demo.api.DemoService
invoke com.mooc.demo.api.DemoService.sayHello("Dick")
exit

在这里插入图片描述
下面我们再来试试定义一个环境变量
修改dubbo.yaml配置文件

在这里插入图片描述

下面来apply一下

kubectl apply -f dubbo.yaml

修改后如下:

在这里插入图片描述

注意要加双引号,不然会报错!!
在这里插入图片描述
在这里插入图片描述

再次apply

kubectl apply -f dubbo.yaml
kubectl get pods -o wide

在这里插入图片描述

kubectl get pods -o wide | grep dubb

在这里插入图片描述
去121上测试
在这里插入图片描述
测试

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40612128/article/details/123579414