一: 传统部署和K8S部署的区别
传统部署-整体框架
K8S部署-整体框架
二: 安装Maria db并导入数据库
安装Maria db
# yum install mariadb-server mariadb -y
# systemctl start mariadb
# systemctl enable mariadb
# ps -ef|grep mariadb
mysql 14449 14287 0 Jun01 ? 00:01:34 /usr/libexec/mysqld --basedir=
/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=
/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
root 41610 41561 0 13:30 pts/1 00:00:00 grep --color=auto mariadb
#
检查服务端口
# netstat -ntlp|grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 14449/mysqld
#
# systemctl status mariadb
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-06-01 16:01:48 CST; 1 day 21h ago
创建数据库
# mysql -uroot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.65-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
MariaDB [(none)]>
MariaDB [(none)]> create database tb_order;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> create database tb_product;
Query OK, 1 row aff
MariaDB [(none)]> create database tb_order;
Query OK, 1 row aff
MariaDB [(none)]>
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| tb_order |
| tb_product |
| tb_stock |
+--------------------+
6 rows in set (0.01 sec)
MariaDB [(none)]>
将SQL导入到 数据库中
MariaDB [(none)]>
MariaDB [(none)]>
#将订单服务微服务组件数据导入到tb_order数据库中
MariaDB [(none)]> use tb_order;
Database changed
MariaDB [tb_order]> source /root/software/springcloud/simple-microservice-dev3/db/order.sql;
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
MariaDB [tb_order]>
#将产品服务微服务组件数据导入到tb_product数据库中
MariaDB [tb_order]>
MariaDB [tb_order]> use tb_product ;
Database changed
MariaDB [tb_product]> source /root/software/springcloud/simple-microservice-dev3/db/product.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected (0.02 sec)
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
MariaDB [tb_product]>
#将库存服务 微服务组件数据导入到 tb_stock数据库中
MariaDB [tb_product]> use tb_stock ;
Database changed
MariaDB [tb_stock]> source /root/software/springcloud/simple-microservice-dev3/db/stock.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 1 row affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
MariaDB [tb_stock]>
MariaDB [tb_stock]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [tb_stock]>
检查导入的数据
MariaDB [tb_stock]> show tables;
+--------------------+
| Tables_in_tb_stock |
+--------------------+
| stock |
+--------------------+
1 row in set (0.00 sec)
MariaDB [tb_stock]>
MariaDB [tb_stock]> use tb_product;
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
MariaDB [tb_product]> show tables;
+----------------------+
| Tables_in_tb_product |
+----------------------+
| product |
+----------------------+
1 row in set (0.00 sec)
MariaDB [tb_product]> use tb_order;
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
MariaDB [tb_order]> show tables;
+--------------------+
| Tables_in_tb_order |
+--------------------+
| orders |
+--------------------+
1 row in set (0.01 sec)
MariaDB [tb_order]>
三: 修改源代码连接数据的地址
修改连接数据库的配置文件
xxx-service/src/main/resources/application-fat.yml
例如 产品服务组件,其它
组件方法是一样的
# product-service/product-service-biz/src/main/resources
# cat application-dev.yml
spring:
datasource:
url: jdbc:mysql://100.100.100.16:3306/tb_product?characterEncoding=utf-8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
eureka:
instance:
prefer-ip-address: false
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8888/eureka
# cat application-fat.yml
spring:
datasource:
url: jdbc:mysql://100.100.100.16:3306/tb_product?characterEncoding=utf-8
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
eureka:
instance:
prefer-ip-address: true
client:
register-with-eureka: true
fetch-registry: true
service-url:
#
四: 构建环境并将镜像打包到镜像仓库
需要具备 MVN 和jdk 环境
安装JDK
#
#
# yum install java-1.8.0-openjdk -y
# rpm -qa|grep openjdk
java-1.8.0-openjdk-headless-1.8.0.252.b09-2.el7_8.x86_64
java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64
java-1.8.0-openjdk-devel-1.8.0.252.b09-2.el7_8.x86_64
安装MVN
#yum install -y maven
# rpm -qa|grep maven
maven-wagon-2.4-3.el7.noarch
maven-3.0.5-17.el7.noarch
#
使用mvn 命令进行打包镜像;
微服务组件打包成镜像
mvn clean(清除上次打包的结果)
package(打包,打成java包)
-D maven.test.skip=true(跳过单元测试,好多单元测试是有问题的,导致过不去)
# mvn clean package -Dmaven.test.skip=true
Reactor Summary:
[INFO]
[INFO] simple-microservice ............................... SUCCESS [0.105s]
[INFO] basic-common ...................................... SUCCESS [0.002s]
[INFO] basic-common-core ................................. SUCCESS [2.515s]
[INFO] gateway-service ................................... SUCCESS [1.335s]
[INFO] eureka-service .................................... SUCCESS [0.557s]
[INFO] product-service ................................... SUCCESS [0.001s]
[INFO] product-service-api ............................... SUCCESS [0.410s]
[INFO] stock-service ..................................... SUCCESS [0.001s]
[INFO] stock-service-api ................................. SUCCESS [0.414s]
[INFO] product-service-biz ............................... SUCCESS [0.543s]
[INFO] stock-service-biz ................................. SUCCESS [0.459s]
[INFO] order-service ..................................... SUCCESS [0.001s]
[INFO] order-service-api ................................. SUCCESS [0.689s]
[INFO] order-service-biz ................................. SUCCESS [0.485s]
[INFO] basic-common-bom .................................. SUCCESS [0.001s]
[INFO] portal-service .................................... SUCCESS [0.972s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.060s
[INFO] Finished at: Wed Jun 03 10:03:58 CST 2020
[INFO] Final Memory: 80M/661M
[INFO] ------------------------------------------------------------------------
#
打包成功后,会在每个微服务组件的目录产生一个target目录 产生一个jar 文件
打包镜像并推送到镜像仓库
# cat docker_build.sh
#!/bin/bash
docker_registry=100.100.100.11 //镜像仓库
service_list="eureka-service gateway-service order-service product-service stock-service portal-service"
service_list=${1:-${service_list}}
work_dir=$(dirname $PWD)
current_dir=$PWD
cd $work_dir
mvn clean package -Dmaven.test.skip=true
for service in $service_list; do
cd $work_dir/$service
if ls |grep biz &>/dev/null; then
cd ${service}-biz
fi
service=${service%-*}
image_name=$docker_registry/microservice/${service}:$(date +%F-%H-%M-%S)
docker build -t ${image_name} .
docker push ${image_name}
done
#
执行 打包镜像角本
#
# docker login 100.100.100.11
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
#
# ./docker_build.sh
-----------------------------------------------------------------------
--------------------------------------------------------------------
#
已推送到镜像仓库
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
100.100.100.11/microservice/portal 2020-06-03-10-16-07 80b8138d66a0 About a minute ago 209MB
100.100.100.11/microservice/stock 2020-06-03-10-15-57 f76961fdf409 About a minute ago 212MB
100.100.100.11/microservice/product 2020-06-03-10-15-49 52a23d278a40 About a minute ago 212MB
100.100.100.11/microservice/order 2020-06-03-10-15-42 4954a674cd38 About a minute ago 212MB
100.100.100.11/microservice/gateway 2020-06-03-10-15-35 e28dc69a7e8c About a minute ago 209MB
100.100.100.11/microservice/eureka 2020-06-03-10-15-19 3d6507548335 2 minutes ago 213MB
五: 在K8S平台部署 eureka集群
Eureka 注册中心代码
# cat eureka.yaml
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: eureka
namespace: ms
spec:
rules:
- host: eureka.ctnrs.com
http:
paths:
- path: /
backend:
serviceName: eureka
servicePort: 8888
---
apiVersion: v1
kind: Service
metadata:
name: eureka
namespace: ms
spec:
clusterIP: None
ports:
- port: 8888
name: eureka
selector:
project: ms
app: eureka
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: eureka
namespace: ms
spec:
replicas: 3
selector:
matchLabels:
project: ms
app: eureka
serviceName: "eureka"
template:
metadata:
labels:
project: ms
app: eureka
spec:
imagePullSecrets:
- name: registry-pull-secret
containers:
- name: eureka
image: 100.100.100.11/microservice/eureka:2020-06-01-15-03-49
ports:
- protocol: TCP
containerPort: 8888
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
resources:
requests:
cpu: 0.5
memory: 256Mi
limits:
cpu: 1
memory: 1Gi
readinessProbe:
tcpSocket:
port: 8888
initialDelaySeconds: 60
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 8888
initialDelaySeconds: 60
periodSeconds: 10
[root@node-16 k8s]#
创建一个namespace
#
# kubectl create ns ms;
namespace/ms created
#
# kubectl get ns|grep ms
ms Active 57s
#
[root@node-16 k8s]#
创建secret认证
# kubectl create secret docker-registry registry-pull-secret --docker-server=100.100.100.11 /
--docker-username=admin --docker-password=123456 --docker-email=admin@test.com -n ms
secret/registry-pull-secret created
部署eruka集群
# kubectl apply -f eureka.yaml
ingress.extensions/eureka created
service/eureka created
statefulset.apps/eureka created
#
Eureka 是有状态的部署的,会一个个启用,先启用 eureka-0
# kubectl get pod -n ms
NAME READY STATUS RESTARTS AGE
eureka-0 1/1 Running 0 86s
eureka-1 0/1 Running 0 11s
# kubectl get pod -n ms -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
eureka-0 1/1 Running 0 2m32s 10.244.1.51 node-17 <none> <none>
eureka-1 1/1 Running 0 77s 10.244.0.35 node-18 <none> <none>
eureka-2 0/1 Running 0 5s 10.244.2.57 node-16 <none> <none>#
验证Eureka解析
# kubectl exec -it eureka-0 sh -n ms
/ # nslookup eureka
nslookup: can't resolve '(null)': Name does not resolve
Name: eureka
Address 1: 10.244.1.51 eureka-0.eureka.ms.svc.cluster.local
Address 2: 10.244.0.35 eureka-1.eureka.ms.svc.cluster.local
Address 3: 10.244.2.57 eureka-2.eureka.ms.svc.cluster.local
/ #
/ #
/ # nslookup kubernetes.default
nslookup: can't resolve '(null)': Name does not resolve
Name: kubernetes.default
Address 1: 10.0.0.1 kubernetes.default.svc.cluster.local
/ #
访问Eureka管理界面
六: 部署网关gateway
yaml程序
#
# ls
docker_build.sh
docker_build.sh.bak
eureka.yaml //注册 中心
gateway.yaml //网关
order.yaml //订单服务
portal.yaml //前端
product.yaml //产品服务
stock.yaml //库存服务
#
# cat gateway.yaml
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: gateway
namespace: ms
spec:
rules:
- host: gateway.ctnrs.com
http:
paths:
- path: /
backend:
serviceName: gateway
servicePort: 9999
---
apiVersion: v1
kind: Service
metadata:
name: gateway
namespace: ms
spec:
ports:
- port: 9999
name: gateway
selector:
project: ms
app: gateway
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gateway
namespace: ms
spec:
replicas: 1
selector:
matchLabels:
project: ms
app: gateway
template:
metadata:
labels:
project: ms
app: gateway
spec:
imagePullSecrets:
- name: registry-pull-secret
containers:
- name: gateway
image: 100.100.100.11/microservice/gateway:2020-06-03-11-52-10
imagePullPolicy: Always
ports:
- protocol: TCP
containerPort: 9999
env:
- name: JAVA_OPTS
value: "-Xmx1g"
resources:
requests:
cpu: 0.5
memory: 256Mi
limits:
cpu: 1
memory: 1Gi
readinessProbe:
tcpSocket:
port: 9999
initialDelaySeconds: 60
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 9999
initialDelaySeconds: 60
periodSeconds: 10
#
部署网关服务组件
# ./docker_build.sh gateway-service
ingress.extensions/gateway created
service/gateway created
deployment.apps/gateway created
#
七: 部署微服务业务程序
部署微服务业务程序与前端
#部署产品服务
# ./docker_build.sh product-service
Successfully built 8aedd0a0168d
Successfully tagged 10.83.35.11/microservice/product:2020-06-02-16-31-33
The push refers to repository [10.83.35.11/microservice/product]
a040b55736bc: Pushed
2767a363d982: Layer already exists
a1e7033f082e: Layer already exists
78075328e0da: Layer already exists
9f8566ee5135: Layer already exists
2020-06-02-16-31-33: digest: sha256:cbdba1c25bf29b129dc7de77f4cf62f5bf7efb72419ed625f88a6ae9c0f24376 size: 1370
deployment.apps/product created
#
部署库存服务
# ./docker_build.sh stock-service
…………………………………………………………………..
The push refers to repository [10.83.35.11/microservice/stock]
850505111769: Pushed
2767a363d982: Layer already exists
a1e7033f082e: Layer already exists
78075328e0da: Layer already exists
9f8566ee5135: Layer already exists
2020-06-02-16-32-55: digest: sha256:40d71b8cc74b6faae91ff45a562ddb75d22f673fc810c2a60e4a043be21f87f5 size: 1370
deployment.apps/stock created
[root@node-16 k8s]#
部署订单服务
# ./docker_build.sh order-service
---------
The push refers to repository [10.83.35.11/microservice/order]
2030ae40a392: Pushed
2767a363d982: Layer already exists
a1e7033f082e: Layer already exists
78075328e0da: Layer already exists
9f8566ee5135: Layer already exists
2020-06-02-16-34-48: digest: sha256:463b3e27a4ed4b5f70bc01a9f5877326938f82d2ca2c24befabd61ac0b840315 size: 1370
deployment.apps/order created
[root@node-16 k8s]#
部署前端服务
./docker_build.sh portal-service
------------------------------------------------------
2767a363d982: Layer already exists
a1e7033f082e: Layer already exists
78075328e0da: Layer already exists
9f8566ee5135: Layer already exists
2020-06-02-16-35-32: digest: sha256:d10679e18a1eb15b0e8751e74de6b1ff2fd3e574da210454d080e3c28836d19c size: 1370
ingress.extensions/portal created
service/portal created
deployment.apps/portal created
[root@node-16 k8s]#
查看我们的微服务正常运行,这个根据自己的业务量启动副本数
# kubectl get pod,svc,ing -n ms
NAME READY STATUS RESTARTS AGE
pod/eureka-0 1/1 Running 0 20h
pod/eureka-1 1/1 Running 0 20h
pod/eureka-2 1/1 Running 0 20h
pod/gateway-89d85fdfb-bqbg9 1/1 Running 0 13m
pod/order-94dfb7c77-6fl27 1/1 Running 0 119s
pod/portal-664f5bd797-k2zjd 1/1 Running 0 74s
pod/product-7b7554fb8b-z4gtd 1/1 Running 0 5m12s
pod/stock-5558d8ddbb-wh4rg 1/1 Running 0 3m50s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/eureka ClusterIP None <none> 8888/TCP 20h
service/gateway ClusterIP 10.0.0.183 <none> 9999/TCP 13m
service/portal ClusterIP 10.0.0.87 <none> 8080/TCP 74s
NAME HOSTS ADDRESS PORTS AGE
ingress.extensions/eureka eureka.ctnrs.com 80 20h
ingress.extensions/gateway gateway.ctnrs.com 80 13m
ingress.extensions/portal portal.ctnrs.com 80 74s
[root@node-16 k8s]#
八: 注册中心检查服务组件
Eureka 有三台pod组成分别分配在
三个node上面,三台数据同步
实现Node高冗余
微服务组件自动注册到ureka中
微服务组件是以ip +端口的方式
注册到Ureka中
九: 前端应用访问
前端域名
portal.ctnrs.com
# kubectl get ing -n ms
NAME HOSTS ADDRESS PORTS AGE
ingress.extensions/eureka eureka.ctnrs.com 80 42h
ingress.extensions/gateway gateway.ctnrs.com 80 141m
ingress.extensions/portal portal.ctnrs.com 80 141m
#
查询商品服务
查询订单服务
微服务验证在K8S平台部署成功!
————————————————
版权声明:本文为CSDN博主「wx_doitroot」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_40017427/article/details/106521729
#########################################
k8s部署校园网系统、学生成绩查询、论坛、springboot项目、java项目
https://blog.csdn.net/yanggd1987/article/details/107628001讲了k8s部署springboot的几个需要注意的地方(存储、资源限制、健康检查)
https://blog.csdn.net/weixin_44729138/article/details/106023274讲了springboot的打包
https://blog.csdn.net/u010948569/article/details/107125243
https://blog.csdn.net/qq_34125999/article/details/108722892
https://blog.csdn.net/beijie1930/article/details/100953275
https://blog.csdn.net/yanggd1987/article/details/109635821
https://blog.csdn.net/weixin_39132936/article/details/103260481
https://blog.csdn.net/mryang125/article/details/108456272
https://www.cnblogs.com/cannel/p/11104250.html
https://blog.csdn.net/mryang125/article/details/108456272打包jar包
https://blog.csdn.net/ciqingloveless/article/details/82467077
https://blog.csdn.net/qq_40017427/article/details/106521729打包mvn包
https://blog.csdn.net/m0_50180963/article/details/113646027
https://www.jianshu.com/p/d6835a121bae?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation