Kubernetes持久卷實戰兩部曲之二:細說開發
在上一章《Kubernetes持久卷實戰兩部曲之一:極速體驗》我們體驗了K8S環境下基於NFS的持久卷讀寫,今天我們一起來了解整個體驗環境背後的細節;
全文概要
要完成上一章的體驗,需要做以下事情:
1. 建立PV;
2. 建立PVC;
3. 開發web服務的工程,將web服務打包成映象並推送到映象伺服器;
4. 建立web服務對應的deployment;
5. 建立web服務對應的service;
現在就開始吧!
建立PV
pv對應的配置檔案pv1.yaml內容如下:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /usr/local/work/nfs
server: 192.168.119.128
- 型別是PersistentVolume;
- capacity.storage=1Gi表示這個PV最大為1G;
- accessModes=ReadWriteOnce該pv只能被單個節點讀寫;
- nfs配置了網路儲存的引數;
建立PVC
pvc對應的配置檔案pvc1.yaml內容如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
可見,上述pvc沒有用到selector,k8s系統會自動匹配到pv1,注意要pv和pvc的storage要一樣;
開發web服務的工程
您可以在GitHub下載web服務的原始碼,地址和連結資訊如下表所示:
名稱 | 連結 | 備註 |
---|---|---|
git倉庫地址(ssh) | [email protected]:zq2599/blog_demos.git | 該專案原始碼的倉庫地址,ssh協議 |
這個git專案中有多個目錄,本次所需的資源放在k8spvdemo目錄下,如下圖紅框所示:
這是個普通的springboot工程,有以下幾處需要注意:
1. pom.xml檔案中,使用docker-maven-plugin外掛將工程打包成映象;
2. 提供web服務的UploadController.java中,收到檔案後寫入的位置是/usr/local/uploadfiles,這個目錄對應的是NFS資料夾的掛載位置;
3. 開發完畢後,執行命令mvn clean package -U -DskipTests docker:build即可將工程編譯打包後製作成docker映象;
4. 通過docker push命令將映象推送到hub.docker.com或者其他映象倉庫;
5. 構建docker映象相關的操作請參考《 maven構建docker映象三部曲》系列;
web服務對應的deployment
建立檔案k8spvdemo.yaml,用於在k8s上建立web服務的pod:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: k8spvdemo
spec:
replicas: 1
template:
metadata:
labels:
name: k8spvdemo
spec:
containers:
- name: k8spvdemo
image: bolingcavalry/k8spvdemo:0.0.1-SNAPSHOT
volumeMounts:
- mountPath: "/usr/local/uploadfiles"
name: pv1
tty: true
ports:
- containerPort: 8080
volumes:
- name: pv1
persistentVolumeClaim:
claimName: pvc1
- 映象檔案用的是上一步推送到映象倉庫的那個;
- volumeMounts中的mountPath就是程式中寫入檔案的位置;
- volumes配置的之前建立的pvc;
web服務對應的service
為了外部可以訪問web服務,需要建立一個service來包裹pod,由於型別是NodePort,埠對映是30010,所以外部可以通過節點機器IP地址:30010來訪問web服務:
apiVersion: v1
kind: Service
metadata:
name: k8spvdemo
spec:
type: NodePort
ports:
- port: 8080
nodePort: 30010
selector:
name: k8spvdemo
以上就是全部的開發細節,用這些程式碼和指令碼就可以完成上一章的體驗了,這種靜態持久卷有一點不太方便,就是每次要先通過PV來宣告一個儲存資源,然後才能使用,後續的文章中,我們還會嘗試StorageClass提供的動態PV,不需要每次預先分配資源就能擁有持久卷;
相關推薦
Kubernetes持久卷實戰兩部曲之二:細說開發
在上一章《Kubernetes持久卷實戰兩部曲之一:極速體驗》我們體驗了K8S環境下基於NFS的持久卷讀寫,今天我們一起來了解整個體驗環境背後的細節; 全文概要 要完成上一章的體驗,需要做以下事情: 1. 建立PV; 2. 建立PVC; 3. 開發we
Docker下RabbitMQ延時佇列實戰兩部曲之二:細說開發
本章是《Docker下RabbitMQ延時佇列實戰兩部曲》的終篇,上一章《Docker下RabbitMQ延時佇列實戰兩部曲之一:極速體驗》我們快速體驗了延時佇列的生產和消費,今天來實戰整個開發過程; SpringBoot框架下進行RabbitMQ開發,相關
Kubernetes持久卷實戰兩部曲之一:極速體驗
章節列表 整個《Kubernetes持久卷實戰》由以下兩篇文章組成: 1. 極速體驗靜態持久化儲存,也就是本章的內容; 2. 瞭解k8s的pod、service、pv、pvc的細節; 本章內容 本章目標是用最少的步驟和時間體驗PV,所以先不展開
docker-compose下的java應用啟動順序兩部曲之二:實戰
上篇回顧 本文是《docker-compose下的java應用啟動順序兩部曲》的終篇,在上一篇《docker-compose下的java應用啟動順序兩部曲之一:問題分析》中,我們以SpringCloud環境下的註冊中心和業務服務為例,展示了docker-compose.yml中depends_on引數的不足
kubernetes下的Nginx加Tomcat三部曲之二:細說開發
本文是《kubernetes下的Nginx加Tomcat三部曲》的第二章,在《kubernetes下的Nginx加Tomcat三部曲之一:極速體驗》一文我們快速部署了Nginx和Tomcat,達到以下效果: 本文我會詳細說明在kubernetes部署上述網
Docker下RabbitMQ延時佇列實戰兩部曲之一:極速體驗
有的應用場景中,向RabbitMQ發出訊息後,我們希望消費方不要立即消費,可以通過延時佇列來實現,思路是將訊息傳送到A佇列,此佇列沒有消費者,等訊息過期後會進入A佇列的Dead Letter Exchange中,B佇列綁定了這個Dead Letter Excha
CentOS7環境部署kubenetes1.12版本五部曲之四:安裝dashboard
本文是《CentOS7環境部署kubenetes1.12版本五部曲》系列的第四篇,前面的實站已經搭建了kubernetes1.12叢集,操作都是在控制檯用kubectl命令來完成的,今天咱們一起將WEB管理頁面部署上去; 前提 本次實戰需要科學上網,才能kube
CentOS7環境部署kubenetes1.12版本五部曲之三:node節點加入
本文是《CentOS7環境部署kubenetes1.12版本五部曲》系列的第三篇,上篇文章建立了kubernetes環境的master節點,本章的目標是在kubernetes環境加入node節點,並在上面部署Pod和Service進行驗證; 準備node節點機器
CentOS7環境部署kubenetes1.12版本五部曲之五:安裝kubectl
本文是《CentOS7環境部署kubenetes1.12版本五部曲》系列的終篇,前面章節我們已搭建好了整個kubernetes環境,本文的目標是在任意一臺CentOS7機器上安裝kubectl,然後通過此kubectl對kubernetes環境做操作; 前提 本
編寫C語言版本的卷積神經網路CNN之二:CNN網路的總體結構
上一節我們總體介紹專案並說明Minst手寫數字資料庫的使用,這一節我們將重點介紹CNN網路總體結構。 上圖我們已經非常熟悉,其為Yann在1998年介紹的LeNet-5網路的結構,其剛被提出,就在學術和工業領域上得到廣泛應用,而本文的CNN卷積網路卻是如下
最小生成樹的兩個演算法之二:kruskal演算法
基本概念 樹(Tree):如果一個無向連通圖中不存在迴路,則這種圖稱為樹。生成樹 (Spanning Tree):無向連通圖G的一個子圖如果是一顆包含G的所有頂點的樹,則該子圖稱為G的生成樹。 生成樹是連通圖的極小連通子圖。這裡所謂極小是指:若在樹中任意增加一條邊,則將
Python基礎知識兩部曲:二
思想 你在 com 計算器 檢查 結果 條件 繼承 ddl 如果沒有看基礎部分第一章,請前往Python基礎知識兩部曲:一 8.函數 1.定義函數: 使用關鍵字def來告訴python你要定義一個函數 接著指出函數名:如下面函數名是--greet_user ()是必須帶上
docker-compose下的java應用啟動順序兩部曲之一:問題分析
在docker-compose編排多個容器時,需要按實際情況控制各容器的啟動順序,本文是《docker-compose下的java應用啟動順序兩部曲》的第一篇,文中會分析啟動順序的重要性,以及啟動順序有問題時會有什麼樣的影響,再給出臨時解決的和官方推薦的兩種解決方案,為下一篇的實戰做好鋪墊。 環境資訊 本次實
LeetCode 167. Two Sum II - Input array is sorted (兩數之和之二 - 輸入的是有序數組)
point find leetcode algorithm 個數 tar div solution runtime Given an array of integers that is already sorted in ascending order, find two
自定義spring boot starter三部曲之二:實戰開發
本文是《自定義spring boot starter三部曲》的第二篇,上一篇中我們通過學習spring cloud的starter,對spring boot的starter有了初步瞭解,也設計好了實戰內容,今天就來一起實現; 三部曲文章連結 《自定義spring boot
Android列表用法之二:實戰ListView高階用法
在我們的專案中,並不是所有列表都是簡單的使用。類似於新聞列表、QQ聊天列表等,具有圖文並排的列表,每個item都有它不同的佈局型別,都有其不同的實現方式。這類複雜的列表表現形式,在各類知名應用當中,不可或缺的存在著。今天我們就來看看,使用ListView能不能實現此類複雜佈局。 今天的例
中國SaaS死或生之二:ERP兩大邪術,盡出歪門邪路
如果說CRM好似SaaS界的“引刀成一快,不負少年頭”,那麼ERP在SaaS領域的執著可謂“莫道桑榆晚,為霞尚滿天”。為何ERP這名馳騁資訊化多年的老兵依舊對SaaS壯心不已,原因或許與高談闊論的轉型、數字化無關,面對時代的交替與恐懼,死生事大。 ERP:三十年河東,今年掙扎不歸西
spring4.1.8擴充套件實戰之二:Aware介面揭祕
接下來通過分析spring原始碼,我們來看看典型的Aware子類有哪些,使用場景是什麼? 在spring容器初始化過程中,會執行AbstractApplicationContext類的prepareBeanFactory方法,這裡面會建立一個bean後置處理器
Kubernetes與大資料之二:編譯並執行基於Scalar的Spark程式WordCount
一、前言 通過SBT編譯scala程式然後在Kubernetes使用Spark執行WordCount任務。 轉載自https://blog.csdn.net/cloudvtech 二、安裝環境和編譯 2.1 安裝SBT mv bintray-sbt-rpm
vuejs中使用vuex的兩種方案之二
index.js檔案demo 這裡有個很奇怪的問題,我用nuxt,js構建的專案,註釋掉這三句程式碼也沒問題 import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const state = (