亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

k8s數據存儲之Volume如何使用

發布時間:2023-03-11 10:21:01 來源:億速云 閱讀:252 作者:iii 欄目:開發技術

這篇文章主要講解了“k8s數據存儲之Volume如何使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“k8s數據存儲之Volume如何使用”吧!

一、什么是Volume

通過之前學習了解到,k8s中Pod是最小的運行單元,Pod中運行的是一個個容器,但是容器的生命周期可能很短,被頻繁地創建和銷毀。

在學習docker的時候,創建一個容器,如果沒有指定容器的數據卷,容器中的文件在磁盤上通常是臨時存放的,這就給容器中運行的重要應用程序帶來了一些問題 ,比如像下面的場景:

  • 當容器崩潰時文件丟失,kubelet 會重新啟動容器,但容器會以干凈的狀態重啟,之前保存在容器中的數據也會被清除 ;

  • 當在一個 Pod 中同時運行多個容器時,常常需要在這些容器之間共享文件 ;

基于這些問題,k8s中就出現了“卷”這個組件來解決

Kubernetes 卷(Volume) 這一抽象概念能夠解決這兩個問題,卷的核心是包含一些數據的目錄,Pod 中的容器可以訪問該目錄

二、k8s中的Volume

關于k8s中卷的總結:

  • Volume是k8s抽象出來的對象,它被定義在Pod上,然后被一個Pod里的多個容器掛載到具體的文件目錄下 ;

  • kubernetes通過Volume實現同一個Pod中不同容器之間的數據共享以及數據的持久化存儲 ;

  • Volume的生命周期不與Pod中單個容器的生命周期相關,當容器終止或者重啟時,Volume中的數據也不會丟失;

  • K8S可以支持許多類型的卷,Pod 也能同時使用任意數量的卷;

三、k8s中常見的Volume類型

k8s中提供了很多種類型的Volume,下面列舉一些常用的類型:

  • 常規存儲:EmptyDir、HostPath ;

  • 高級存儲:PV、PVC ;

  • 配置存儲:ConfigMap、Secret ;

  • 其他:網絡存儲系統 NFS、CIFS,包括云服務商提供的、本地、分布式 ;

接下來,針對日常業務中使用較多的Volume,通過實例一一演示下各自的使用。

四、Volume 之 EmptyDir 

4.1 EmptyDir 特點

  • 當 Pod 指定到某個節點上時,首先創建的是一個 emptyDir 卷,只要 Pod 在該節點上運行卷就一直存在 ;

  • 當 Pod 因為某些原因被從節點上刪除時,emptyDir 卷中的數據也會永久刪除 ;

  • 容器崩潰并不會導致 Pod 被從節點上移除,所以容器崩潰時 emptyDir 卷中的數據是安全的;

使用場景:臨時緩存空間,存儲一些運行過程中的中繼日志;

4.2 EmptyDir 實現文件共享

如圖所示,我們的需求是,創建一個類型為EmptyDir的Volume,實現兩個容器日志的共享;

k8s數據存儲之Volume如何使用

4.2.1 關于busybox
1、是?個集成了三百多個最常? Linux 命令和?具的軟件;
2、包含了簡單的?具,例如 ls 、 cat 和 echo 等等,還包含了?些更復雜的?具,例grep 、 find 、 telnet等;

4.3 操作步驟

下面通過案例演示下使用的步驟

4.3.1 創建配置模板文件yaml

在當前目錄下創建一個volume-emptydir.yaml 的文件,配置如下內容:

apiVersion: v1
kind: Pod
metadata:
  name: test-volume-emptydir
  namespace: default
spec:
  containers:
  - name: test-nginx
    image: nginx:1.20
    ports:
    - containerPort: 80
    volumeMounts:  # 將nginx-log-volume掛在到nginx容器中,對應的目錄為 /var/log/nginx
    - name: test-log-volume
      mountPath: /var/log/nginx
 
  - name: test-busybox
    image: busybox:1.35.0 
    command: ["/bin/sh","-c","tail -f /usr/local/test/access.log"] # 容器啟動后初始命令,讀取指定文件中內容
    volumeMounts:  # 將nginx-log-volume掛在到busybox容器中,對應的目錄為 /logs
    - name: test-log-volume
      mountPath: /usr/local/test
 
  volumes: # 這里聲明volume存儲劵, name為nginx-log-volume,類型是emptyDir
  - name: test-log-volume
    emptyDir: {}

配置中的關鍵位置如下:

k8s數據存儲之Volume如何使用

4.3.2 創建Pod

使用apply命令執行pod的創建,創建成功后,可以看到在test-volume-emptydir 這個pod里面運行了2個容器;

k8s數據存儲之Volume如何使用

4.3.3 訪問nginx使其產生訪問日志

隨機訪問一下,使nginx中產生部分日志

k8s數據存儲之Volume如何使用

4.3.4 查看容器日志

使用下面的命令查看容器產生的access.log日志

kubectl logs -f test-volume-emptydir -n default -c test-busybox

k8s數據存儲之Volume如何使用

五、Volume 之 hostPath 

上面我們聊了EmptyDir的使用,相信實際操作之后的同學應該能看出來,由于EmptyDir創建的這個Volume是一個虛擬的路徑,所以當其銷毀后,pod中容器產生的數據也就隨之銷毀了,即無法真正實現數據的落盤持久化,于是我們在想,是否可以做到下面這樣呢?

當然是可以的,這就是接下來要說的另一種Volume : hostPath;

k8s數據存儲之Volume如何使用

5.1 hostPath 概述

  • emptyDir中數據沒做持久化,隨著Pod的結束而銷毀,需要持久化到磁盤則選其他方式 ;

  • hostPath類型的磁盤就是掛在了主機的一個文件或者目錄 ;

  • 某些應用需要用到docker的內部文件,這時只需要掛在本機的/var/lib/docker作為hostPath ;

5.2 hostPath類型

根據使用場景的不同,又可以細分成多個類型

  • Directory 給定的目錄路徑必須存在 ;

  • DirectoryOrCreate 如果給定路徑不存在,將根據需要在那里創建一個空目錄 ;

  • File 給定路徑上必須存在對應文件 ;

  • FileOrCreate 如果給定路徑不存在,將根據需要在那里創建一個空文件 ;

5.3 hostPath 操作演示

5.3.1 創建模板配置文件

在當前目錄下創建一個名叫volume-hostpath.yaml的配置文件,內容如下:

apiVersion: v1
kind: Pod
metadata:
  name: hostpath-volume-test
  namespace: default
spec:
  containers:
  - name: test-nginx
    image: nginx:1.20
    ports:
    - containerPort: 80
    volumeMounts:  # 將nginx-log-volume掛在到nginx容器中,對應的目錄為 /var/log/nginx
    - name: test-log-volume
      mountPath: /var/log/nginx
 
  - name: test-busybox
    image: busybox:1.35.0 
    command: ["/bin/sh","-c","tail -f /usr/local/test/access.log"] # 容器啟動后初始命令,讀取指定文件中內容
    volumeMounts:  # 將nginx-log-volume掛在到busybox容器中,對應的目錄為 /logs
    - name: test-log-volume
      mountPath: /usr/local/test
 
  volumes: # 這里聲明volume存儲劵, name為test-log-volume,類型是hostPath
  - name: test-log-volume
    hostPath:
        path: /usr/local/test
        type: DirectoryOrCreate #如果給定路徑不存在,將根據需要在那里創建一個空目錄

主要的配置和上面的emptyDir的案例中的差不多,最后的volumes類型那里改成hostPath相關的參數;

5.3.2 使用apply命令創建pod

創建成功后,可以看到產生了一個hostpath開頭的一個Pod,里面包含兩個容器;

k8s數據存儲之Volume如何使用

5.3.3 訪問nginx使其產生訪問日志

k8s數據存儲之Volume如何使用

5.3.4 查看容器輸出日志

這這里注意使用你自己定義的那個名稱

kubectl logs -f hostpath-volume-test -n default -c test-busybox

k8s數據存儲之Volume如何使用

5.3.5 查看掛載目錄日志文件

工作節點查看對應的掛載目錄的日志文件,登錄工作節點的服務器,可以看到對應的nginx日志文件也在里面了;

k8s數據存儲之Volume如何使用

5.3.6 刪除當前的pod

k8s數據存儲之Volume如何使用

刪除pod之后發現工作節點目錄下的日志文件依然存在

k8s數據存儲之Volume如何使用

5.4 emptyDir和hostPath的對比

通過上面的演示,最后來對比一下emptyDir和hostPath使用上的異同點:

  • 兩者都是本地存儲卷方式 ;

  • emptyDir是臨時存儲空間,完全不提供持久化支持;

  • hostPath的卷數據是持久化在node節點的文件系統中的,即便pod已經被刪除了,volume卷中的數據還留存在node節點上;

六、Volume 之 ConfigMap 

6.1 ConfigMap需求場景

很多應用在其初始化或運行期間要依賴一些配置信息 ,并且在大多數時候, 存在要調整配置參數所設置的數值的需求,而ConfigMap是Kubernetes 用來向應用 Pod 中注入配置數據的一種方法 ;

6.2 ConfigMap簡介

  • 是K8S的一種API對象,用來把【非加密數據】保存到鍵值對中,比如etcd ;

  • 可以用作環境變量、命令行參數等,將環境變量、配置信息和容器鏡像解耦,便于應用配置的修改 ;

使用方式

kubectl create configmap 命令,基于目錄、 文件或者鍵值對來創建 ConfigMap

如下示例:

kubectl create configmap NAME --from-literal=key1=value1 --from-literal=key2=value2

6.3 ConfigMap 創建操作演示

6.3.1 使用命令行創建

使用下面的命令進行ConfigMap的創建

kubectl create configmap test-config --from-literal=account=test --from-literal=password=123456

k8s數據存儲之Volume如何使用

6.3.2 查看創建的configmap
kubectl get configmap test-config -o yaml

k8s數據存儲之Volume如何使用

6.3.3 使用yaml配置文件創建

