kubernetes系列教程(九)初識(shí)Pod存儲(chǔ)管理

視頻教程連接kubernetes快速入門


寫在前面

上一篇文章中kubernetes系列教程(八)Pod健康檢查機(jī)制介紹了kubernetes中Pod健康檢查機(jī)制,通過實(shí)戰(zhàn)介紹了kubernetes中兩種健康檢查探針:livenessProbe存活檢查,readinessProbe就緒檢查,存活檢查用于檢查應(yīng)用的可用性,就緒檢查用于檢查容器是否準(zhǔn)備接受流量,健康檢查包含三種探測(cè)的方法:exec命令行探測(cè),tcpSocket端口檢測(cè),httpGet請(qǐng)求檢測(cè),分別適用于不同場(chǎng)景下的健康檢查。接下來(lái)介紹kubernetes系列教程pod的存儲(chǔ)管理。

kubernetes存儲(chǔ)管理按照發(fā)展的歷程,涉及到有Volume,PV(Persistent Volume)和PVC(PersistentVolumeClaims),和StorageClass,Volume是最早提出的存儲(chǔ)卷,主要解決容器和數(shù)據(jù)存儲(chǔ)的依賴關(guān)系,抽象底層驅(qū)動(dòng)以支持不同的存儲(chǔ)類型;使用Volume需要了解底層存儲(chǔ)細(xì)節(jié),因此提出了PV,Persistent Volume是由k8s管理員定義的存儲(chǔ)單元,應(yīng)用端使用PersistentVolumeClaims聲明去調(diào)用PV存儲(chǔ),進(jìn)一步抽象了底層存儲(chǔ);隨著PV數(shù)量的增加,管理員需要不停的定義PV的數(shù)量,衍生了通過StorageClass動(dòng)態(tài)生成PV,StorageClass通過PVC中聲明存儲(chǔ)的容量,會(huì)調(diào)用底層的提供商生成PV。本文介紹Volume的使用,下篇文章介紹PV,PVC和StorageClass。

  • Volume 存儲(chǔ)卷,獨(dú)立于容器,后端和不同的存儲(chǔ)驅(qū)動(dòng)對(duì)接
  • PV Persistent Volume持久化存儲(chǔ)卷,和node類似,是一種集群資源,由管理員定義,對(duì)接不同的存儲(chǔ)
  • PVC PersistentVolumeClaims持久化存儲(chǔ)聲明,和pod類似,作為PV的使用者
  • StorageClass 動(dòng)態(tài)存儲(chǔ)類型,分為靜態(tài)和動(dòng)態(tài)兩種類型,通過在PVC中定義存儲(chǔ)類型,自動(dòng)創(chuàng)建所需PV

1. kubernetes存儲(chǔ)管理

1.1 存儲(chǔ)概述

kubernetes容器中的數(shù)據(jù)是臨時(shí)的,即當(dāng)重啟重啟或crash后容器的數(shù)據(jù)將會(huì)丟失,此外容器之間有共享存儲(chǔ)的需求,所以kubernetes中提供了volume存儲(chǔ)的抽象,volume后端能夠支持多種不同的plugin驅(qū)動(dòng),通過.spec.volumes中定義一個(gè)存儲(chǔ),然后在容器中.spec.containers.volumeMounts調(diào)用,最終在容器內(nèi)部以目錄的形式呈現(xiàn)。

