1. 程式人生 > >Kubernetes持久卷實戰兩部曲之二:細說開發

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
  1. 型別是PersistentVolume;
  2. capacity.storage=1Gi表示這個PV最大為1G;
  3. accessModes=ReadWriteOnce該pv只能被單個節點讀寫;
  4. 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
  1. 映象檔案用的是上一步推送到映象倉庫的那個;
  2. volumeMounts中的mountPath就是程式中寫入檔案的位置;
  3. 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語言版本的積神經網路CNNCNN網路的總體結構

      上一節我們總體介紹專案並說明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 = (