1. 程式人生 > 其它 >k8s中部署springcloud

k8s中部署springcloud

安裝和配置資料儲存倉庫MySQL

  • 1.MySQL簡介
  • 2.MySQL特點
  • 3.安裝和配置MySQL
  • 4.在MySQL資料庫匯入資料
  • 5.對MySQL資料庫進行授權

1.MySQL簡介

MySQL 是一款安全、跨平臺、高效的,並與PHP、Java等主流程式語言緊密結合的資料庫系統。該資料庫系統是由瑞典的MySQL AB公司開發、釋出並支援,由 MySQL的初始開發人員 David Axmark 和 Michael Monty Widenius 於 1995 年建立的。MySQL 的象徵符號是一隻名為 Sakila 的海豚,代表著 MySQL 資料庫的速度、能力、精確和優秀本質。

MySQL logo:

目前 MySQL 被廣泛地應用在 Internet 上的中小型網站中。由於其體積小、速度快、總體擁有成本低,尤其是開放原始碼這一特點,使得很多公司都採用 MySQL 資料庫以降低成本。

MySQL 資料庫可以稱得上是目前執行速度最快的SQL語言資料庫之一。除了具有許多其他資料庫所不具備的功能外,MySQL 資料庫還是一種完全免費的產品,使用者可以直接通過網路下載 MySQL 資料庫,而不必支付任何費用。

2.MySQL特點

1) 功能強大

MySQL 中提供了多種資料庫儲存引擎,各引擎各有所長,適用於不同的應用場合,使用者可以選擇最合適的引擎以得到最高效能,可以處理每天訪問量超過數億的高強度的搜尋 Web 站點。MySQL5 支援事務、檢視、儲存過程、觸發器等。

2) 支援跨平臺

MySQL 支援至少 20 種以上的開發平臺,包括 Linux、Windows、FreeBSD 、IBMAIX、AIX、FreeBSD 等。這使得在任何平臺下編寫的程式都可以進行移植,而不需要對程式做任何的修改。

3) 執行速度快

高速是 MySQL 的顯著特性。在 MySQL 中,使用了極快的 B 樹磁碟表(MyISAM)和索引壓縮;通過使用優化的單掃描多連線,能夠極快地實現連線;SQL 函式使用高度優化的類庫實現,執行速度極快。

4) 支援面向物件

PHP 支援混合程式設計方式。程式設計方式可分為純粹面向物件、純粹面向過程、面句物件與面向過程混合 3 種方式。

5) 安全性高

靈活和安全的許可權與密碼系統,允許基本主機的驗證。連線到伺服器時,所有的密碼傳輸均採用加密形式,從而保證了密碼的安全。

6) 成本低

MySQL 資料庫是一種完全免費的產品,使用者可以直接通過網路下載。

7) 支援各種開發語言

MySQL 為各種流行的程式設計語言提供支援,為它們提供了很多的 API 函式,包括 PHP、ASP.NET、Java、Eiffel、Python、Ruby、Tcl、C、C++、Perl 語言等。

8) 資料庫儲存容量大

MySQL 資料庫的最大有效表尺寸通常是由作業系統對檔案大小的限制決定的,而不是由 MySQL 內部限制決定的。InnoDB 儲存引擎將 InnoDB 表儲存在一個表空間內,該表空間可由數個檔案建立,表空間的最大容量為 64TB,可以輕鬆處理擁有上千萬條記錄的大型資料庫。

9) 支援強大的內建函式

PHP 中提供了大量內建函式,幾乎涵蓋了 Web 應用開發中的所有功能。它內建了資料庫連線、檔案上傳等功能,MySQL 支援大量的擴充套件庫,如 MySQLi 等,可以為快速開發 Web 應用提供便利。

3.安裝MySQL

在192.168.40.130上操作:

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-server -y

許可權設定
chown mysql:mysql -R /var/lib/mysql

初始化MySQL
mysqld --initialize

啟動MySQL
systemctl start mysqld

檢視 MySQL 執行狀態
systemctl status mysqld

mysql安裝成功後,預設的root使用者密碼為空,你可以使用以下命令來建立root使用者的密碼,密碼設定成111111

mysqladmin -u root password "111111"

登陸資料庫
mysql -uroot -p111111

建立資料庫tb_order、tb_product、tb_stock
create database tb_product;
create database tb_stock;
create database tb_order;

4.在Mysql資料庫匯入資料
把相應的sql語句上傳到mysql機器的root目錄下,sql檔案分別是order.sql、product.sql、stock.sql

use tb_order
source /root/order.sql

use tb_stock
source /root/stock.sql

use tb_product
source /root/product.sql

5.對MySQL資料庫授權
grant all on *.* to 'root'@'10.244.%.%' identified by '111111';
grant all on *.* to 'root'@'192.168.%.%' identified by '111111';
flush privileges;

grant all on *.* to 'root'@'%' identified by '111111';
flush privileges;

安裝openjdk和maven

yum install java-1.8.0-openjdk  maven-3.0.5* -y

上傳微服務原始碼包到k8s的

unzip microservic-test.zip
cd microservic-test

修改原始碼,更改資料庫連線地址

1)修改庫存資料庫
cat  /root/microservic-test/stock-service/stock-service-biz/src/main/resources/ application-fat.yml

jdbc:mysql://192.168.40.130:3306/tb_stock?characterEncoding=utf-8  
#變成自己的資料庫地址

2)修改產品資料庫
cat /root/microservic-test/product-service/product-service-biz/src/main/resources/application-fat.yml 

jdbc:mysql://192.168.40.130:3306/tb_product?characterEncoding=utf-8
#變成自己的資料庫地址

3)修改訂單資料庫
cat /root/microservic-test/order-service/order-service-biz/src/main/resources/ application-fat.yml

url: jdbc:mysql://192.168.40.130:3306/tb_order?characterEncoding=utf-8 
#變成自己的資料庫地址

通過Maven編譯、構建、打包原始碼

修改原始碼之後回到/root/microservic-test目錄下執行如下命令:
mvn clean package -D maven.test.skip=true


看到如下說明編譯打包已經成功了:
[INFO] simple-microservice ............................... SUCCESS [52.385s]
[INFO] basic-common ...................................... SUCCESS [0.001s]
[INFO] basic-common-core ................................. SUCCESS [6:11.156s]
[INFO] gateway-service ................................... SUCCESS [3:33.707s]
[INFO] eureka-service .................................... SUCCESS [12.075s]
[INFO] product-service ................................... SUCCESS [0.001s]
[INFO] product-service-api ............................... SUCCESS [0.271s]
[INFO] stock-service ..................................... SUCCESS [0.002s]
[INFO] stock-service-api ................................. SUCCESS [0.233s]
[INFO] product-service-biz ............................... SUCCESS [3.776s]
[INFO] stock-service-biz ................................. SUCCESS [0.332s]
[INFO] order-service ..................................... SUCCESS [0.000s]
[INFO] order-service-api ................................. SUCCESS [0.270s]
[INFO] order-service-biz ................................. SUCCESS [0.364s]
[INFO] basic-common-bom .................................. SUCCESS [0.000s]
[INFO] portal-service .................................... SUCCESS [0.738s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11:13.305s
[INFO] Finished at: Wed Jan 20 15:53:22 CST 2021
[INFO] Final Memory: 92M/710M
[INFO] ------------------------------------------------------------------------

k8s中部署Eureka元件

cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com"],
"insecure-registries":["192.168.40.132","harbor"], 
"exec-opts":["native.cgroupdriver=systemd"],
 "log-driver":"json-file",
 "log-opts": {
  "max-size": "100m"
  },
 "storage-driver":"overlay2",
 "storage-opts": [
  "overlay2.override_kernel_check=true"
  ]
}
EOF
修改docker映象源及私有地址

建立拉取私有映象倉庫需要的secret

kubectl create ns ms && kubectl create secret docker-registry registry-pull-secret --docker-server=192.168.40.132 --docker-username=admin --docker-password=Harbor12345  -n ms

構建eureka docker映象

FROM java:8-jdk-alpine
RUN  apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/eureka-service.jar ./
COPY pinpoint /pinpoint
EXPOSE 8888
CMD java -jar -javaagent:/pinpoint/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=ms-eureka -Deureka.instance.hostname=${MY_POD_NAME}.eureka.ms /eureka-service.jar
Dockerfile

部署eureka

#---
#apiVersion: extensions/v1beta1
#kind: Ingress
#metadata:
#  name: eureka 
#  namespace: ms 
#  annotations:           #註解資訊
#    kubernetes.io/ingress.class: "nginx"
#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: 172.17.166.217/kubenetes/eureka:v4
        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
eureka.yaml

k8s中部署閘道器Gateway服務

build Gateway docker 映象

FROM java:8-jdk-alpine
RUN  apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/gateway-service.jar ./
COPY pinpoint /pinpoint
EXPOSE 9999
CMD java -jar -javaagent:/pinpoint/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=ms-gateway /gateway-service.jar
Dockerfile

k8s部署Gateway

---
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: 2
  selector:
    matchLabels:
      project: ms
      app: gateway
  template:
    metadata:
      labels:
        project: ms
        app: gateway
    spec:
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
      - name: gateway
        image: 172.17.166.217/kubenetes/gateway:v1
 #       imagePullPolicy: Always
        ports:
          - protocol: TCP
            containerPort: 9999
        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
gateway.yaml

k8s中部署其他微服務

構建前端portal服務映象

