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.jarDockerfile
部署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: 10eureka.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.jarDockerfile
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: 10gateway.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.jarDockerfile
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: 10portal.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.jarDockerfile
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.jarDockerfile
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: 10stock.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.jarDockerfile
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: 10order.yaml
微服務的擴容和縮容
1.擴容
修改yaml檔案裡的replicas數量,如原來是2,可以修改成3,然後通過kubectl apply 重新更新yaml即可
2.縮容
修改yaml檔案裡的replicas數量,如原來是3,可以修改成2,然後通過kubectl apply 重新更新yaml即可
3.釋出流程
開發提交程式碼到gitlab->觸發自動構建(通過mvn打包程式碼)->把程式碼打包成映象->把映象上傳到私有映象倉庫>把新的映象更新到對應服務的yaml檔案裡->然後kubectl apply更新yaml檔案->釋出服務