最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

手動部署java項目到k8s中的實現(xiàn)

 更新時間:2022年08月07日 16:18:35   作者:余生大大  
本文主要介紹了手動部署java項目到k8s中的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

Java項目在開發(fā)調(diào)試的過程中都需要進行各種環(huán)境的安裝部署,在之前我們使用虛擬機部署時都是通過在機器上執(zhí)行命令或者配置Jekins腳本自動化部署。但在容器環(huán)境下進行高可用的進行項目的安裝部署就需要使用容器化技術(shù)跟k8s的調(diào)度執(zhí)行了。

一般在正式環(huán)境下我們都會有以下幾部分構(gòu)成容器化部署:

  • 容器環(huán)境
    • docker
    • Containerd
  • k8s集群
  • k8s管理系統(tǒng)
    • KubeSohere
    • dashboard(k8s自帶的管理系統(tǒng))
  • 鏡像倉庫
    • Docker hub
    • registry
    • harbor
  • 代碼倉庫
    • github
    • gitlab
  • 發(fā)布平臺
    • Jekins
    • Devops
  • 負載
    • F5
    • nginx
    • Ingress

但是組成這么一整套的資源比較大,不利于個人安裝學(xué)習(xí)。所以本文就介紹在只有k8s集群的環(huán)境下部署java項目到容器環(huán)境中。

1. 生成Demo項目

生成一個java的Demo項目,在本機進行啟動測試能訪問web頁面即可,如下圖

目錄結(jié)構(gòu)

2. 配置Docker環(huán)境

2.1 編寫Dockerfile文件

在上面的目錄結(jié)構(gòu)圖里的file文件夾中有一個Dockerfile文件,代碼如下

#基礎(chǔ)鏡像 java打包需要依賴jdk
FROM java:8
#將虛擬機的war包,cp到docker容器內(nèi)部
COPY demo-0.0.1-SNAPSHOT.jar demo-0.0.1-SNAPSHOT.jar
#容器開放的端口
EXPOSE 8081
#指定docker容器時區(qū)
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Beijing' >/etc/timezone
# 腳本啟動
ENTRYPOINT ["sh","-c","java -server -Dfile.encoding=utf-8 -Xms1024m -Xms1536m -jar -Dserver.port=8081  -Dspring.profiles.active=prod demo-0.0.1-SNAPSHOT.jar"]

如果項目設(shè)置了分環(huán)境注意修改ENTRYPOINT 參數(shù)里的-Dspring.profiles.active=prod進行修改

2.2 打包鏡像

配置好Dockerfile文件就需要打包鏡像到容器集群中,由于沒有鏡像倉庫所以我們打包需要在所有的容器節(jié)點中進行打包,否則在調(diào)度過程中如果調(diào)度到?jīng)]有打包鏡像的節(jié)點則拉取不到鏡像就會如下圖無法啟動完成。

demo項目打好的jar包Dockerfile文件上傳到容器集群的所有節(jié)點上,然后執(zhí)行以下命令:

docker image build -t an/demo_server:v1.0.0 .

an/demo_server就是要打包的容器鏡像名稱,我們下面的配置k8s也是以此名稱來找鏡像進行調(diào)度的。

使用docker images命令查看是否存在鏡像

3. 配置k8s

3.1 編寫deploy.yaml文件

這個文件是給k8s調(diào)度使用的,里面配置了需要調(diào)度使用的實例數(shù)量版本、端口號、對外端口號、對外協(xié)議等等等等,配置如下

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo-server
  template:
    metadata:
      labels:
        app: demo-server
    spec:
      containers:
        - name: demo-server
          image: an/demo_server:v1.0.0
          ports:
            - containerPort: 8081
---
apiVersion: v1
kind: Service
metadata:
  name: demo-server
spec:
  selector:
    app: demo-server
  ports:
    - protocol: TCP
      port: 8081
      targetPort: 8081
      nodePort: 31001
  type: NodePort

replicas參數(shù)代表了調(diào)度的容器數(shù)量,目前是1個實例
nodePort代表了對外映射的端口號,實際訪問就是這個端口

最下面的目錄有參數(shù)詳解,可以參考,這里簡單解釋一下

3.2 啟動調(diào)度

將文件上傳到k8s的master節(jié)點上執(zhí)行以下命令進行調(diào)度

kubectl apply -f deploy.yaml

4. 驗證

4.1 查看pod

先執(zhí)行命令:

kubectl get all或kubectl get node

如下圖我們的demo-server已經(jīng)啟動了,但是如何訪問成了一個問題

4.2 訪問系統(tǒng)

4.2.1 集群外部訪問

集群外部訪問沒有做負載的情況下需要先看容器分配到了那個節(jié)點上,在可視化系統(tǒng)里查看容器組的分配情況

系統(tǒng)里看到k8s將這個系統(tǒng)調(diào)度到了node2節(jié)點,使用node2節(jié)點ip+端口,我們配的對外映射端口為31001,那訪問地址就是:http://外部ip:31001,訪問如下圖則驗證成功

4.2.2 集群內(nèi)部訪問

