kubernetes-x/kubernetes-MD/利用kubernetes部署微服务项目.md

19 KiB
Raw Blame History

利用kubernetes部署微服务项目

著作:行癫 <盗版必究>


一:环境准备

1.kubernetes集群环境

集群环境检查

[root@master ~]# kubectl get node
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   11d   v1.23.1
node-1   Ready    <none>                 11d   v1.23.1
node-2   Ready    <none>                 11d   v1.23.1
node-3   Ready    <none>                 11d   v1.23.1

2.harbor环境

harbor环境检查

image-20220508222722564

二:项目准备

1.项目包

2.项目端口准备

服务 内部端口 外部端口
tensquare_eureka_server 10086 30020
tensquare_zuul 10020 30021
tensquare_admin_service 9001 30024
tensquare_gathering 9002 30022
mysql 3306 30023

三:项目部署

1.eureka部署

application.yml文件修改

spring:
  application:
    name: EUREKA-HA

---
#单机配置
server:
  port: 10086

eureka:
  instance:
    hostname: localhost
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
      #defaultZone: http://pod主机名称.service名称:端口/eureka/

Dockerfile创建

[root@nfs-harbor jdk]# ls
Dockerfile  tensquare_eureka_server-1.0-SNAPSHOT.jar  jdk-8u211-linux-x64.tar.gz 
[root@nfs-harbor jdk]# cat Dockerfile
FROM xingdian
MAINTAINER "xingdian" <xingdian@gmail.com>
ADD jdk-8u211-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_211 /usr/local/java
ENV JAVA_HOME /usr/local/java/
ENV PATH $PATH:$JAVA_HOME/bin
COPY tensquare_eureka_server-1.0-SNAPSHOT.jar /usr/local
EXPOSE 10086
CMD java -jar /usr/local/tensquare_eureka_server-1.0-SNAPSHOT.jar

镜像构建:

[root@nfs-harbor jdk]# docker build -t eureka:v2022.1 .

上传到镜像仓库:

[root@nfs-harbor jdk]# docker tag eureka:v2022.1 10.0.0.230/xingdian/eureka:v2022.1
[root@nfs-harbor jdk]# docker push 10.0.0.230/xingdian/eureka:v2022.1

仓库验证:

image-20220508224930884

2.tensquare_zuul部署

Dockerfile创建

[root@nfs-harbor jdk]# cat Dockerfile
FROM xingdian
MAINTAINER "xingdian" <xingdian@gmail.com>
ADD jdk-8u211-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_211 /usr/local/java
ENV JAVA_HOME /usr/local/java/
ENV PATH $PATH:$JAVA_HOME/bin
COPY tensquare_zuul-1.0-SNAPSHOT.jar /usr/local
EXPOSE 10020
CMD java -jar /usr/local/tensquare_zuul-1.0-SNAPSHOT.jar

镜像构建:

[root@nfs-harbor jdk]# docker build -t zuul:v2022.1 .

镜像上传:

[root@nfs-harbor jdk]# docker tag zuul:v2022.1 10.0.0.230/xingdian/zuul:v2022.1
[root@nfs-harbor jdk]# docker push 10.0.0.230/xingdian/zuul:v2022.1

仓库验证:

image-20220508230055752

注意:

在构建之前使用vim修改源码jar包修改的内容如下文件application.yml

server:
  port: 10020 # 端口
  
# 基本服务信息
spring:
  application:
    name: tensquare-zuul # 服务ID
    
# Eureka配置
eureka:
  client:
    service-url:  
      #defaultZone: http://192.168.66.103:10086/eureka,http://192.168.66.104:10086/eureka # Eureka访问地址
      #tensquare_eureka_server地址和端口(修改)
      defaultZone: http://10.0.0.220:30020/eureka
  instance:
    prefer-ip-address: true
  
# 修改ribbon的超时时间
ribbon:
  ConnectTimeout: 1500 # 连接超时时间默认500ms
  ReadTimeout: 3000  # 请求超时时间默认1000ms
  
  
# 修改hystrix的熔断超时时间
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMillisecond: 2000 # 熔断超时时长默认1000ms
            

