7.3 k8s部署Spring Cloud应用


文章目录

  • 1.打包项目
  • 2.构建镜像
    • 2.1 构建镜像
    • 2.2 构建jdk镜像
    • 2.3 构建eureka镜像
    • 2.4 构建item-service 镜像
    • 2.5 构建 user-service 镜像
    • 2.6 构建 order-service 镜像
    • 2.7 导出镜像,再导入其他服务器
  • 3.部署
    • 3.1 部署eureka
    • 3.2 部署rs, rs会自动创建容器,启动eureka服务器
    • 3.3 部署 service, 对外暴露eureka访问
    • 3.4 执行部署
    • 3.5 部署item-service
    • 3.6 部署user-service
    • 3.7 部署order-service
    • 3.8 对外暴露order服务,进行测试


1.打包项目

我们打包我们的京淘项目,将其打为jar包后使用,这里只导入前5个项目即可:

修改2,3,4,5项目的yml配置,添加相应配置,使用ip注册

eureka:
  instance:
    prefer-ip-address: true

按项目顺序执行:

  • 右键 – run as – maven build…
  • Goals: install
  • 勾选 Skip Tests.

创建四个空文件夹,将2,3,4,5四个项目的jar文件复制到四个文件夹中:

  • eureka
  • item
  • user
  • order

或者直接下载使用准备好的文件:
7.3 k8s部署Spring Cloud应用_第1张图片

将其上传到我们191服务器的 /root 目录下:
7.3 k8s部署Spring Cloud应用_第2张图片

2.构建镜像

2.1 构建镜像

centos7-docker-image.gz 复制到服务器并导入

2.2 构建jdk镜像

  1. 新建文件夹 jdk, 复制jdk-8u212-linux-x64.tar.gz到jdk目录(如果直接使用下载的文件则跳过此步骤)
  2. 在 jdk目录创建 Dockerfile 文件(如果直接使用下载的文件则跳过此步骤)
cat <<EOF > Dockerfile
FROM centos:7
ADD jdk-8u212-linux-x64.tar.gz /opt/
ENV JAVA_HOME=/opt/jdk1.8.0_212 \
    PATH=$PATH:/opt/jdk1.8.0_212/bin:/usr/tomcat/bin
ENTRYPOINT bash
EOF
  1. 构建镜像
cd ~/
docker build -t centos7-jdk8:v1 jdk/

2.3 构建eureka镜像

进入eureka目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)

cat <<EOF > Dockerfile
FROM centos7-jdk8:v1
COPY sp05-eureka-0.0.1-SNAPSHOT.jar /opt/
ENTRYPOINT ["java", "-jar", "/opt/sp05-eureka-0.0.1-SNAPSHOT.jar"]
CMD ["--spring.profiles.active=eureka1", "--server.port=2001"]
EOF

构建镜像

cd ~/
docker build -t sp-eureka:v1 eureka/

2.4 构建item-service 镜像

进入item目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)

cat <<EOF > Dockerfile
FROM centos7-jdk8:v1
COPY sp02-itemservice-0.0.1-SNAPSHOT.jar /opt/
ENTRYPOINT ["java", "-jar", "/opt/sp02-itemservice-0.0.1-SNAPSHOT.jar"]
EOF

构建镜像

cd ~/
docker build -t sp-item:v1 item/

2.5 构建 user-service 镜像

进入user目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)

cat <<EOF > Dockerfile
FROM centos7-jdk8:v1
COPY sp03-userservice-0.0.1-SNAPSHOT.jar /opt/
ENTRYPOINT ["java", "-jar", "/opt/sp03-userservice-0.0.1-SNAPSHOT.jar"]
EOF

构建镜像

cd ~/
docker build -t sp-user:v1 user/

2.6 构建 order-service 镜像

进入docker目录,创建构建文件(如果直接使用下载的文件则跳过此步骤)

cat <<EOF > Dockerfile
FROM centos7-jdk8:v1
COPY sp04-orderservice-0.0.1-SNAPSHOT.jar /opt/
ENTRYPOINT ["java", "-jar", "/opt/sp04-orderservice-0.0.1-SNAPSHOT.jar"]
EOF

构建镜像

cd ~/
docker build -t sp-order:v1 user/

2.7 导出镜像,再导入其他服务器

正常情况下,我们的镜像文件需要放到仓库上,当需要启动时,我们的服务器连接仓库进行镜像下载,然后进行启动;因为我们没有配置仓库,所以这里手动复制容器到服务器;

docker save \
        centos7-jdk8:v1 \
        sp-eureka:v1 \
        sp-item:v1 \
        sp-user:v1 \
        sp-order:v1 \
        | gzip > img.gz

# 将文件复制到 192 和 193
scp img.gz 192.168.64.192:/root/

scp img.gz 192.168.64.193:/root/
# 在 192 和 193 执行导入 docker load -i img.gz
ssh 192.168.64.192 'docker load -i /root/img.gz'

ssh 192.168.64.193 'docker load -i /root/img.gz'

# 查看 192 和 193 的镜像列表
ssh 192.168.64.192 'docker images'

ssh 192.168.64.193 'docker images'

3.部署

3.1 部署eureka

用rs部署容器, 先创建rs部署描述文件,分别使用俩个控制器来分别创建俩个不同配置的Eureka;

cat <<EOF > eureka1-rs.yml
apiVersion: apps/v1              # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet                 # 资源类型
metadata:
  name: eureka1                    # RS 命名为 eureka1