FROM java:8-jdk-alpine
RUN  apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/portal-service.jar ./
COPY pinpoint /pinpoint
EXPOSE 8080
CMD java -jar -javaagent:/pinpoint/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=ms-protal /portal-service.jar
Dockerfile

k8s部署portal服務

#apiVersion: extensions/v1beta1
#kind: Ingress
#metadata:
#  name: portal 
#  namespace: ms 
#spec:
#  rules:
#    - host: portal.ctnrs.com 
#      http:
#        paths:
#        - path: /
#          backend:
#            serviceName: portal 
#            servicePort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: portal
  namespace: ms
spec:
  ports:
  - port: 8080
    name: portal
  selector:
    project: ms
    app: portal
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: portal
  namespace: ms
spec:
  replicas: 2
  selector:
    matchLabels:
      project: ms
      app: portal
  template:
    metadata:
      labels:
        project: ms
        app: portal
    spec:
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
      - name: portal
        image: 172.17.166.217/kubenetes/portal:v1
        #imagePullPolicy: IfNotPreset
        ports:
          - protocol: TCP
            containerPort: 8080
        resources:
          limits:
            cpu: 1
            memory: 1Gi
        readinessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 10
portal.yaml

構建product服務映象

FROM java:8-jdk-alpine
RUN  apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/product-service-biz.jar ./
COPY pinpoint /pinpoint
EXPOSE 8010
CMD java -jar -javaagent:/pinpoint/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=ms-product /product-service-biz.jar
Dockerfile

k8s部署product服務

apiVersion: apps/v1
kind: Deployment
metadata:
  name: product
  namespace: ms
spec:
  replicas: 1
  selector:
    matchLabels:
      project: ms
      app: product
  template:
    metadata:
      labels:
        project: ms
        app: product
    spec:
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
      - name: product
        image: 172.17.166.217/kubenetes/product:v5
        imagePullPolicy: Always
        ports:
          - protocol: TCP
            containerPort: 8010
        resources:
          limits:
            cpu: 1
            memory: 1Gi
        readinessProbe:
          tcpSocket:
            port: 8010
          initialDelaySeconds: 60
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 8010
          initialDelaySeconds: 60
          periodSeconds: 10
~                              
product.yaml

構建stock服務映象

FROM java:8-jdk-alpine
RUN  apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/stock-service-biz.jar ./
COPY pinpoint /pinpoint
EXPOSE 8030
CMD java -jar -javaagent:/pinpoint/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=ms-stock /stock-service-biz.jar
Dockerfile

k8s釋出stock服務

apiVersion: apps/v1
kind: Deployment
metadata:
  name: stock
  namespace: ms
spec:
  replicas: 1
  selector:
    matchLabels:
      project: ms
      app: stock
  template:
    metadata:
      labels:
        project: ms
        app: stock
    spec:
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
      - name: stock
        image: 172.17.166.217/kubenetes/stock:v5
        #imagePullPolicy: Always
        ports:
          - protocol: TCP
            containerPort: 8030
        resources:
          limits:
            cpu: 1
            memory: 1Gi
        readinessProbe:
          tcpSocket:
            port: 8030
          initialDelaySeconds: 60
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 8030
          initialDelaySeconds: 60
          periodSeconds: 10
stock.yaml

構建order服務映象

FROM java:8-jdk-alpine
RUN  apk add -U tzdata && \
     ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./target/order-service-biz.jar ./
COPY pinpoint /pinpoint
EXPOSE 8020
CMD java -jar -javaagent:/pinpoint/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=ms-order /order-service-biz.jar
Dockerfile

k8s釋出order服務

apiVersion: apps/v1
kind: Deployment
metadata:
  name: order
  namespace: ms
spec:
  replicas: 1
  selector:
    matchLabels:
      project: ms
      app: order
  template:
    metadata:
      labels:
        project: ms
        app: order
    spec:
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
      - name: order
        image: 172.17.166.217/kubenetes/order:v5
        #imagePullPolicy: Always
        ports:
          - protocol: TCP
            containerPort: 8020
        readinessProbe:
          tcpSocket:
            port: 8020
          initialDelaySeconds: 60
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 8020
          initialDelaySeconds: 60
          periodSeconds: 10
order.yaml

微服務的擴容和縮容

1.擴容

修改yaml檔案裡的replicas數量,如原來是2,可以修改成3,然後通過kubectl apply 重新更新yaml即可

2.縮容

修改yaml檔案裡的replicas數量,如原來是3,可以修改成2,然後通過kubectl apply 重新更新yaml即可

3.釋出流程

開發提交程式碼到gitlab->觸發自動構建(通過mvn打包程式碼)->把程式碼打包成映象->把映象上傳到私有映象倉庫>把新的映象更新到對應服務的yaml檔案裡->然後kubectl apply更新yaml檔案->釋出服務