您好,登錄后才能下訂單哦!
在虛擬化的一系列解決方案中,數(shù)據(jù)的持久化都是需要我們非常關(guān)心的問題,dokcer是這樣,Kubernetes也是這樣。不過在Kubernetes中,有一個(gè)數(shù)據(jù)卷的概念。
我們經(jīng)常都會(huì)說:容器、Pod都是很短暫的!其含義就是容器和Pod的生命周期都是很短暫的,會(huì)被頻繁地銷毀和創(chuàng)建。容器銷毀時(shí),保存在容器內(nèi)部文件系統(tǒng)中的數(shù)據(jù)都會(huì)被清除。
Volume的生命周期獨(dú)立于容器,Pod中的容器可能被銷毀和重啟,但Volume會(huì)被保留。
Kubernetes Volume主要解決了以下兩個(gè)問題:
1)數(shù)據(jù)持久性:通常情況下,容器運(yùn)行起來后,寫到其文件系統(tǒng)的文件是暫時(shí)性的。當(dāng)容器崩潰后,kubelet會(huì)將這個(gè)容器不斷的重啟,當(dāng)達(dá)到重啟的次數(shù)后,容器仍然不可用,那么就會(huì)將這個(gè)容器kill掉,重新生成新的容器。此時(shí),新運(yùn)行的容器并沒有原容器中的數(shù)據(jù),因?yàn)槿萜魇怯社R像創(chuàng)建的;
2)數(shù)據(jù)共享:同一個(gè)Pod中運(yùn)行的容器之間,經(jīng)常會(huì)存在共享文件/共享文件夾的需求;
從根本上來說,一個(gè)數(shù)據(jù)卷僅僅是一個(gè)可以被Pod訪問的目錄或文件。這個(gè)目錄是怎么來的,取決于該數(shù)據(jù)卷的類型。同一個(gè)Pod中的兩個(gè)容器可以將一個(gè)數(shù)據(jù)卷掛載到不同的目錄下。
Volume 提供了對(duì)各種 backend 的抽象,容器在使用 Volume 讀寫數(shù)據(jù)的時(shí)候不需要關(guān)心數(shù)據(jù)到底是存放在本地節(jié)點(diǎn)的文件系統(tǒng)中呢還是云硬盤上。對(duì)它來說,所有類型的 Volume 都只是一個(gè)目錄。
emptyDir 是最基礎(chǔ)的 Volume 類型。正如其名字所示,一個(gè) emptyDir Volume 是 Host 上的一個(gè)空目錄。
emptyDir Volume 對(duì)于容器來說是持久的,對(duì)于 Pod 則不是。當(dāng) Pod 從節(jié)點(diǎn)刪除時(shí),Volume 的內(nèi)容也會(huì)被刪除。但如果只是容器被銷毀而 Pod 還在,則 Volume 不受影響。類似于docker數(shù)據(jù)持久化中的docker manager volume方式!
[root@master yaml]# vim emptyDir.yaml
apiVersion: v1
kind: Pod
metadata:
name: producer-consumer #定義Pod的名稱
spec:
containers:
- image: busybox
name: producer #定義容器的名稱
volumeMounts:
- mountPath: /producer_dir #指定容器內(nèi)的路徑
name: shared-volume #表示把shared-volume掛載到容器中
args: #當(dāng)容器運(yùn)行完成后,執(zhí)行以下的寫操作
- /bin/sh
- -c
- echo "hello k8s" > /producer_dir/hello; sleep 30000
- image: busybox
name: consumer #定義容器的名稱
volumeMounts:
- mountPath: /consumer_dir
name: shared-volume #與上一個(gè)容器一樣
args:
- /bin/sh
- -c
- cat /consumer_dir/hello; sleep 30000
volumes:
- name: shared-volume #定義數(shù)據(jù)卷的名稱,必須與以上掛載的數(shù)據(jù)卷名稱一致
emptyDir: {} #定義一個(gè)類型為emptyDir的數(shù)據(jù)卷,名稱為shared-volume
[root@master yaml]# kubectl apply -f emptyDir.yam #生成所需的Pod資源
[root@master yaml]# kubectl exec -it producer-consumer -c producer /bin/sh
#進(jìn)入第一個(gè)容器進(jìn)行驗(yàn)證
/ # cat /producer_dir/hello
hello k8s
[root@master yaml]# kubectl exec -it producer-consumer -c consumer /bin/sh
#進(jìn)行第二個(gè)容器進(jìn)行驗(yàn)證
/ # cat /consumer_dir/hello
hello k8s
到此可以看出這個(gè)pod中的兩個(gè)容器指定的目錄內(nèi)容都是一樣的,具體是本地的那個(gè)目錄還需進(jìn)一步進(jìn)行驗(yàn)證。
[root@master yaml]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
producer-consumer 2/2 Running 0 7m58s 10.244.2.2 node02 <none> <none>
#可以看出這個(gè)pod是運(yùn)行在node02上的
[root@node02 ~]# docker ps | grep busybox #由于容器較多,根據(jù)使用的鏡像名稱進(jìn)行篩選
4fbd734e1763 busybox "/bin/sh -c 'cat /co…" 8 minutes ago Up 8 minutes k8s_consumer_producer-consumer_default_003a002d-caec-4202-a020-1ae8d6ff7eba_0
b441c2ff2217 busybox "/bin/sh -c 'echo \"h…" 8 minutes ago Up 8 minutes k8s_producer_producer-consumer_default_003a002d-caec-4202-a020-1ae8d6ff7eba_0
[root@node02 ~]# docker inspect 4fbd734e1763 #根據(jù)容器的ID查看容器的詳細(xì)信息
#找到Mounts字段,如下:
"Mounts": [
{
"Type": "bind",
"Source": "/var/lib/kubelet/pods/003a002d-caec-4202-a020-1ae8d6ff7eba/volumes/kubernetes.io~empty-dir/shared-volume",
#此處指定的便是docker host本地的目錄
"Destination": "/consumer_dir", #容器中的目錄
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
[root@node02 ~]# docker inspect b441c2ff2217
"Mounts": [
{
"Type": "bind",
"Source": "/var/lib/kubelet/pods/003a002d-caec-4202-a020-1ae8d6ff7eba/volumes/kubernetes.io~empty-dir/shared-volume",
"Destination": "/producer_dir",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
},
#可以看出這兩個(gè)容器的源目錄是一樣,掛載的是docker host本地的同一個(gè)目錄
[root@node02 ~]# cd /var/lib/kubelet/pods/003a002d-caec-4202-a020-1ae8d6ff7eba/volumes/kubernetes.io~empty-dir/shared-volume
[root@node02 shared-volume]# cat hello
hello k8s
#驗(yàn)證內(nèi)容
由于是Kubernetes集群的環(huán)境,刪除一個(gè)容器比較麻煩,直接將pod刪除,查看docker host本地的數(shù)據(jù)是否存在!
[root@master yaml]# kubectl delete -f emptyDir.yaml
#master節(jié)點(diǎn)將pod刪除
[root@node02 ~]# cd /var/lib/kubelet/pods/003a002d-caec-4202-a020-1ae8d6ff7eba/volumes/kubernetes.io~empty-dir/shared-volume
-bash: cd: /var/lib/kubelet/pods/003a002d-caec-4202-a020-1ae8d6ff7eba/volumes/kubernetes.io~empty-dir/shared-volume: 沒有那個(gè)文件或目錄
#node02進(jìn)行驗(yàn)證,發(fā)現(xiàn)目錄已經(jīng)消失
emptyDir 是Docker Host 上創(chuàng)建的臨時(shí)目錄,其優(yōu)點(diǎn)是能夠方便地為 Pod 中的容器提供共享存儲(chǔ),不需要額外的配置。但它不具備持久性,如果 Pod 不存在了,emptyDir 也就沒有了。根據(jù)這個(gè)特性,emptyDir 特別適合 Pod 中的容器需要臨時(shí)共享存儲(chǔ)空間的場(chǎng)景!
簡(jiǎn)單來說就是,如果容器被刪除,數(shù)據(jù)依然存在;如果Pod被刪除,數(shù)據(jù)將不會(huì)存在!
hostPath Volume 的作用是將 Docker Host 文件系統(tǒng)中已經(jīng)存在的目錄 mount 給 Pod 的容器。大部分應(yīng)用都不會(huì)使用 hostPath Volume,因?yàn)檫@實(shí)際上增加了 Pod 與節(jié)點(diǎn)的耦合,限制了 Pod 的使用。不過那些需要訪問 Kubernetes 或 Docker 內(nèi)部數(shù)據(jù)(配置文件和二進(jìn)制庫)的應(yīng)用則需要使用 hostPath。類似于docker數(shù)據(jù)持久化中的bind mount方式!
當(dāng)然也可以進(jìn)行創(chuàng)建,這里就偷個(gè)懶,使用Kubernetes集群自帶的YAML文件進(jìn)行介紹!
[root@master yaml]# kubectl edit --namespace=kube-system pod kube-apiserver-master
#查看apiserver組件的yaml文件
如圖:
如果 Pod 被銷毀了,hostPath 對(duì)應(yīng)的目錄也還會(huì)被保留,從這點(diǎn)看,hostPath 的持久性比 emptyDir 強(qiáng)。不過一旦 Host 崩潰,hostPath 也就沒法訪問了。
由于使用場(chǎng)景較少,以上兩種方式這里就不詳細(xì)介紹了!
Persistent Volume概述
普通Volume和使用它的Pod之間是一種靜態(tài)綁定關(guān)系,在定義Pod的文件里,同時(shí)定義了它使用的Volume。Volume 是Pod的附屬品,我們無法單獨(dú)創(chuàng)建一個(gè)Volume,因?yàn)樗皇且粋€(gè)獨(dú)立的K8S資源對(duì)象。
而Persistent Volume 簡(jiǎn)稱PV是一個(gè)K8S資源對(duì)象,所以我們可以單獨(dú)創(chuàng)建一個(gè)PV。它不和Pod直接發(fā)生關(guān)系,而是通過Persistent Volume Claim,簡(jiǎn)稱PVC來實(shí)現(xiàn)動(dòng)態(tài)綁定。Pod定義里指定的是PVC,然后PVC會(huì)根據(jù)Pod的要求去自動(dòng)綁定合適的PV給Pod使用。
既然有了PV這個(gè)概念,那么PVC(PersistentVolumeClaim)這個(gè)概念也不得不說一下,PVC代表用戶使用存儲(chǔ)的請(qǐng)求,應(yīng)用申請(qǐng)PV持久化空間的一個(gè)申請(qǐng)、聲明。K8s集群可能會(huì)有多個(gè)PV,你需要不停的為不同的應(yīng)用創(chuàng)建多個(gè)PV。
如圖:
1)PV是集群中的存儲(chǔ)資源,通常由集群管理員創(chuàng)建和管理;
2)StorageClass用于對(duì)PV進(jìn)行分類,如果配置正確,Storage也可以根據(jù)PVC的請(qǐng)求動(dòng)態(tài)創(chuàng)建PV;
3)PVC是使用該資源的請(qǐng)求,通常由應(yīng)用程序提出請(qǐng)求,并指定對(duì)應(yīng)的StorageClass和需求的空間大小;
4)PVC可以作為數(shù)據(jù)卷的一種,被掛載到Pod中使用;
PV與PVC的管理過程如下:
1)在主機(jī)上劃分出一個(gè)單獨(dú)的目錄用于PV使用,并且定義其可用大?。?2)創(chuàng)建PVC這個(gè)資源對(duì)象,便于申請(qǐng)PV的存儲(chǔ)空間;
3)Pod中添加數(shù)據(jù)卷,數(shù)據(jù)卷關(guān)聯(lián)到PVC;
4)Pod中包含容器,容器掛載數(shù)據(jù)卷;
下面通過一個(gè)案例來詳細(xì)了解一下Persistent Volume!
案例實(shí)現(xiàn)過程:
1)底層采用NFS存儲(chǔ),然后再NFS的目錄下劃分1G的容量供PV調(diào)度;
2)創(chuàng)建PVC來申請(qǐng)PV的存儲(chǔ)空間;
3)創(chuàng)建Pod,使用PVC申請(qǐng)的存儲(chǔ)空間來實(shí)現(xiàn)數(shù)據(jù)的持久化;
本次案例直接在master節(jié)點(diǎn)上創(chuàng)建NFS存儲(chǔ)!
[root@master ~]# yum -y install nfs-utils rpcbind
[root@master ~]# vim /etc/exports
/nfsdata *(rw,sync,no_root_squash)
[root@master ~]# systemctl start nfs-server
[root@master ~]# systemctl start rpcbind
[root@master ~]# showmount -e
Export list for master:
/nfsdata *
[root@master ~]# vim test-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: test-pv
spec:
capacity:
storage: 1Gi #指定該P(yáng)V資源分配的容器為1G
accessModes: #指定訪問模式
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle #指定回收策略(實(shí)驗(yàn)環(huán)境,實(shí)際環(huán)境很少會(huì)這樣做)
storageClassName: nfs #指定存儲(chǔ)類名字
nfs: #需要與存儲(chǔ)類名字一致
path: /nfsdata/test-pv //指定NFS的目錄
server: 192.168.1.4 //指定NFS的IP地址
上述yaml文件中,主要字段的解釋:
1)accessModes(訪問模式)
- ReadWriteOnce:以讀寫的方式掛載到單個(gè)節(jié)點(diǎn);
- ReadWriteMany:以讀寫的方式掛載到多個(gè)節(jié)點(diǎn) ;
- ReadOnlyMany:以只讀的方式掛載到多個(gè)節(jié)點(diǎn);
2)persistentVolumeReclaimPolicy(PV的回收策略)
- Recycle:自動(dòng)清除PV中的數(shù)據(jù),自動(dòng)回收;
- Retain:需要手動(dòng)回收;
- Delete:刪除云存儲(chǔ)資源(云存儲(chǔ)專用);
[root@master ~]# kubectl apply -f test-pv.yaml
[root@master ~]# kubectl get pv #查看PV的狀態(tài)
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
test-pv 1Gi RWO Recycle Available nfs 21s
#注意其PV的狀態(tài)必須是 Available才可正常使用
[root@master ~]# vim test-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
accessModes: #定義訪問模式,必須與PV定義的訪問模式一致
- ReadWriteOnce
resources:
requests:
storage: 1Gi #直接請(qǐng)求i使用最大的容量
storageClassName: nfs #定義的名稱需與PV定義的名稱一致
[root@master ~]# kubectl apply -f test-pvc.yaml
[root@master ~]# kubectl get pvc #查看PVC的狀態(tài)
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-pvc Bound test-pv 1Gi RWO nfs 102s
[root@master ~]# kubectl get pv #查看PV的狀態(tài)
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
test-pv 1Gi RWO Recycle Bound default/test-pvc nfs 14m
#注意PV與PVC的狀態(tài)都是Bound,表示PV與PVC的關(guān)聯(lián)成功
如果,K8s集群中,有很多類似的PV,PVC在向PV申請(qǐng)空間時(shí),不僅會(huì)考慮名稱以及訪問控制模式,還會(huì)考慮你申請(qǐng)空間的大小,會(huì)分配給你最合適大小的PV!
常見的狀態(tài)有:
1)Available——>閑置狀態(tài),沒有被綁定到PVC;
2)Bound——>綁定到PVC;
3)Released——>PVC被刪除,資源沒有被利用;
4)Failed——>自動(dòng)回收失敗;
[root@master ~]# vim test-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-pod
image: busybox
args:
- /bin/sh
- -c
- sleep 300000
volumeMounts:
- mountPath: /testdata #定義容器中的目錄
name: volumedata #保證與卷的名稱一致
volumes:
- name: volumedata #定義卷的名稱
persistentVolumeClaim:
claimName: test-pvc #指定邏輯卷對(duì)應(yīng)的PVC名稱
[root@master ~]# kubectl apply -f test-pod.yaml
[root@master ~]# kubectl get pod #查看pod的狀態(tài)
NAME READY STATUS RESTARTS AGE
test-pod 0/1 ContainerCreating 0 6m26s
#注意其狀態(tài)為 ContainerCreating,表示容器正在創(chuàng)建,但是查看時(shí)間,這么長時(shí)間沒有創(chuàng)建好,不太正常
當(dāng)pod狀態(tài)不正常時(shí),一般我們可以采用以下三種方式進(jìn)行排錯(cuò):
1)使用“ kubectl describe pod pod名稱”查看pod的詳細(xì)信息;
2)使用“kubectl logs pod名稱“查看pod的日志信息;
3)使用“cat /var/log/messages | grep kubelet”查看對(duì)應(yīng)節(jié)點(diǎn)kubelet系統(tǒng)日志;
本次采用第一種方式排錯(cuò)!
[root@master ~]# kubectl describe pod test-pod
#最后的一條的信息如下:
mount.nfs: mounting 192.168.1.4:/nfsdata/test-pv failed, reason given by server: No such file or directory
#根據(jù)消息提示,指定本地需要掛載的目錄不存在
[root@master ~]# mkdir -p /nfsdata/test-pv
#創(chuàng)建完成目錄后,建議查看pod生成的容器運(yùn)行的節(jié)點(diǎn),將節(jié)點(diǎn)上的kubelet服務(wù)進(jìn)行重啟,重啟完成后,再次查看Pod的狀態(tài)
[root@master ~]# kubectl get pod //再次查看pod的狀態(tài)
NAME READY STATUS RESTARTS AGE
test-pod 1/1 Running 0 32m
如果創(chuàng)建Pod的過程中,Pod不斷的重啟,主要是因?yàn)椋?/strong>
1)swap交換分區(qū)沒有被關(guān)閉,導(dǎo)致集群運(yùn)行不正常;
2)node節(jié)點(diǎn)內(nèi)存不足,道州集群運(yùn)行不正常;
以上兩種情況都會(huì)導(dǎo)致Pod會(huì)不斷的重啟,可以使用“free -h”命令進(jìn)行查看!
[root@master ~]# kubectl exec -it test-pod /bin/sh
/ # echo "test pv pvc" > /testdata/test.txt
#進(jìn)入容器,創(chuàng)建文件進(jìn)行測(cè)試
[root@master ~]# cat /nfsdata/test-pv/test.txt
test pv pvc
#確認(rèn)這個(gè)文件本地是存在的
[root@master ~]# kubectl delete -f test-pod.yaml
#將pod進(jìn)行刪除
[root@master ~]# cat /nfsdata/test-pv/test.txt
test pv pvc
#再次查看發(fā)現(xiàn)pod的測(cè)試文件依然存在
[root@master ~]# kubectl delete -f test-pvc.yaml
#將PVC進(jìn)行刪除
[root@master ~]# cat /nfsdata/test-pv/tes
cat: /nfsdata/test-pv/tes: 沒有那個(gè)文件或目錄
#再次查看發(fā)現(xiàn)pod的測(cè)試文件不見了,因?yàn)閷VC刪除了
可能通過步驟四并不能真正的理解Persistent volume的作用,下面通過創(chuàng)建mysql容器的方式來驗(yàn)證Persistent volume的作用!
本次案例直接在master節(jié)點(diǎn)上創(chuàng)建NFS存儲(chǔ)!
[root@master ~]# yum -y install nfs-utils rpcbind
[root@master ~]# vim /etc/exports
/nfsdata *(rw,sync,no_root_squash)
[root@master ~]# systemctl start nfs-server
[root@master ~]# systemctl start rpcbind
[root@master ~]# showmount -e
Export list for master:
/nfsdata *
[root@master ~]# vim mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain #注意指定的回收策略為手動(dòng)回收
storageClassName: nfs
nfs:
path: /nfsdata/mysql-pv
server: 192.168.1.4
[root@master ~]# kubectl apply -f mysql-pv.yaml
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
test-pv 1Gi RWO Retain Available nfs 15s
[root@master ~]# mkdir -p /nfsdata/mysql-pv
[root@master ~]# vim mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: nfs
[root@master ~]# kubectl apply -f mysql-pvc.yaml
[root@master ~]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-pvc Bound mysql-pv 1Gi RWO nfs 13s
[root@master ~]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mysql-pv 1Gi RWO Retain Bound default/mysql-pvc nfs 8m14s
[root@master ~]# vim mysql-pod.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mysql-pod
spec:
selector: #設(shè)置給予等值的標(biāo)簽選擇器
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env: #設(shè)置環(huán)境變量,數(shù)據(jù)庫root用戶的密碼
- name: MYSQL_ROOT_PASSWORD
value: 123.com
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql #這個(gè)目錄是數(shù)據(jù)庫存放數(shù)據(jù)的目錄(指定的是容器中的目錄)
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc
[root@master ~]# kubectl apply -f mysql-pod.yaml
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-pod-6cc889468b-gq4qz 1/1 Running 0 3s
[root@master ~]# kubectl exec -it mysql-pod-6cc889468b-gq4qz -- mysql -u root -p123.com
#直接登錄運(yùn)行mysql數(shù)據(jù)庫的pod中的mysql
#插入數(shù)據(jù)進(jìn)行測(cè)試
mysql> create database lzj;
mysql> use lzj;
mysql> create table my_id( id int(4) );
mysql> insert my_id values (9527);
mysql> select * from my_id;
+------+
| id |
+------+
| 9527 |
+------+
[root@master ~]# ls /nfsdata/mysql-pv/
auto.cnf ibdata1 ib_logfile0 ib_logfile1 lzj mysql performance_schema
#查看pod對(duì)應(yīng)的NFS的目錄,確實(shí)有了數(shù)據(jù)
[root@master ~]# kubectl get pod -o wide #查看pod的詳細(xì)信息
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-pod-6cc889468b-gq4qz 1/1 Running 0 23m 10.244.2.6 node02 <none> <none>
#查看到pod是運(yùn)行在node02節(jié)點(diǎn)上的
#模擬node02宕機(jī),步驟省略,關(guān)機(jī)、掛起都可以!
[root@node01 ~]# systemctl restart kubelet
#重啟node01的kubelet服務(wù)
#接下來耐心等待pod的轉(zhuǎn)移,可能需要差不多5分鐘
^C[root@master ~]# kubectl get pod -o wide #可以看到pod已經(jīng)運(yùn)行在node01上
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-pod-6cc889468b-gdf7k 1/1 Running 0 66s 10.244.1.6 node01 <none> <none>
mysql-pod-6cc889468b-gq4qz 1/1 Terminating 0 32m 10.244.2.6 node02 <none> <none>
[root@master ~]# kubectl exec -it mysql-pod-6cc889468b-gdf7k -- mysql -u root -p123.com
#再次登錄到pod中運(yùn)行的mysql(注意:pod的名稱)
mysql> select * from lzj.my_id; #再次數(shù)據(jù)是否存在
+------+
| id |
+------+
| 9527 |
+------+
1 row in set (0.01 sec)
#數(shù)據(jù)依舊存在
——————————————本次到此結(jié)束,感謝閱讀—————————————
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。