spec:
  replicas: 1                    # pod 副本数量
  selector:
    matchLabels:                 # 使用 label 选择器
      app: eureka1                 # 选取标签是 "app=eureka1" 的pod
  template:
    metadata:
      labels:
        app: eureka1               # 为创建的pod添加标签 "app=eureka1"
    spec:
      containers:
      - name: eureka1             # 容器名
        image: sp-eureka:v1       # 镜像
        ports:
        - containerPort: 2001    # 容器暴露的端口
          protocol: TCP
EOF
cat <<EOF > eureka2-rs.yml
apiVersion: apps/v1              # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet                 # 资源类型
metadata:
  name: eureka2                    # RS 命名为 eureka2
spec:
  replicas: 1                    # pod 副本数量
  selector:
    matchLabels:                 # 使用 label 选择器
      app: eureka2                 # 选取标签是 "app=eureka2" 的pod
  template:
    metadata:
      labels:
        app: eureka2               # 为创建的pod添加标签 "app=eureka2"
    spec:
      containers:
      - name: eureka2             # 容器名
        image: sp-eureka:v1       # 镜像
        args: ["--spring.profiles.active=eureka2", "--server.port=2002"]
        ports:
        - containerPort: 2002    # 容器暴露的端口
          protocol: TCP
EOF

3.2 部署rs, rs会自动创建容器,启动eureka服务器

k create -f eureka1-rs.yml
k create -f eureka2-rs.yml

3.3 部署 service, 对外暴露eureka访问

这里我们只暴露一个eureka服务器进行测试

cat <<EOF > eureka1-svc.yml
apiVersion: v1
kind: Service
metadata:
  name: eureka1
spec:
  type: NodePort           # 在每个节点上开放访问端口
  ports:
  - port: 2001               # 集群内部访问该服务的端口
    targetPort: 2001       # 容器的端口
    nodePort: 30123        # 外部访问端口
  selector:
    app: eureka1
EOF
cat <<EOF > eureka2-svc.yml
apiVersion: v1
kind: Service
metadata:
  name: eureka2
spec:
  type: NodePort           # 在每个节点上开放访问端口
  ports:
  - port: 2002              # 集群内部访问该服务的端口
    targetPort: 2002       # 容器的端口
    nodePort: 30124        # 外部访问端口
  selector:
    app: eureka2
EOF

3.4 执行部署

k create -f eureka1-svc.yml
k create -f eureka2-svc.yml

7.3 k8s部署Spring Cloud应用_第3张图片

部署后访问测试:

  • http://192.168.64.191:30123/
  • http://192.168.64.191:30124/

7.3 k8s部署Spring Cloud应用_第4张图片

3.5 部署item-service

cat <<EOF > item-rs.yml
apiVersion: apps/v1              # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet                 # 资源类型
metadata:
  name: item                    # RS 命名为 item
spec:
  replicas: 1                    # pod 副本数量
  selector:
    matchLabels:                 # 使用 label 选择器
      app: item                 # 选取标签是 "app=item" 的pod
  template:
    metadata:
      labels:
        app: item               # 为创建的pod添加标签 "app=item"
    spec:
      containers:
      - name: item             # 容器名
        image: sp-item:v1       # 镜像
EOF
k create -f item-rs.yml

3.6 部署user-service

cat <<EOF > user-rs.yml
apiVersion: apps/v1              # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet                 # 资源类型
metadata:
  name: user                    # RS 命名为 user
spec:
  replicas: 1                    # pod 副本数量
  selector:
    matchLabels:                 # 使用 label 选择器
      app: user                 # 选取标签是 "app=user" 的pod
  template:
    metadata:
      labels:
        app: user               # 为创建的pod添加标签 "app=user"
    spec:
      containers:
      - name: user             # 容器名
        image: sp-user:v1       # 镜像
EOF
k create -f user-rs.yml

3.7 部署order-service

cat <<EOF > order-rs.yml
apiVersion: apps/v1              # RS 是 apps/v1中提供的资源类型
kind: ReplicaSet                 # 资源类型
metadata:
  name: order                    # RS 命名为 order
spec:
  replicas: 1                    # pod 副本数量
  selector:
    matchLabels:                 # 使用 label 选择器
      app: order                 # 选取标签是 "app=order" 的pod
  template:
    metadata:
      labels:
        app: order               # 为创建的pod添加标签 "app=order"
    spec:
      containers:
      - name: order             # 容器名
        image: sp-order:v1       # 镜像
EOF
k create -f order-rs.yml

此时我们已经可以实现集群内部的订单访问:
7.3 k8s部署Spring Cloud应用_第5张图片

3.8 对外暴露order服务,进行测试

cat <<EOF > order-svc.yml
apiVersion: v1
kind: Service
metadata:
  name: order
spec:
  type: NodePort           # 在每个节点上开放访问端口
  ports:
  - port: 8201              # 集群内部访问该服务的端口
    targetPort: 8201       # 容器的端口
    nodePort: 30201        # 外部访问端口
  selector:
    app: order
EOF
k create -f order-svc.yml

对外暴露服务后,我们在集群内部直接调用订单服务,通过订单调用商品等服务;

7.3 k8s部署Spring Cloud应用_第6张图片

你可能感兴趣的:(零基础入门到就业--JAVA篇,kubernetes,spring,cloud,容器)