kubernetes內(nèi)置能支持多種不同的驅(qū)動(dòng)類型,大體上可以分為四種類型:1. 公/私有云驅(qū)動(dòng)接口,如awsElasticBlockStore實(shí)現(xiàn)與aws EBS集成,2. 開源存儲(chǔ)驅(qū)動(dòng)接口,如ceph rbd,實(shí)現(xiàn)與ceph rb塊存儲(chǔ)對(duì)接,3. 本地臨時(shí)存儲(chǔ),如hostPath,4. kubernetes對(duì)象API驅(qū)動(dòng)接口,實(shí)現(xiàn)其他對(duì)象調(diào)用,如configmap,每種存儲(chǔ)支持不同的驅(qū)動(dòng),如下介紹:

  1. 公/私有云驅(qū)動(dòng)接口
  • awsElasticBlockStore AWS的EBS云盤
  • azureDisk 微軟azure云盤
  • azureFile 微軟NAS存儲(chǔ)
  • gcePersistentDisk google云盤
  • cinder openstack cinder云盤
  • vsphereVolume VMware的VMFS存儲(chǔ)
  • scaleIO EMC分布式存儲(chǔ)
  1. 開源存儲(chǔ)驅(qū)動(dòng)接口
  • ceph rbd ceph塊存儲(chǔ)
  • cephfs ceph文件存儲(chǔ)
  • glusterfs glusterfs存儲(chǔ)
  • nfs nfs文件
  • iscsi
  • flexvolume
  • csi 社區(qū)標(biāo)準(zhǔn)化驅(qū)動(dòng)
  • flocker
  1. 本地臨時(shí)存儲(chǔ)
  • hostpath 宿主機(jī)文件
  • emptyDir 臨時(shí)目錄
  1. kubernetes對(duì)象API驅(qū)動(dòng)接口
  • configMap 調(diào)用configmap對(duì)象,注入配置文件
  • secrets 調(diào)用secrets對(duì)象,注入秘文配置文件
  • persistentVolumeClaim 通過pvc調(diào)用存儲(chǔ)
  • downloadAPI 下載URL
  • projected

1.2 emptyDir臨時(shí)存儲(chǔ)

emptyDir是一種臨時(shí)存儲(chǔ),pod創(chuàng)建的時(shí)候會(huì)在node節(jié)點(diǎn)上為容器申請(qǐng)一個(gè)臨時(shí)的目錄,跟隨容器的生命周期,如容器刪除,emptyDir定義的臨時(shí)存儲(chǔ)空間也會(huì)隨之刪除,容器發(fā)生意外crash則不受影響,同時(shí)如果容器發(fā)生了遷移,其上的數(shù)據(jù)也會(huì)丟失,emptyDir一般用于測(cè)試,或者緩存場(chǎng)景。

  1. 定義一個(gè)emptyDir存儲(chǔ)大小為1G,將其掛載到redis的/data目錄中
[root@node-1 happylau]# cat emptydir-redis.yaml
apiVersion: v1
kind: Pod
metadata:
  name: emptydir-redis
  labels:
    volume: emptydir
  annotations:
    kubernetes.io/storage: emptyDir
spec:
  containers:
  - name: emptydir-redis
    image: redis:latest
    imagePullPolicy: IfNotPresent
    ports:
    - name: redis-6379-port
      protocol: TCP
      containerPort: 6379
    volumeMounts: #將定義的驅(qū)動(dòng)emptydir-redis掛載到容器的/data目錄,通過名字方式關(guān)聯(lián)
    - name: emptydir-redis
      mountPath: /data
  volumes:        #定義一個(gè)存儲(chǔ),驅(qū)動(dòng)類型為emptyDir,大小1G
  - name: emptydir-redis
    emptyDir: 
      sizeLimit: 1Gi
  1. 生成redis pod,并查看describe pod的詳情信息
[root@node-1 happylau]# kubectl apply -f emptydir-redis.yaml 
pod/emptydir-redis created

執(zhí)行kubectl describe pods emptydir-redis查看容器的存儲(chǔ)掛載信息
Containers:
  emptydir-redis:
    Container ID:   docker://dddd9f3d0e395d784c08b712631d2b0c259bfdb30b0c655a0fc8021492f1ecf9
    Image:          redis:latest
    Image ID:       docker-pullable://redis@sha256:cb379e1a076fcd3d3f09e10d7b47ca631fb98fb33149ab559fa02c1b11436345
    Port:           6379/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Tue, 01 Oct 2019 11:04:30 +0800
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:   #掛載信息,將emptydir-redis掛載到/data目錄,且是rw讀寫狀態(tài)
      /data from emptydir-redis (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-5qwmc (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:       #定義了一個(gè)EmptyDir類型的存儲(chǔ),大小為1Gi
  emptydir-redis:
    Type:       EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:     
    SizeLimit:  1Gi
  default-token-5qwmc:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-5qwmc
    Optional:    false
  1. 向redis中寫入數(shù)據(jù)
獲取pod的ip地址
[root@node-1 happylau]# kubectl get pods emptydir-redis -o wide 
NAME             READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
emptydir-redis   1/1     Running   1          17m   10.244.1.27   node-2   <none>           <none>


安裝客戶端redis-cli
[root@node-1 ~]# yum install redis

向redis中寫入兩個(gè)key
10.244.1.27:6379> set volume emptydir
OK
10.244.1.27:6379> set username happylauliu
OK
10.244.1.27:6379> get volume
"emptydir"
10.244.1.27:6379> get username
"happylauliu"
  1. 登陸到pod中安裝一個(gè)查看進(jìn)程的工具procps,進(jìn)程一般為1,如下圖redis-server進(jìn)程,可以直接kill,進(jìn)程被kill后kubelet會(huì)自動(dòng)將進(jìn)程重啟
登陸容器
[root@node-1 ~]# kubectl exec -it emptydir-redis /bin/bash

安裝軟件
root@emptydir-redis:/data# apt-get update ; apt-get install procps

可以通過top查看進(jìn)程,進(jìn)程號(hào)一般為1
root@emptydir-redis:/data# kill 1
redis-server進(jìn)程
  1. pod異常重啟后,再次登錄redis并查看redis中的數(shù)據(jù)內(nèi)容,發(fā)現(xiàn)數(shù)據(jù)沒有丟失。
[root@node-1 ~]# redis-cli -h 10.244.1.27
10.244.1.27:6379> get volume
"emptydir"
10.244.1.27:6379> get username
"happylauliu"
  1. emptyDir實(shí)際是宿主機(jī)上創(chuàng)建的一個(gè)目錄,將目錄以bind mount的形勢(shì)掛載到容器中,跟隨容器的生命周期
[root@node-2 ~]# docker container  list |grep redis
e0e9a6b0ed77        01a52b3b5cd1            "docker-entrypoint.s…"   20 minutes ago      Up 20 minutes                           k8s_emptydir-redis_emptydir-redis_default_4baadb25-1e62-4cf5-9724-821d04dcdd44_2
dfef32905fe5        k8s.gcr.io/pause:3.1    "/pause"                 45 minutes ago      Up 45 minutes                           k8s_POD_emptydir-redis_default_4baadb25-1e62-4cf5-9724-821d04dcdd44_0

docker container inspect e0e9a6b0ed77查看存儲(chǔ)內(nèi)容如下圖:

empty存儲(chǔ)mount信息

查看目錄的信息:

[root@node-2 ~]# ls -l /var/lib/kubelet/pods/4baadb25-1e62-4cf5-9724-821d04dcdd44/volumes/kubernetes.io~empty-dir/emptydir-redis
總用量 4
-rw-r--r-- 1 polkitd input 156 10月  8 14:55 dump.rdb
  1. Pod刪除后,volume的信息也隨之刪除
[root@node-1 ~]# kubectl delete pods emptydir-redis 
pod "emptydir-redis" deleted
[root@node-1 ~]# ssh node-2
Last login: Tue Oct  8 15:15:41 2019 from 10.254.100.101
[root@node-2 ~]# ls -l /var/lib/kubelet/pods/4baadb25-1e62-4cf5-9724-821d04dcdd44/volumes/kubernetes.io~empty-dir/emptydir-redis
ls: 無(wú)法訪問/var/lib/kubelet/pods/4baadb25-1e62-4cf5-9724-821d04dcdd44/volumes/kubernetes.io~empty-dir/emptydir-redis: 沒有那個(gè)文件或目錄

小結(jié):emptyDir是host上定義的一塊臨時(shí)存儲(chǔ),通過bind mount的形式掛載到容器中使用,容器重啟數(shù)據(jù)會(huì)保留,容器刪除則volume會(huì)隨之刪除。

1.3 hostPath主機(jī)存儲(chǔ)

與emptyDir類似,hostpath支持將node節(jié)點(diǎn)的目錄或文件掛載到容器中使用,用于單機(jī)測(cè)試場(chǎng)景,此外適用于一些容器業(yè)務(wù)需要訪問宿主機(jī)目錄,如監(jiān)控系統(tǒng)訪問/proc和/sys目錄,日志系統(tǒng)訪問/var/lib/docker目錄的一些場(chǎng)景。支持設(shè)置不同的type類型

  • Directory 本地存在的目錄
  • DirectoryOrCreate 目錄,如果不存在則創(chuàng)建,權(quán)限設(shè)置為755,屬主和組設(shè)置和kubelet一致
  • File 本地存在文件
  • FileOrCreate 文件,如果不存在則創(chuàng)建,權(quán)限設(shè)置為644,屬主和組設(shè)置和kubelet一致
  • Socket 本地已存在Socket文件
  • CharDevice 本地已存在的Char字符設(shè)備
  • BlockDevice 本地已存在的Block塊設(shè)備
  1. 掛載本地/mnt目錄到容器中
[root@node-1 happylau]# cat hostpath-demo.yaml
apiVersion: v1
kind: Pod
metadata:
  name: hostpath-demo
  labels:
    storage: hostpath
  annotations:
    kubernetes.io/storage: hostpath
spec:
  containers:
  - name: nginx
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - name: nginx-http-port
      protocol: TCP
      containerPort: 80
    volumeMounts: #掛載到nginx的web站點(diǎn)目錄下
    - name: hostpath-demo
      mountPath: /usr/share/nginx/html
  volumes:  #定一個(gè)hostPath本地的存儲(chǔ)
  - name: hostpath-demo
    hostPath:
      type: DirectoryOrCreate
      path: /mnt/data
  1. 生成nginx容器和web站點(diǎn)數(shù)據(jù)
[root@node-1 happylau]# kubectl apply -f hostpath-demo.yaml 
pod/hostpath-demo created

獲取pod所在的node節(jié)點(diǎn)
[root@node-1 happylau]# kubectl get pods hostpath-demo -o wide 
NAME            READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
hostpath-demo   1/1     Running   0          31s   10.244.2.24   node-3   <none>           <none>

生成web站點(diǎn)的數(shù)據(jù)
[root@node-1 happylau]# ssh node-3
Last login: Tue Oct  8 22:49:14 2019 from 10.254.100.101
[root@node-3 ~]# echo "hostPath test page" >/mnt/data/index.html
[root@node-3 ~]# curl http://10.244.2.24
hostPath test page
  1. 查看容器掛載存儲(chǔ)的情況,以bind mount的形式掛載到容器中
hostPath的容器掛載信息
  1. 模擬容器重啟的的故障,容器重啟后volume中的數(shù)據(jù)依保留
#docker層面kill掉進(jìn)程
[root@node-3 ~]# docker container  list |grep hostpath
39a7e21afebb        f949e7d76d63           "nginx -g 'daemon of…"   11 minutes ago      Up 11 minutes                                k8s_nginx_hostpath-demo_default_6da41e3d-8585-4997-bf90-255ca0948030_0
490f50108e41        k8s.gcr.io/pause:3.1   "/pause"                 11 minutes ago      Up 11 minutes                                k8s_POD_hostpath-demo_default_6da41e3d-8585-4997-bf90-255ca0948030_0
[root@node-3 ~]# docker container kill 39a7e21afebb
39a7e21afebb
[root@node-3 ~]# exit
登出


#獲取pod的地址,通過RESTART可知,容器重啟過一次,測(cè)試數(shù)據(jù)依舊保留
[root@node-1 happylau]# kubectl get pods -o wide  hostpath-demo 
NAME                                   READY   STATUS    RESTARTS   AGE   IP            NODE     NOMINATED NODE   READINESS GATES
hostpath-demo                          1/1     Running   1          12m   10.244.2.24   node-3   <none>           <none>
[root@node-1 happylau]# curl http://10.244.2.24
hostPath test page

小結(jié):hostPath與emptyDir類似提供臨時(shí)的存儲(chǔ),hostPath適用于一些容器需要訪問宿主機(jī)目錄或文件的場(chǎng)景,對(duì)于數(shù)據(jù)持久化而言都不是很好的實(shí)現(xiàn)方案。

1.4 NFS存儲(chǔ)對(duì)接

NFS是實(shí)現(xiàn)Network File System網(wǎng)絡(luò)文件共享的NAS存儲(chǔ),kubernetes與NFS對(duì)接實(shí)現(xiàn)存儲(chǔ)的共享,當(dāng)容器刪除不影響存儲(chǔ)且可以實(shí)現(xiàn)跨機(jī)存儲(chǔ)共享,本文以搭建一個(gè)NFS存儲(chǔ)實(shí)現(xiàn)kubernetes對(duì)接。

  1. 準(zhǔn)備一個(gè)nfs server共享,將node-1的/mnt/data目錄共享
安裝nfs服務(wù)
[root@node-1 ~]# yum install nfs-utils -y

配置nfs共享,提前創(chuàng)建好目錄
[root@node-1 ~]# cat /etc/exports
/mnt/data   10.254.100.0/24(rw)

重啟并驗(yàn)證
[root@node-1 ~]# systemctl restart nfs
[root@node-1 ~]# showmount -e node-1
Export list for node-1:
/mnt/data 10.254.100.0/24
  1. kubernets使用nfs的驅(qū)動(dòng)對(duì)接
[root@node-1 happylau]# cat nfs-demo.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nfs-demo 
  labels:
    storage: nfs 
  annotations:
    kubernetes.io/storage: nfs
spec:
  containers:
  - name: nginx
    image: nginx:latest
    imagePullPolicy: IfNotPresent
    ports:
    - name: nginx-http-port
      protocol: TCP
      containerPort: 80
    volumeMounts: #掛載到nfs的目錄下
    - name: nfs-demo 
      mountPath: /usr/share/nginx/html
  volumes: #定義一個(gè)nfs驅(qū)動(dòng)的存儲(chǔ)
  - name: nfs-demo
    nfs:
      server: 10.254.100.101
      path: /mnt/data
  1. 生成pod,使用kubectl get pods的時(shí)候提示events中報(bào)錯(cuò)信息,掛載失敗
Events:
  Type     Reason       Age   From               Message
  ----     ------       ----  ----               -------
  Normal   Scheduled    40s   default-scheduler  Successfully assigned default/nfs-demo to node-2
  Warning  FailedMount  39s   kubelet, node-2    MountVolume.SetUp failed for volume "nfs-demo" : mount failed: exit status 32
Mounting command: systemd-run
Mounting arguments: --description=Kubernetes transient mount for /var/lib/kubelet/pods/78bf6a81-082d-4d6c-a163-75241bf21cde/volumes/kubernetes.io~nfs/nfs-demo --scope -- mount -t nfs 10.254.100.101:/mnt/data /var/lib/kubelet/pods/78bf6a81-082d-4d6c-a163-75241bf21cde/volumes/kubernetes.io~nfs/nfs-demo
Output: Running scope as unit run-29843.scope.
mount: wrong fs type, bad option, bad superblock on 10.254.100.101:/mnt/data,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)
  1. 從上面的步驟中得知,宿主機(jī)掛載nfs的時(shí)候提示沒有mount.nfs的命令,因此需要在所有的node節(jié)點(diǎn)上安裝上nfs的客戶端軟件nfs-utils,以node-2為例,其他節(jié)點(diǎn)類似
[root@node-1 happylau]# ssh node-2
Last login: Tue Oct  8 15:22:04 2019 from 10.254.100.101
[root@node-2 ~]# yum install nfs-utils -y
  1. 測(cè)試站點(diǎn)數(shù)據(jù)
[root@node-1 happylau]# kubectl get pods nfs-demo -o wide 
NAME       READY   STATUS    RESTARTS   AGE     IP            NODE     NOMINATED NODE   READINESS GATES
nfs-demo   1/1     Running   0          4m41s   10.244.1.28   node-2   <none>           <none>
[root@node-1 happylau]# echo "nfs test age" >/mnt/data/index.html
[root@node-1 happylau]# curl http://10.244.1.28
nfs test age
  1. 刪除pod后查看nfs共享的數(shù)據(jù)情況,原有數(shù)據(jù)依舊保留
[root@node-1 happylau]# kubectl delete pods nfs-demo 
pod "nfs-demo" deleted

[root@node-1 happylau]# mount.nfs node-1:/mnt/data/ /media/
[root@node-1 happylau]# ls -l /media/
總用量 4
-rw-r--r-- 1 root root 13 10月  8 23:26 index.html

1.5 TKE使用volume存儲(chǔ)

TKE支持在創(chuàng)建Workload時(shí)如Deployments,DaemonSets,StatefulSets等指定存儲(chǔ)卷,支持臨時(shí)目錄emptyDir,主機(jī)路徑hostPath,nfs盤,pvc,云硬盤,configmap,secrets,此處以騰訊云CFS為例(提前在CFS中創(chuàng)建好存儲(chǔ),確保CFS和容器宿主機(jī)在同一個(gè)VPC網(wǎng)絡(luò)內(nèi))。

  1. 創(chuàng)建存儲(chǔ)卷,使用NFS掛載騰訊云CFS存儲(chǔ)
TKE創(chuàng)建nfs的volume
  1. Pod中使用存儲(chǔ),通過volume-nfs-demo名字調(diào)用存儲(chǔ)卷
TKE中pod使用volume存儲(chǔ)
  1. 對(duì)應(yīng)生成的yaml文件內(nèi)容如下
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
    description: demo
  creationTimestamp: "2019-10-08T15:45:18Z"
  generation: 1
  labels:
    k8s-app: the-volume-demo
    qcloud-app: the-volume-demo
  name: the-volume-demo
  namespace: default
  resourceVersion: "618380753"
  selfLink: /apis/apps/v1beta2/namespaces/default/deployments/the-volume-demo
  uid: a0fc4600-e9e2-11e9-b3f4-decf0ef369cf
spec:
  minReadySeconds: 10
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: the-volume-demo
      qcloud-app: the-volume-demo
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s-app: the-volume-demo
        qcloud-app: the-volume-demo
    spec:
      containers:
      - image: nginx:latest
        imagePullPolicy: Always
        name: nginx-demo
        resources:
          limits:
            cpu: 500m
            memory: 1Gi
          requests:
            cpu: 250m
            memory: 256Mi
        securityContext:
          privileged: false
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts: #掛載到pod中
        - mountPath: /usr/share/nginx/html
          name: volume-nfs-demo
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: qcloudregistrykey
      - name: tencenthubkey
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes: #CFS存儲(chǔ)
      - name: volume-nfs-demo
        nfs:
          path: /
          server: 10.66.200.7

寫在最后

本文介紹了kubernetes存儲(chǔ)中最基本volume的使用,介紹了volume支持多種不同驅(qū)動(dòng),以實(shí)際案例介紹emptyDir,hostPath,nfs驅(qū)動(dòng)的對(duì)接,并介紹了TKE下volume功能的使用。由于volume需要知道底層存儲(chǔ)的細(xì)節(jié),不便于廣泛使用,后來(lái)衍生為PV,管理員定義PV實(shí)現(xiàn)和底層存儲(chǔ)對(duì)接,用戶通過PVC使用PV,下節(jié)我們將介紹PV/PVC和StorageClass的使用。

參考文獻(xiàn)

volume管理:https://kubernetes.io/docs/concepts/storage/volumes/

pod中使用volume:https://kubernetes.io/docs/tasks/configure-pod-container/configure-volume-storage/


當(dāng)你的才華撐不起你的野心時(shí),你就應(yīng)該靜下心來(lái)學(xué)習(xí)

返回kubernetes系列教程目錄

如果覺得文章對(duì)您有幫助,請(qǐng)訂閱專欄,分享給有需要的朋友吧??

關(guān)于作者 劉海平(HappyLau )云計(jì)算高級(jí)顧問 目前在騰訊云從事公有云相關(guān)工作,曾就職于酷狗,EasyStack,擁有多年公有云+私有云計(jì)算架構(gòu)設(shè)計(jì),運(yùn)維,交付相關(guān)經(jīng)驗(yàn),參與了酷狗,南方電網(wǎng),國(guó)泰君安等大型私有云平臺(tái)建設(shè),精通Linux,Kubernetes,OpenStack,Ceph等開源技術(shù),在云計(jì)算領(lǐng)域具有豐富實(shí)戰(zhàn)經(jīng)驗(yàn),擁有RHCA/OpenStack/Linux授課經(jīng)驗(yàn)。

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容