# 网关路由配置
zuul:
  routes:
    admin:
      path: /admin/**
      serviceId: tensquare-admin-service
    gathering:
          path: /gathering/**
          serviceId: tensquare-gathering

 # jwt参数
jwt:
  config:
    key: itcast
    ttl: 1800000

3.mysql部署

镜像获取(使用官方镜像):

[root@nfs-harbor mysql]# docker pull mysql:5.7.38

镜像上传:

[root@nfs-harbor mysql]# docker tag mysql:5.7.38 10.0.0.230/xingdian/mysql:v1
[root@nfs-harbor mysql]# docker push 10.0.0.230/xingdian/mysql:v1

4.admin_service部署

Dockerfile创建

[root@nfs-harbor jdk]# cat Dockerfile
FROM xingdian
MAINTAINER "xingdian" <xingdian@gmail.com>
ADD jdk-8u211-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_211 /usr/local/java
ENV JAVA_HOME /usr/local/java/
ENV PATH $PATH:$JAVA_HOME/bin
COPY tensquare_admin_service-1.0-SNAPSHOT.jar /usr/local
EXPOSE 9001
CMD java -jar /usr/local/tensquare_admin_service-1.0-SNAPSHOT.jar

镜像构建:

[root@nfs-harbor jdk]# docker build -t admin_service:v2022.1 .

镜像上传:

[root@nfs-harbor jdk]# docker tag admin_service:v2022.1 10.0.0.230/xingdian/admin_service:v2022.1
[root@nfs-harbor jdk]# docker push 10.0.0.230/xingdian/admin_service:v2022.1

注意:

在构建之前使用vim修改源码jar包修改的内容如下文件application.yml

spring: 
  application:  
    name: tensquare-admin-service #指定服务名
  datasource:  
    driverClassName: com.mysql.jdbc.Driver
    #数据库地址(修改)
    url: jdbc:mysql://10.0.0.220:30023/tensquare_user?characterEncoding=UTF8&useSSL=false
    #数据库账户名(修改)
    username: root
    #数据库账户密码(修改)
    password: mysql
  jpa: 
    database: mysql
    show-sql: true

#Eureka配置
eureka:
  client:
    service-url:
      #defaultZone: http://192.168.66.103:10086/eureka,http://192.168.66.104:10086/eureka
      ##tensquare_eureka_server地址和端口(修改)
      defaultZone: http://10.0.0.220:30020/eureka
  instance:
    lease-renewal-interval-in-seconds: 5 # 每隔5秒发送一次心跳
    lease-expiration-duration-in-seconds: 10 # 10秒不发送就过期
    prefer-ip-address: true


 # jwt参数
jwt:
  config:
    key: itcast
    ttl: 1800000

5.gathering部署

Dockerfile创建

[root@nfs-harbor jdk]# cat Dockerfile
FROM xingdian
MAINTAINER "xingdian" <xingdian@gmail.com>
ADD jdk-8u211-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_211 /usr/local/java
ENV JAVA_HOME /usr/local/java/
ENV PATH $PATH:$JAVA_HOME/bin
COPY tensquare_gathering-1.0-SNAPSHOT.jar /usr/local
CMD java -jar /usr/local/tensquare_gathering-1.0-SNAPSHOT.jar

镜像构建:

[root@nfs-harbor jdk]# docker build -t gathering:v2022.1 .

镜像上传:

[root@nfs-harbor jdk]# docker tag gathering:v2022.1 10.0.0.230/xingdian/gathering:v2022.1
[root@nfs-harbor jdk]# docker push 10.0.0.230/xingdian/gathering:v2022.1

仓库验证:

image-20220508233621370

注意:

server: 
  port: 9002
spring: 
  application:  
    name: tensquare-gathering #指定服务名
  datasource:  
    driverClassName: com.mysql.jdbc.Driver
    #数据库地址(修改)
    url: jdbc:mysql://10.0.0.220:30023/tensquare_gathering?characterEncoding=UTF8&useSSL=false
    #数据库地址(修改)
    username: root
    #数据库账户密码(修改)
    password: mysql
  jpa: 
    database: mysql
    show-sql: true
#Eureka客户端配置
eureka:
  client:
    service-url:
      #defaultZone: http://192.168.66.103:10086/eureka,http://192.168.66.104:10086/eureka
      #tensquare_eureka_server地址和端口(修改)
      defaultZone: http://10.0.0.220:30020/eureka
  instance:
    lease-renewal-interval-in-seconds: 5 # 每隔5秒发送一次心跳
    lease-expiration-duration-in-seconds: 10 # 10秒不发送就过期
    prefer-ip-address: true

kubernetes集群部署

1.所有镜像验证

image-20220508233955412

2.部署eureka

Eureka之Deployment创建

[root@master xingdian]# cat Eureka.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: eureka-deployment
  labels:
    app: eureka
spec:
  replicas: 1
  selector:
    matchLabels:
      app: eureka
  template:
    metadata:
      labels:
        app: eureka
    spec:
      containers:
      - name: nginx
        image: 10.0.0.230/xingdian/eureka:v2022.1
        ports:
        - containerPort: 10086
---
apiVersion: v1
kind: Service
metadata:
  name: eureka-service
  labels:
    app: eureka
spec:
  type: NodePort
  ports:
  - port: 10086
    name: eureka
    targetPort: 10086
    nodePort: 30020
  selector:
    app: eureka

创建:

[root@master xingdian]# kubectl create -f Eureka.yaml
deployment.apps/eureka-deployment created
service/eureka-service created

验证:

[root@master xingdian]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
eureka-deployment-69c575d95-hx8s6   1/1     Running   0          2m20s
[root@master xingdian]# kubectl get svc
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
eureka-service   NodePort    10.107.243.240   <none>        10086:30020/TCP   2m22s
image-20220508235409218

3.部署zuul

zuul之Deployment创建

[root@master xingdian]# cat Zuul.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: zuul-deployment
  labels:
    app: zuul
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zuul
  template:
    metadata:
      labels:
        app: zuul
    spec:
      containers:
      - name: zuul
        image: 10.0.0.230/xingdian/zuul:v2022.1
        ports:
        - containerPort: 10020
---
apiVersion: v1
kind: Service
metadata:
  name: zuul-service
  labels:
    app: zuul
spec:
  type: NodePort
  ports:
  - port: 10020
    name: zuul
    targetPort: 10086
    nodePort: 30021
  selector:
    app: zuul

创建:

[root@master xingdian]# kubectl create -f Zuul.yaml

验证:

[root@master xingdian]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
eureka-deployment-69c575d95-hx8s6   1/1     Running   0          7m42s
zuul-deployment-6d76647cf9-6rmdj    1/1     Running   0          10s
[root@master xingdian]# kubectl get svc
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
eureka-service   NodePort    10.107.243.240   <none>        10086:30020/TCP   7m37s
kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP           11d
zuul-service     NodePort    10.103.35.255    <none>        10020:30021/TCP   5s

验证是否加入注册中心:

image-20220508235634459

4.mysql部署

mysql之rc和svc创建

[root@master mysql]# cat mysql-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
  labels:
    name: mysql-svc
spec:
  type: NodePort
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
    name: http
    nodePort: 30023
  selector:
    name: mysql-pod
[root@master mysql]# cat mysql-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
  name: mysql-rc
  labels:
    name: mysql-rc
spec:
  replicas: 1
  selector:
    name: mysql-pod
  template:
    metadata:
      labels:
        name: mysql-pod
    spec:
      containers:
      - name: mysql
        image: 10.0.0.230/xingdian/mysql:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "mysql"

创建:

[root@master mysql]# kubectl create -f mysql-rc.yaml
replicationcontroller/mysql-rc created
[root@master mysql]# kubectl create -f mysql-svc.yaml
service/mysql-svc created

验证:

[root@master mysql]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
eureka-deployment-69c575d95-hx8s6   1/1     Running   0          29m
mysql-rc-sbdcl                      1/1     Running   0          8m41s
zuul-deployment-6d76647cf9-gpsms    1/1     Running   0          21m
[root@master mysql]# kubectl get svc
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
eureka-service   NodePort    10.107.243.240   <none>        10086:30020/TCP   29m
kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP           11d
mysql-svc        NodePort    10.98.4.62       <none>        3306:30023/TCP    9m1s
zuul-service     NodePort    10.103.35.255    <none>        10020:30021/TCP   22m

数据库创建:

[root@nfs-harbor ~]# mysql -u root -pmysql -h 10.0.0.220 -P 30023
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> create database tensquare_user charset=utf8;
Query OK, 1 row affected (0.00 sec)

MySQL [(none)]> create database tensquare_gathering charset=utf8;
Query OK, 1 row affected (0.01 sec)

MySQL [(none)]> exit
Bye

数据导入:

[root@nfs-harbor ~]# mysql -u root -pmysql -h 10.0.0.220 -P 30023
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> source /var/ftp/share/tensquare_user.sql

MySQL [tensquare_user]> source /var/ftp/share/tensquare_gathering.sql

MySQL [tensquare_gathering]> exit
Bye

验证:

[root@nfs-harbor ~]# mysql -u root -pmysql -h 10.0.0.220 -P 30023
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| mysql               |
| performance_schema  |
| sys                 |
| tensquare_gathering |
| tensquare_user      |
+---------------------+
6 rows in set (0.00 sec)

MySQL [(none)]> use tensquare_gathering
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [tensquare_gathering]> show tables;
+-------------------------------+
| Tables_in_tensquare_gathering |
+-------------------------------+
| tb_city                       |
| tb_gathering                  |
+-------------------------------+
2 rows in set (0.00 sec)

MySQL [tensquare_gathering]> use tensquare_user
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MySQL [tensquare_user]> show tables;
+--------------------------+
| Tables_in_tensquare_user |
+--------------------------+
| tb_admin                 |
+--------------------------+
1 row in set (0.01 sec)

5.admin_service部署

admin_service之Deployment创建

[root@master xingdian]# cat Admin-service.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: admin-deployment
  labels:
    app: admin
spec:
  replicas: 1
  selector:
    matchLabels:
      app: admin
  template:
    metadata:
      labels:
        app: admin
    spec:
      containers:
      - name: admin
        image: 10.0.0.230/xingdian/admin_service:v2022.1
        ports:
        - containerPort: 9001
---
apiVersion: v1
kind: Service
metadata:
  name: admin-service
  labels:
    app: admin
spec:
  type: NodePort
  ports:
  - port: 9001
    name: admin
    targetPort: 9001
    nodePort: 30024
  selector:
    app: admin

创建:

[root@master xingdian]# kubectl create -f Admin-service.yaml
deployment.apps/admin-deployment created
service/admin-service created

验证:

[root@master xingdian]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
admin-deployment-54c5664d69-l2lbc   1/1     Running   0          23s
eureka-deployment-69c575d95-mrj66   1/1     Running   0          47m
mysql-rc-zgxk4                      1/1     Running   0          7m23s
zuul-deployment-6d76647cf9-gpsms    1/1     Running   0          39m
[root@master xingdian]# kubectl get svc
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)           AGE
admin-service    NodePort    10.101.251.47    <none>        9001:30024/TCP    6s
eureka-service   NodePort    10.107.243.240   <none>        10086:30020/TCP   47m
kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP           11d
mysql-svc        NodePort    10.98.4.62       <none>        3306:30023/TCP    26m
zuul-service     NodePort    10.103.35.255    <none>        10020:30021/TCP   39m

注册中心验证:

image-20220509013257937

6.gathering部署

gathering之Deployment创建

[root@master xingdian]# cat Gathering.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: gathering-deployment
  labels:
    app: gathering
spec:
  replicas: 1
  selector:
    matchLabels:
      app: gathering
  template:
    metadata:
      labels:
        app: gathering
    spec:
      containers:
      - name: nginx
        image: 10.0.0.230/xingdian/gathering:v2022.1
        ports:
        - containerPort: 9002
---
apiVersion: v1
kind: Service
metadata:
  name: gathering-service
  labels:
    app: gathering
spec:
  type: NodePort
  ports:
  - port: 9002
    name: gathering
    targetPort: 9002
    nodePort: 30022
  selector:
    app: gathering

创建:

[root@master xingdian]# kubectl create -f  Gathering.yaml
deployment.apps/gathering-deployment created
service/gathering-service created

验证:

[root@master xingdian]# kubectl get pod
NAME                                  READY   STATUS    RESTARTS   AGE
admin-deployment-54c5664d69-2tqlw     1/1     Running   0          33s
eureka-deployment-69c575d95-xzx9t     1/1     Running   0          13m
gathering-deployment-6fcdd5d5-wbsxt   1/1     Running   0          27s
mysql-rc-zgxk4                        1/1     Running   0          28m
zuul-deployment-6d76647cf9-jkm7f      1/1     Running   0          12m

注册中心验证:

image-20220509005823566

7.浏览器测试API接口

image-20220509015035488