如果在集群內(nèi)部訪問有兩種方式

通過CLUSTER-IP:port訪問
使用命令kubectl get all可以查看到service的CLUSTER-IP

通過pod Ip:port訪問
使用命令:kubectl get pods得到podname

再使用命令:kubectl describe pod demo-server-8b47bd6b6-8bh5q查看pod詳情里的pod IP

5. k8s配置文件參數(shù)詳解

apiVersion: v1 # 【必須】版本號
kind: Pod # 【必選】Pod
metadata: # 【必選-Object】元數(shù)據(jù)
name: String # 【必選】 Pod的名稱
namespace: String # 【必選】 Pod所屬的命名空間
labels: # 【List】 自定義標(biāo)簽列表
	- name: String
annotations: # 【List】 自定義注解列表
	- name: String
spec: # 【必選-Object】 Pod中容器的詳細定義
containers: # 【必選-List】 Pod中容器的詳細定義
	- name: String # 【必選】 容器的名稱
	image: String # 【必選】 容器的鏡像名稱
	imagePullPolicy: [Always | Never | IfNotPresent] # 【String】 每次都嘗試重新拉取鏡像 | 僅使用本地鏡像 | 如果本地有鏡像則使用,沒有則拉取
	command: [String] # 【List】 容器的啟動命令列表,如果不指定,則使用鏡像打包時使用的啟動命令
	args: [String] # 【List】 容器的啟動命令參數(shù)列表
	workingDir: String # 容器的工作目錄
	volumeMounts: # 【List】 掛載到容器內(nèi)部的存儲卷配置
		- name: String # 引用Pod定義的共享存儲卷的名稱,需使用volumes[]部分定義的共享存儲卷名稱
		mountPath: Sting # 存儲卷在容器內(nèi)mount的絕對路徑,應(yīng)少于512個字符
		readOnly: Boolean # 是否為只讀模式,默認為讀寫模式
	ports: # 【List】 容器需要暴露的端口號列表
		- name: String  # 端口的名稱
		containerPort: Int # 容器需要監(jiān)聽的端口號
		hostPort: Int # 容器所在主機需要監(jiān)聽的端口號,默認與containerPort相同。設(shè)置hostPort時,同一臺宿主機將無法啟動該容器的第二份副本
		protocol: String # 端口協(xié)議,支持TCP和UDP,默認值為TCP
	env: # 【List】 容器運行前需設(shè)置的環(huán)境變量列表
		- name: String # 環(huán)境變量的名稱
		value: String # 環(huán)境變量的值
	resources: # 【Object】 資源限制和資源請求的設(shè)置
		limits: # 【Object】 資源限制的設(shè)置
		cpu: String # CPU限制,單位為core數(shù),將用于docker run --cpu-shares參數(shù)
		memory: String # 內(nèi)存限制,單位可以為MB,GB等,將用于docker run --memory參數(shù)
		requests: # 【Object】 資源限制的設(shè)置
		cpu: String # cpu請求,單位為core數(shù),容器啟動的初始可用數(shù)量
		memory: String # 內(nèi)存請求,單位可以為MB,GB等,容器啟動的初始可用數(shù)量
	livenessProbe: # 【Object】 對Pod內(nèi)各容器健康檢查的設(shè)置,當(dāng)探測無響應(yīng)幾次之后,系統(tǒng)將自動重啟該容器??梢栽O(shè)置的方法包括:exec、httpGet和tcpSocket。對一個容器只需要設(shè)置一種健康檢查的方法
		exec: # 【Object】 對Pod內(nèi)各容器健康檢查的設(shè)置,exec方式
		command: [String] # exec方式需要指定的命令或者腳本
		httpGet: # 【Object】 對Pod內(nèi)各容器健康檢查的設(shè)置,HTTGet方式。需要指定path、port
		path: String
		port: Number
		host: String
		scheme: String
		httpHeaders:
			- name: String
			value: String
		tcpSocket: # 【Object】 對Pod內(nèi)各容器健康檢查的設(shè)置,tcpSocket方式
		port: Number
		initialDelaySeconds: Number # 容器啟動完成后首次探測的時間,單位為s
		timeoutSeconds: Number  # 對容器健康檢查的探測等待響應(yīng)的超時時間設(shè)置,單位為s,默認值為1s。若超過該超時時間設(shè)置,則將認為該容器不健康,會重啟該容器。
		periodSeconds: Number # 對容器健康檢查的定期探測時間設(shè)置,單位為s,默認10s探測一次
		successThreshold: 0
		failureThreshold: 0
	securityContext:
		privileged: Boolean
restartPolicy: [Always | Never | OnFailure] # Pod的重啟策略 一旦終止運行,都將重啟 | 終止后kubelet將報告給master,不會重啟 | 只有Pod以非零退出碼終止時,kubelet才會重啟該容器。如果容器正常終止(退出碼為0),則不會重啟。
nodeSelector: object # 設(shè)置Node的Label,以key:value格式指定,Pod將被調(diào)度到具有這些Label的Node上
imagePullSecrets: # 【Object】 pull鏡像時使用的Secret名稱,以name:secretkey格式指定
	- name: String