在當前目錄下創建一個 test-configmap.yaml的文件,核心配置內容如下:

apiVersion: v1
kind: ConfigMap
metadata:
  name: congge-configmap
  namespace: default
data:
  info: 
    username:congge
    password:123456

使用apply命令執行創建

k8s數據存儲之Volume如何使用

6.3.4 查看configmap詳情
kubectl describe cm congge-configmap -n default

k8s數據存儲之Volume如何使用

6.4 ConfigMap 使用操作演示

上面演示了兩種創建configmap的方式,configmap創建出來后怎么使用呢?簡單來說,只需要開啟一個pod,將這個configmap掛載進去使用即可;

6.4.1 使用配置文件創建pod

注意,里面的Volume使用上文yaml中創建的那個configmap的名字:

apiVersion: v1
kind: Pod
metadata:
  name: pod-configmap
  namespace: default
spec:
  containers:
  - name: nginx
    image: nginx:1.20
    volumeMounts: # configmap掛載的目錄
    - name: config
      mountPath: /config
 
  volumes: # 聲明configmap
  - name: config
    configMap:
      name: congge-configmap

執行apply命令進行創建,然后檢查下是否創建成功;

k8s數據存儲之Volume如何使用

6.4.2 驗證configmap中配置的值

進入pod容器

kubectl exec -it pod-configmap -n default -- /bin/sh

k8s數據存儲之Volume如何使用

進入配置文件中的掛載目錄 /config,查看配置信息

k8s數據存儲之Volume如何使用

七、Volume 之 Secret 

有些配置需要加密存儲,ConfigMap只能使用明文保存,因此ConfigMap就不適合了;

7.1 Secret 簡介

Secret 作用

  • 用來保存敏感信息,例如密碼、秘鑰、證書、OAuth 令牌和 ssh key等 ;

  • 就不需要把這些敏感數據暴露到鏡像或者Pod中 ;

不管是哪種Volume,最終都是為Pod服務的,對于Pod來說,可以用三種方式之一來使用 Secret:

作為掛載到一個或多個容器上的卷 中的文件 ;作為容器的環境變量 ;由 kubelet 在為 Pod 拉取鏡像時使用 ;

7.2 secret 常見類型

下面列舉secret中常用的幾種類型

7.2.1 dockerconfigjson

用來存儲私有 docker registry的認證信息

7.2.2 Service Account

1、只要與Kubernetes API有交互的Pod,都會自動擁有此種類型的Secret;

2、K8S自動創建,并且會自動掛載到Pod的 /run/secrets/kubernetes.io/serviceaccount 目錄中;

7.2.3 Opaque

加密類型為base64,其特點就是將明文改為了密文

7.3 Secret  

Opaque使用

下面以Secret中Opaque這種類型進行說明,首先用一個字符串做下測試,簡單來說,就是將字符串進行base64編碼,得到一串類似于密文的字符串;

k8s數據存儲之Volume如何使用

7.3.1 創建模板配置文件

在當前目錄下創建一個secret.yaml的配置文件,內容如下,其中,username和password用的就是上面測試中看到的:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  username: YWRtaW4=
  password: MTIzNDU2
7.3.2 使用apply命令創建secret

創建成功后,可以順便使用get查看下創建的secret;

k8s數據存儲之Volume如何使用

7.3.3 查看my-secret詳細信息

使用下面的命令進行查看

kubectl get secret my-secret -o yaml

k8s數據存儲之Volume如何使用

7.3.4 創建pod

創建一個新的pod并使用上面這個secret,在當前目錄下,創建一個名叫pod-secret-volume.yaml的配置文件,內容如下:

apiVersion: v1
kind: Pod
metadata:
  name: pod-secret
spec:
  containers:
  - name: nginx
    image: nginx:1.20
    volumeMounts: # secret掛載
    - name: congge-config
      mountPath: /etc/secret
  volumes:
  - name: congge-config
    secret:
      secretName: my-secret

使用apply命令執行并創建pod

k8s數據存儲之Volume如何使用

7.3.5 查看secret信息

在pod中的secret信息實際已經被解密,使用下面的命令進入到pod

kubectl exec -it pod-secret -- /bin/sh

查看指定目錄下secret中配置的username和password,可以看到,在pod中,加密的信息已被解密了;

k8s數據存儲之Volume如何使用

感謝各位的閱讀,以上就是“k8s數據存儲之Volume如何使用”的內容了,經過本文的學習后,相信大家對k8s數據存儲之Volume如何使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云南省| 深泽县| 法库县| 胶州市| 邵阳县| 岑溪市| 东安县| 松滋市| 大连市| 高雄县| 宜章县| 宝山区| 开阳县| 额尔古纳市| 松潘县| 民权县| 呼图壁县| 郎溪县| 兰州市| 巫溪县| 通化县| 衡东县| 昭通市| 大同县| 邵阳县| 莱州市| 乐平市| 和平县| 神农架林区| 晋宁县| 德格县| 湖北省| 桐庐县| 陵水| 泸州市| 郧西县| 鄱阳县| 青岛市| 河曲县| 彭水| 金溪县|