Java SpringCloud 容器化

微服务项目启动时间长

因为引入了很多Spring Cloud中的组件,所以时间慢了
本来是写业务代码的,但是因为要处理很多微服务中的问题,不得已引入Spring Cloud各种组件,从而项目的体量变大了
(1)对业务代码的侵入性、耦合性比较强
(2)开发者而言,SC时间和精力成本还是比较大的
(3)一些互联网公司产品的升级是非常频繁的
(4)服务拆分的越细,只是感觉上解耦了,实际上维护的成本缺增加了——>网络的问题

微服务网格(Service Mesh)

prana(Netflix公司)、local proxy(唯品会)、linkerd——->某种意义上都和原有公司的业务强绑定,并不具备通用性

容器化部署

  1. 节约机器资源
  2. 方便服务迁移

    istio

    对于微服务的落地上线

    (1) 容器化
    (2) 容器编排:K8S
    (3) Service Mesh
    (4) Spring Cloud

    Docker

    Docker构建jar项目镜像

    1、将项目打包成jar

    2、编写DockerFile

    1. FROM openjdk:8
    2. COPY pay-service-0.0.1-SNAPSHOT.jar pay-service.jar
    3. CMD ["java", "-jar", "pay-service.jar"]

    3、执行Docker构建镜像命令

    :::info 该命令默认使用当前目录下的DockerFile :::
    1. docker build -t pay-service-image .
    image.png

    4、创建对应的镜像容器并启动

    1. docker run -d --name payservice01 -p 9090:8080 pay-service-image

    5、将本地镜像发布至阿里云镜像仓库

    在本地登录注册的阿里云镜像仓库
    1. $ sudo docker login --username=fcs****@gmail.com registry.cn-beijing.aliyuncs.com
    将镜像推送到Registry
    1. $ docker login --username=fcs****@gmail.com registry.cn-beijing.aliyuncs.com
    2. $ docker tag [ImageId] registry.cn-beijing.aliyuncs.com/fcant/save:[镜像版本号]
    3. $ docker push registry.cn-beijing.aliyuncs.com/fcant/save:[镜像版本号]
    从Registry中拉取镜像
    1. $ docker pull registry.cn-beijing.aliyuncs.com/fcant/save:[镜像版本号]

    Docker集群的管理

    Docker swarm

    Mesos

    Kubernetes

    image.png
    但是在K8s世界中,它不会直接操作container,而是会操作最小单元PodPod可以理解为是由一个或者多个container的组合。

    K3s:轻量级 Kubernetes

    https://k3s.io/
    image.png
    K3s的工作原理
    image.png

    MiniKube:搭建单机版的K8s集群的小工具

    image.png

    Kubeadm:搭建本地的多个节点的K8s集群

    Kubernetes上发布应用的流程

    1、编写yaml文件

    ```yaml apiVersion: apps/v1 kind: Deployment metadata:
    1. name: pay-service
    spec: selector: matchLabels:
    1. app: pay-service
    replicas: 2 template: metadata: labels:
    1. app: pay-service
    spec: containers:
    • name: pay-service image: registry.cn-hangzhou.aliyuncs.com/fcant-springcloud/pay-service-image ports:
      1. - containerPort: 8080

apiVersion: v1 kind: Service metadata: name: pay-service spec: ports:

  • port: 80 protocol: TCP targetPort: 8080 selector: app: pay-service type: NodePort
    1. <a name="ZArHR"></a>
    2. #### 2、应用该yaml文件
    3. ```bash
    4. kubectl apply -f pay-service.yaml

    3、查看创建的Pods

    1. kubectl get pods -w

    4、查看服务的情况

    1. kubectl get svc

    5、进行服务的扩缩容

    1. kubectl scale deploy pay-service --replicas=10

    Kubernetes Web管理控制台Dashboard部署查看

    1、使用官方提供的yaml文件创建Pod

    https://github.com/kubernetes/dashboard/blob/master/aio/deploy/recommended.yaml

    2、应用yaml配置

    1. kubectl apply -f recommended.yaml

    3、查看创建的Pods

    1. kubectl get pods -n kubernetes-dashboard

    4、查看服务的详情

    1. kubectl get svc -n kubernetes-dashboard

    5、查看登录Dashboard Token的命令

    1. kubectl describe secret -n kube-system ${ADMIN_SECRET} | grep -E '^token' | awk '{print $2}'

    MiniKube中启动Dashboard

    1. minikube dashboard