hostNetwork: Boolean # 是否使用主機網(wǎng)絡(luò)模式,默認值為false。設(shè)置為true表示容器使用宿主機網(wǎng)絡(luò),不再使用docker網(wǎng)橋,該Pod將無法在同一臺宿主機上啟動第二個副本
volumes: # 【List】 在該Pod上定義的共享存儲卷列表
	- name: String # 共享存儲卷的名稱,volume的類型有很多emptyDir,hostPath,secret,nfs,glusterfs,cephfs,configMap
	emptyDir: {} # 【Object】 類型為emptyDir的存儲卷,表示與Pod同生命周期的一個臨時目錄,其值為一個空對象:emptyDir: {}
	hostPath: # 【Object】 類型為hostPath的存儲卷,表示掛載Pod所在宿主機的目錄
		path: String # Pod所在主機的目錄,將被用于容器中mount的目錄
	secret: # 【Object】類型為secret的存儲卷,表示掛載集群預(yù)定義的secret對象到容器內(nèi)部
		secretName: String
		items:
		- key: String
			path: String
	configMap: # 【Object】 類型為configMap的存儲卷,表示掛載集群預(yù)定義的configMap對象到容器內(nèi)部
		name: String
		items:
		- key: String
			path: String

到此這篇關(guān)于手動部署java項目到k8s中的實現(xiàn)的文章就介紹到這了,更多相關(guān)java部署到k8s內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解SpringBoot和Mybatis配置多數(shù)據(jù)源

    詳解SpringBoot和Mybatis配置多數(shù)據(jù)源

    本篇文章主要介紹了詳解SpringBoot和Mybatis配置多數(shù)據(jù)源,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 解決Java執(zhí)行Cmd命令出現(xiàn)的死鎖問題

    解決Java執(zhí)行Cmd命令出現(xiàn)的死鎖問題

    這篇文章主要介紹了關(guān)于Java執(zhí)行Cmd命令出現(xiàn)的死鎖問題解決,解決方法就是在waitfor()方法之前讀出窗口的標(biāo)準(zhǔn)輸出、輸出、錯誤緩沖區(qū)中的內(nèi)容,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • SpringBoot中@MessageMapping注解的原理及使用詳解

    SpringBoot中@MessageMapping注解的原理及使用詳解

    這篇文章主要介紹了SpringBoot中@MessageMapping注解的原理及使用詳解,@MessageMapping注解是Spring Boot提供的一個重要的注解之一,它可以幫助我們處理WebSocket消息,需要的朋友可以參考下
    2023-07-07
  • Spring入門配置和DL依賴注入實現(xiàn)圖解

    Spring入門配置和DL依賴注入實現(xiàn)圖解

    這篇文章主要介紹了Spring入門配置和DL依賴注入實現(xiàn)圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Jersey實現(xiàn)Restful服務(wù)(實例講解)

    Jersey實現(xiàn)Restful服務(wù)(實例講解)

    下面小編就為大家?guī)硪黄狫ersey實現(xiàn)Restful服務(wù)(實例講解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • IntelliJ IDEA(2019)之mybatis反向生成的實現(xiàn)

    IntelliJ IDEA(2019)之mybatis反向生成的實現(xiàn)

    這篇文章主要介紹了IntelliJ IDEA(2019)之mybatis反向生成,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • SpringBoot實現(xiàn)單文件與多文件上傳

    SpringBoot實現(xiàn)單文件與多文件上傳

    本次例子不基于第三方存儲(如七牛云對象存儲、阿里云對象存儲、騰訊云對象存儲等),僅基于本地存儲。本文主要內(nèi)容如下:公共文件存儲代碼;單文件上傳代碼;多文件上傳代碼
    2021-05-05
  • Spring boot項目集成Camel FTP的方法示例

    Spring boot項目集成Camel FTP的方法示例

    這篇文章主要介紹了Spring boot項目集成Camel FTP的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10
  • 淺談JavaWeb中的web.xml配置部署描述符文件

    淺談JavaWeb中的web.xml配置部署描述符文件

    下面小編就為大家?guī)硪黄獪\談JavaWeb中的web.xml配置部署描述符文件。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Jenkins遠程部署war包過程圖解

    Jenkins遠程部署war包過程圖解

    這篇文章主要介紹了Jenkins遠程部署war包過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05

最新評論

神木县| 任丘市| 兴安盟| 万宁市| 莱阳市| 鲜城| 南宁市| 探索| 朝阳区| 淮阳县| 宁明县| 纳雍县| 宝鸡市| 堆龙德庆县| 成都市| 江口县| 广汉市| 万安县| 无棣县| 茌平县| 巴林右旗| 通辽市| 安达市| 杭锦后旗| 新源县| 灵宝市| 庆安县| 江口县| 含山县| 阜新市| 延长县| 三门峡市| 河西区| 宁南县| 广西| 赤水市| 都安| 东海县| 射洪县| 康定县| 浑源县|