Kubernetes之在k8s中部署Java應用


   部署好了k8s以后 部署參考https://www.cnblogs.com/minseo/p/12055731.html

   怎么在k8s部署應用

   項目遷移到k8s平台是怎樣的流程

  1,制作鏡像

  2,控制器管理Pod

  3,暴露應用

  4,對外發布應用

  5,日志/監控

  k8s基本概念  

Cluster 
Cluster 是計算、存儲和網絡資源的集合,Kubernetes 利用這些資源運行各種基於容器的應用。

Master 
Master 是 Cluster 的大腦,它的主要職責是調度,即決定將應用放在哪里運行。Master 運行 Linux 操作系統,可以是物理機或者虛擬機。為了實現高可用,可以運行多個 Master。

Node 
Node 的職責是運行容器應用。Node 由 Master 管理,Node 負責監控並匯報容器的狀態,並根據 Master 的要求管理容器的生命周期。Node 運行在 Linux 操作系統,可以是物理機或者是虛擬機。

Pod 
Pod 是 Kubernetes 的最小工作單元。每個 Pod 包含一個或多個容器。Pod 中的容器會作為一個整體被 Master 調度到一個 Node 上運行,一個Pod里的所有容器共用一個namespaces

Controller

管理Pod的工具,kubernetes通過它來管理集群中的Pod

Deployment 

Deployment 是最常用的 Controller,比如前面在線教程中就是通過創建 Deployment 來部署應用的。Deployment 可以管理 Pod 的多個副本,並確保 Pod 按照期望的狀態運行。

ReplicaSet 

ReplicaSet 實現了 Pod 的多副本管理。使用 Deployment 時會自動創建 ReplicaSet,也就是說 Deployment 是通過 ReplicaSet 來管理 Pod 的多個副本,我們通常不需要直接使用 ReplicaSet。

DaemonSet

DaemonSet 用於每個 Node 最多只運行一個 Pod 副本的場景。正如其名稱所揭示的,DaemonSet 通常用於運行 daemon。

StatefuleSet

StatefuleSet 能夠保證 Pod 的每個副本在整個生命周期中名稱是不變的。而其他 Controller 不提供這個功能,當某個 Pod 發生故障需要刪除並重新啟動時,Pod 的名稱會發生變化。同時 StatefuleSet 會保證副本按照固定的順序啟動、更新或者刪除。

Job

Job 用於運行結束就刪除的應用。而其他 Controller 中的 Pod 通常是長期持續運行。

Service

Kubernetes Service 定義了外界訪問一組特定 Pod 的方式。Service 有自己的 IP 和端口,並把這個IP和后端的Pod所跑的服務的關聯起來。Service 為 Pod 提供了負載均衡。

namespace

Namespace 可以將一個物理的 Cluster 邏輯上划分成多個虛擬 Cluster,每個 Cluster 就是一個 Namespace。不同 Namespace 里的資源是完全隔離的。

Kubernetes 默認創建了兩個 Namespace,default和kube-system

   在k8s中部署一個java應用

  下載demo

wget https://codeload.github.com/lizhenliang/tomcat-java-demo/zip/master

  解壓

tomcat-java-demo-master.zip.zip

 

   目錄db下有mysql初始sql  tables_ly_tomcat.sql新建一台主機192.168.1.14用作數據庫安裝mariadb

yum -y install mariadb
yum -y install mariadb-server

  創建數據庫test導入表

 use test;
source /root/tables_ly_tomcat.sql

  查看導入的表

 

   授權保證master和node可以正常訪問該數據庫

grant all on test.* to 'test'@'%' identified by '123.com';

  其他主機使用test用戶可以正常訪問即可

mysql -utest -p123.com -h 192.168.1.14

  安裝jdk和maven

yum -y install maven java-1.8.0-openjdk.x86_64

  修改數據庫鏈接地址

src/main/resources/application.yml

 

 

 

 

 

 

  編譯構建

 mvn clean install -Dmaven.test.skip=true

  第一次構建時間稍長

   會在文件夾target下面生成一下文件

 

   查看解壓文件夾下的Dockerfile

FROM lizhenliang/tomcat 
LABEL maintainer www.ctnrs.com
RUN rm -rf /usr/local/tomcat/webapps/*
ADD target/*.war /usr/local/tomcat/webapps/ROOT.war 

  引用tomcat  刪除默認的根目錄,增加剛剛構建的war包至根目錄

  使用Dockerfile構建鏡像 需要使用docker hub的注冊用戶名yueming33990否則推送會失敗提示為requested access to the resource is denied

docker build -t yueming33990/java-demo .

  注意最后有.符號

   推送到鏡像倉庫其他節點也可以訪問

  登錄

docker login

  需要輸入用戶名和密碼可以去網站https://hub.docker.com注冊或者是搭建私有鏡像倉庫

  推送至docker hub

docker push yueming33990/java-demo

 

   推送成功在hub.docker.com會生成一個公共的鏡像

 

   已經推送至公共的鏡像倉庫了其他主機可以直接下載

docker pull yueming33990/java-demo

  k8s使用鏡像

kubectl create deployment java-demo --image=yueming33990/java-demo --dry-run -o yaml 

  --dry-run測試不在k8s運行

  -o yaml 生成yaml格式

  執行輸出yaml格式

 

   輸出重定向至deploy.yaml

kubectl create deployment java-demo --image=yueming33990/java-demo --dry-run -o yaml > deploy.yaml

  修改

 

   運行

kubectl apply -f deploy.yaml 

 

   查看啟動的pods

kubectl get pods

 

   通過日志查看tomcat是否啟動

kubectl  logs java-demo-b76fc7876-5qjgn

 

   暴露應用

  創建一個service

kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run

  java-demo指定名稱

  --port指定集群內部訪問的端口

  --target-port指定容器內跑服務的端口

  --type=NodePort 指定類型 集群外部訪問

    重定向到文件

kubectl expose deployment java-demo --port=80 --target-port=8080 --type=NodePort -o yaml --dry-run > svc.yaml

 

  運行

kubectl apply -f svc.yaml

  查看pods和svc

kubectl get pods,svc

 

   web頁面訪問

http://192.168.1.12:30457/

  查看pods分布的節點

kubectl get pods -o wide

  

 

   使用k8s部署java應用完成


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM