k 8 s実践10:pod応用データ記憶デカップリングpv&&pvc
1.PV&&PVCの基本概念PersistentVolume(PV)は外部ストレージシステムのストレージ空間であり、管理者が作成し、メンテナンスする.PVは独立性を有し、ライフサイクルはPodから独立している.PersistentVolumeClaim(PVC)はPVの申請です.PVCは一般的に一般的なユーザーが作成し、メンテナンスする.
Podにリソースを割り当てる必要がある場合、ユーザーはPVCを作成し、ストレージリソースの容量の大きさとアクセスモードを指定し、kubernetesは条件を満たすPVを検索して提供する.
2.nfs配備
実験環境、nfsの配置は簡単で速い.実際の環境では、セキュリティの高い分散型ストレージ、cephなどを使用することをお勧めします.
nfsサービスに必要なソフトウェアnfs-utils nfsメインプログラム(rpc.nfsd,rbc.mountd)rpcbind rpcメインプログラム
いくつかの基礎的な情況は説明します:今全体のクラスタ環境の4つのノード、k 8 s-master 1 Ready 32 d v 1.12.3k8s-master2 Ready 32d v1.12.3k8s-master3 Ready 32d v1.12.3k8s-node1 Ready 32d v1.12.3のうちk 8 s-node 1の空き容量が最も大きいため、ここではk 8 s-node 1を用いてnfsディレクトリとデータを記憶する.
k 8 s-node 1にnfsを配備
パッケージのインストール
サービス設定を起動して起動し、現在のステータスを表示
構成nfsサービス側/etc/exportsはデフォルトのnfsプログラムプロファイルであり、デフォルトでは空の構成が追加されます.
rpcbindとnfsサービスを再起動し、nfsローカルマウント状況を取得
注意:192.168.32.0/24(rw,no_root_squash,no_all_squash,sync)の間にスペースがあることはできません.
注意:nfsが正常にマウントされるように、すべてのnodeにrpcbindをインストールして起動する必要があります.エラー:mount failed:exit status 32
nfsクライアント構成クライアントもnfs-utilsとrpcbindをインストールとともにrpcbindを起動する必要がある.
3.pv基礎知識
pvの作成
Capacity PVの容量指定
アクセスモードを指定します.サポートされるモードは、ReadWriteOnceがread-writeモードmountから単一ノードReadOnlyManyまでread-onlyモードmountから複数ノードReadWriteManyまでread-writeモードmountから複数ノードへ
ノードはpodです.複数のpodがReadWriteManyを使用する必要がある場合は
persistentVolumeReclaimPolicy指定pvの回収ポリシーRetainは管理者が回収を終了する必要があり、安全性が最も高いRecycleはPV中のデータを消去し、rm-rf Deleteを実行してstorage provider上の対応するストレージリソースを削除することに相当する.
storageClassNameはPVの分類を指定し、PVCはclassを指定して相応のPVを申請することができる.
path:/data/k 8 s/pv 1 nfs上の対応するディレクトリを指定し、手動で作成する必要があります
PVは状態のあるリソースオブジェクトで、以下のいくつかの状態がある:Available:空き状態Bound:あるpvcにバインドされたReleased:対応するpvcは削除されたが、リソースはまだ回収されていないFailed:pv自動回収に失敗した
4.pvc基礎知識
pvcの作成
注意:pvc使用後、pvの状態はBoundになりました
5.pvとpvcはどのように対応していますか?
上記テストのpvとpvcはstorageClassName:nfsパラメータを指定することによって対応する.
このパラメータを指定しないとどうなりますか?公式の説明によると、ユーザーはPVCを作成し、ストレージリソースの容量の大きさとアクセスモードを指定し、kubernetesは条件を満たすPVを検索し、提供する.すなわち、pvcは自分のニーズに応じて適切なpvを申請する.
テストは以下の通りです:pv
pvc
コマンドを実行して、対応状況を表示します.
マッチングパラメータを指定する場合、pvcはマッチングpvの使用を自動的に申請することがわかる.注意:pvがstorageClassName:パラメータを指定する場合、pvcは対応するstorageClassName:パラメータを指定しないため、pvcは一致するpvの使用を自動的に申請できません.コマンドを実行すると、pvcはpending状態になります.以下を参照してください.
6.mysql pvとpvcを使用
pvのストレージディレクトリを手動で作成する
pv
pvc
mysqlでの導入
docker inspectで情報を検索してみる
使用しているpvが見えます
pvディレクトリ生成データの取得
7.mysqlを操作し、データを生成し、効果をテストする
データベースt 1の作成
t 1におけるデータテーブルt 1の作成
データテーブルt 1は、データを挿入して取得する
データが生成されましたnfsストレージディレクトリの状況とコンテナストレージディレクトリの状況を見てみましょう
nfsディレクトリ
ようき
データの比較から分かるように、pvcは成功して今故障を模擬して、k 8 s-master 2機械は死んでしまいます
podはk 8 s-master 3に自動的に切り替わりました
データの取得
Mysqlのデータはpodとデカップリングされていることがわかります.
Podにリソースを割り当てる必要がある場合、ユーザーはPVCを作成し、ストレージリソースの容量の大きさとアクセスモードを指定し、kubernetesは条件を満たすPVを検索して提供する.
2.nfs配備
実験環境、nfsの配置は簡単で速い.実際の環境では、セキュリティの高い分散型ストレージ、cephなどを使用することをお勧めします.
nfsサービスに必要なソフトウェアnfs-utils nfsメインプログラム(rpc.nfsd,rbc.mountd)rpcbind rpcメインプログラム
いくつかの基礎的な情況は説明します:今全体のクラスタ環境の4つのノード、k 8 s-master 1 Ready 32 d v 1.12.3k8s-master2 Ready 32d v1.12.3k8s-master3 Ready 32d v1.12.3k8s-node1 Ready 32d v1.12.3のうちk 8 s-node 1の空き容量が最も大きいため、ここではk 8 s-node 1を用いてnfsディレクトリとデータを記憶する.
k 8 s-node 1にnfsを配備
パッケージのインストール
[root@k8s-node1 ~]# yum install -y nfs-utils rpcbind
サービス設定を起動して起動し、現在のステータスを表示
[root@k8s-node1 ~]# systemctl start rpcbind &&systemctl enable rpcbind
[root@k8s-node1 ~]# systemctl status rpcbind
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-04-01 13:46:48 CST; 3min 24s ago
Main PID: 36888 (rpcbind)
CGroup: /system.slice/rpcbind.service
└─36888 /sbin/rpcbind -w
Apr 01 13:46:48 k8s-node1 systemd[1]: Starting RPC bind service...
Apr 01 13:46:48 k8s-node1 systemd[1]: Started RPC bind service.
[root@k8s-node1 ~]# systemctl start nfs && systemctl enable nfs
[root@k8s-node1 ~]# systemctl status nfs
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
Active: active (exited) since Mon 2019-04-01 13:53:05 CST; 2s ago
Process: 38033 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl restart gssproxy ; fi (code=exited, status=0/SUCCESS)
Process: 38016 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
Process: 38015 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Main PID: 38016 (code=exited, status=0/SUCCESS)
Memory: 0B
CGroup: /system.slice/nfs-server.service
Apr 01 13:53:05 k8s-node1 systemd[1]: Starting NFS server and services...
Apr 01 13:53:05 k8s-node1 systemd[1]: Started NFS server and services.
[root@k8s-node1 ~]#
[root@k8s-node1 ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 53501 nlockmgr
100021 3 udp 53501 nlockmgr
100021 4 udp 53501 nlockmgr
100021 1 tcp 35799 nlockmgr
100021 3 tcp 35799 nlockmgr
100021 4 tcp 35799 nlockmgr
[root@k8s-node1 ~]#
構成nfsサービス側/etc/exportsはデフォルトのnfsプログラムプロファイルであり、デフォルトでは空の構成が追加されます.
[root@k8s-node1 ~]# cat /etc/exports
[root@k8s-node1 ~]# echo "/mnt/data 192.168.32.0/24(rw,no_root_squash,no_all_squash,sync)" >/etc/exports
[root@k8s-node1 ~]#
rpcbindとnfsサービスを再起動し、nfsローカルマウント状況を取得
[root@k8s-node1 ~]# showmount -e localhost
Export list for localhost:
/mnt/data 192.168.32.0/24
注意:192.168.32.0/24(rw,no_root_squash,no_all_squash,sync)の間にスペースがあることはできません.
注意:nfsが正常にマウントされるように、すべてのnodeにrpcbindをインストールして起動する必要があります.エラー:mount failed:exit status 32
nfsクライアント構成クライアントもnfs-utilsとrpcbindをインストールとともにrpcbindを起動する必要がある.
[root@k8s-master1 ~]# yum install -y nfs-utils rpcbind
[root@k8s-master1 ~]# showmount -e k8s-node1
Export list for k8s-node1:
/mnt/data 192.168.32.0/24
[root@k8s-master1 ~]#
3.pv基礎知識
pvの作成
[root@k8s-master1 pv]# cat nfs-pv1.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv1
spec:
capacity:
storage: 100Mi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs
nfs:
path: /mnt/data/pv1
server: 192.168.32.131
[root@k8s-master1 pv]#
Capacity PVの容量指定
アクセスモードを指定します.サポートされるモードは、ReadWriteOnceがread-writeモードmountから単一ノードReadOnlyManyまでread-onlyモードmountから複数ノードReadWriteManyまでread-writeモードmountから複数ノードへ
ノードはpodです.複数のpodがReadWriteManyを使用する必要がある場合は
persistentVolumeReclaimPolicy指定pvの回収ポリシーRetainは管理者が回収を終了する必要があり、安全性が最も高いRecycleはPV中のデータを消去し、rm-rf Deleteを実行してstorage provider上の対応するストレージリソースを削除することに相当する.
storageClassNameはPVの分類を指定し、PVCはclassを指定して相応のPVを申請することができる.
path:/data/k 8 s/pv 1 nfs上の対応するディレクトリを指定し、手動で作成する必要があります
[root@k8s-master1 pv]# kubectl apply -f nfs-pv1.yml
persistentvolume "mypv1" created
[root@k8s-master1 pv]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mypv1 100Mi RWX Retain Available nfs 35s
PVは状態のあるリソースオブジェクトで、以下のいくつかの状態がある:Available:空き状態Bound:あるpvcにバインドされたReleased:対応するpvcは削除されたが、リソースはまだ回収されていないFailed:pv自動回収に失敗した
4.pvc基礎知識
pvcの作成
[root@k8s-master1 pv]# cat nfs-pvc1.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Mi
storageClassName: nfs
[root@k8s-master1 pv]# kubectl get pvc,pv
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/mypvc1 Bound mypv1 100Mi RWX nfs 3m
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/mypv1 100Mi RWX Retain Bound default/mypvc1 nfs 16m
[root@k8s-master1 pv]#
注意:pvc使用後、pvの状態はBoundになりました
5.pvとpvcはどのように対応していますか?
上記テストのpvとpvcはstorageClassName:nfsパラメータを指定することによって対応する.
このパラメータを指定しないとどうなりますか?公式の説明によると、ユーザーはPVCを作成し、ストレージリソースの容量の大きさとアクセスモードを指定し、kubernetesは条件を満たすPVを検索し、提供する.すなわち、pvcは自分のニーズに応じて適切なpvを申請する.
テストは以下の通りです:pv
[root@k8s-master1 pv]# cat nfs-pv1.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv1
spec:
capacity:
storage: 100Mi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName:
nfs:
path: /mnt/data/pv1
server: 192.168.32.131
[root@k8s-master1 pv]# cat nfs-pv2.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mypv2
spec:
capacity:
storage: 10Mi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName:
nfs:
path: /mnt/data/pv1
server: 192.168.32.131
[root@k8s-master1 pv]#
pvc
[root@k8s-master1 pv]# cat nfs-pvc1.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Mi
storageClassName:
[root@k8s-master1 pv]# cat nfs-pvc2.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc2
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 50Mi
storageClassName:
[root@k8s-master1 pv]#
コマンドを実行して、対応状況を表示します.
[root@k8s-master1 pv]# kubectl apply -f nfs-pv2.yml
persistentvolume "mypv2" created 7s
[root@k8s-master1 pv]# kubectl apply -f nfs-pv1.yml
persistentvolume "mypv1" created
[root@k8s-master1 pv]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mypv1 100Mi RWX Retain Available 2s
mypv2 10Mi RWX Retain Available 16s
[root@k8s-master1 pv]# kubectl apply -f nfs-pvc2.yml
persistentvolumeclaim "mypvc2" created
[root@k8s-master1 pv]# kubectl apply -f nfs-pvc1.yml
persistentvolumeclaim "mypvc1" created
[root@k8s-master1 pv]# kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/mypv1 100Mi RWX Retain Bound default/mypvc2 24s
persistentvolume/mypv2 10Mi RWX Retain Bound default/mypvc1 38s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/mypvc1 Bound mypv2 10Mi RWX 5s
persistentvolumeclaim/mypvc2 Bound mypv1 100Mi RWX 8s
マッチングパラメータを指定する場合、pvcはマッチングpvの使用を自動的に申請することがわかる.注意:pvがstorageClassName:パラメータを指定する場合、pvcは対応するstorageClassName:パラメータを指定しないため、pvcは一致するpvの使用を自動的に申請できません.コマンドを実行すると、pvcはpending状態になります.以下を参照してください.
[root@k8s-master1 pv]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mypv1 100Mi RWX Retain Available my1 2m
mypv2 10Mi RWX Retain Available my2 2m
[root@k8s-master1 pv]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mypvc1 Pending 2m
mypvc2 Pending 2m
[root@k8s-master1 pv]#
6.mysql pvとpvcを使用
pvのストレージディレクトリを手動で作成する
[root@k8s-node1 ~]# mkdir -p /mnt/data/mysqlpv1
[root@k8s-node1 ~]# ll /mnt/data/
total 0
drwxr-xr-x 2 root root 6 Apr 8 17:26 mysqlpv1
drwxr-xr-x 2 root root 6 Apr 8 10:55 pv1
pv
[root@k8s-master1 pv]# cat mysql-pv1.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv1
spec:
capacity:
storage: 300Mi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName:
nfs:
path: /mnt/data/mysqlpv1
server: 192.168.32.131
[root@k8s-master1 pv]# kubectl apply -f mysql-pv1.yml
persistentvolume "mysql-pv1" created
[root@k8s-master1 pv]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mysql-pv1 300Mi RWX Retain Available 31s
pvc
[root@k8s-master1 pv]# cat mysql-pvc1.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 300Mi
storageClassName:
[root@k8s-master1 pv]# kubectl apply -f mysql-pvc1.yml
persistentvolumeclaim "mysql-pvc1" created
[root@k8s-master1 pv]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql-pvc1 Bound mysql-pv1 300Mi RWX 5s
mysqlでの導入
[root@k8s-master1 pv]# cat mysql.yml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: mysql
spec:
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
value: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
persistentVolumeClaim:
claimName: mysql-pvc1
[root@k8s-master1 pv]#
[root@k8s-master1 pv]# kubectl apply -f mysql.yml
service "mysql" created
deployment.apps "mysql" created
[root@k8s-master1 pv]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql-5f4c86bcf9-gtstz 1/1 Running 0 9m 172.30.79.2 k8s-master2
docker inspectで情報を検索してみる
[root@k8s-master2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
af22cadb3a3b mysql@sha256:de2913a0ec53d98ced6f6bd607f487b7ad8fe8d2a86e2128308ebf4be2f92667 "docker-entrypoint..." 9 minutes ago Up 9 minutes k8s_mysql_mysql-5f4c86bcf9-gtstz_default_7ff51d1a-5a71-11e9-ae21-000c291d7023_0
0dc35308a0fb registry.access.redhat.com/rhel7/pod-infrastructure:latest "/usr/bin/pod" 10 minutes ago Up 10 minutes k8s_POD_mysql-5f4c86bcf9-gtstz_default_7ff51d1a-5a71-11e9-ae21-000c291d7023_0
[root@k8s-master2 ~]# docker inspect af22cadb3a3b
"Mounts": [
{
"Type": "bind",
"Source": "/var/lib/kubelet/pods/7ff51d1a-5a71-11e9-ae21-000c291d7023/volumes/kubernetes.io~nfs/mysql-pv1",
"Destination": "/var/lib/mysql",
"Mode": "",
"RW": true,
"Propagation": ""
},
使用しているpvが見えます
pvディレクトリ生成データの取得
[root@k8s-node1 ~]# ll /mnt/data/mysqlpv1/
total 110604
-rw-rw---- 1 systemd-bus-proxy ssh_keys 56 Apr 9 10:46 auto.cnf
-rw-rw---- 1 systemd-bus-proxy ssh_keys 12582912 Apr 9 10:46 ibdata1
-rw-rw---- 1 systemd-bus-proxy ssh_keys 50331648 Apr 9 10:46 ib_logfile0
-rw-rw---- 1 systemd-bus-proxy ssh_keys 50331648 Apr 9 10:45 ib_logfile1
drwx------ 2 systemd-bus-proxy ssh_keys 4096 Apr 9 10:46 mysql
drwx------ 2 systemd-bus-proxy ssh_keys 4096 Apr 9 10:45 performance_schema
[root@k8s-node1 ~]#
7.mysqlを操作し、データを生成し、効果をテストする
データベースt 1の作成
[root@k8s-master2 ~]# docker exec af22cadb3a3b mysql -uroot -ppassword -e"create database t1"
Warning: Using a password on the command line interface can be insecure.
[root@k8s-master2 ~]# docker exec af22cadb3a3b mysql -uroot -ppassword -e"show databases;"
Warning: Using a password on the command line interface can be insecure.
Database
information_schema
mysql
performance_schema
t1
t 1におけるデータテーブルt 1の作成
[root@k8s-master2 ~]# docker exec af22cadb3a3b mysql -uroot -ppassword -e "use t1;create table t1(i int);"
Warning: Using a password on the command line interface can be insecure.
データテーブルt 1は、データを挿入して取得する
[root@k8s-master2 ~]# docker exec af22cadb3a3b mysql -uroot -ppassword -e "use t1;create table t1(i int);"
Warning: Using a password on the command line interface can be insecure.
[root@k8s-master2 ~]# docker exec af22cadb3a3b mysql -uroot -ppassword -e "use t1;insert into t1 values(1),(3),(3);"
Warning: Using a password on the command line interface can be insecure.
[root@k8s-master2 ~]# docker exec af22cadb3a3b mysql -uroot -ppassword -e "use t1;select * from t1;"
i
1
3
3
Warning: Using a password on the command line interface can be insecure.
[root@k8s-master2 ~]#
データが生成されましたnfsストレージディレクトリの状況とコンテナストレージディレクトリの状況を見てみましょう
nfsディレクトリ
[root@k8s-node1 ~]# ll /mnt/data/mysqlpv1/
total 110604
-rw-rw---- 1 systemd-bus-proxy ssh_keys 56 Apr 9 10:46 auto.cnf
-rw-rw---- 1 systemd-bus-proxy ssh_keys 12582912 Apr 9 11:09 ibdata1
-rw-rw---- 1 systemd-bus-proxy ssh_keys 50331648 Apr 9 11:09 ib_logfile0
-rw-rw---- 1 systemd-bus-proxy ssh_keys 50331648 Apr 9 10:45 ib_logfile1
drwx------ 2 systemd-bus-proxy ssh_keys 4096 Apr 9 10:46 mysql
drwx------ 2 systemd-bus-proxy ssh_keys 4096 Apr 9 10:45 performance_schema
drwx------ 2 systemd-bus-proxy ssh_keys 48 Apr 9 11:08 t1
[root@k8s-node1 ~]# ll /mnt/data/mysqlpv1/t1
total 112
-rw-rw---- 1 systemd-bus-proxy ssh_keys 65 Apr 9 11:05 db.opt
-rw-rw---- 1 systemd-bus-proxy ssh_keys 8554 Apr 9 11:08 t1.frm
-rw-rw---- 1 systemd-bus-proxy ssh_keys 98304 Apr 9 11:09 t1.ibd
[root@k8s-node1 ~]#
ようき
[root@k8s-master2 ~]# docker exec af22cadb3a3b ls /var/lib/mysql
auto.cnf
ib_logfile0
ib_logfile1
ibdata1
mysql
performance_schema
t1
[root@k8s-master2 ~]# docker exec af22cadb3a3b ls /var/lib/mysql/t1
db.opt
t1.frm
t1.ibd
[root@k8s-master2 ~]#
データの比較から分かるように、pvcは成功して今故障を模擬して、k 8 s-master 2機械は死んでしまいます
[root@k8s-master2 ~]# init 0
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(k8s-master2) at 11:14:05.
Type `help' to learn how to use Xshell prompt.
[C:\~]$
[root@k8s-master1 pv]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE
mysql-5f4c86bcf9-cz2np 1/1 Running 0 1m 172.30.27.2 k8s-master3
mysql-5f4c86bcf9-gtstz 1/1 Unknown 0 34m 172.30.79.2 k8s-master2
[root@k8s-master1 pv]#
podはk 8 s-master 3に自動的に切り替わりました
[root@k8s-master3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e53dccc404b7 mysql@sha256:de2913a0ec53d98ced6f6bd607f487b7ad8fe8d2a86e2128308ebf4be2f92667 "docker-entrypoint..." About a minute ago Up About a minute k8s_mysql_mysql-5f4c86bcf9-cz2np_default_38792912-5a76-11e9-ae21-000c291d7023_0
228f7a798f7e registry.access.redhat.com/rhel7/pod-infrastructure:latest "/usr/bin/pod" 2 minutes ago Up 2 minutes k8s_POD_mysql-5f4c86bcf9-cz2np_default_38792912-5a76-11e9-ae21-000c291d7023_0
[root@k8s-master3 ~]#
データの取得
[root@k8s-master3 ~]# docker exec e53dccc404b7 mysql -uroot -ppassword -e "use t1;select * from t1;"
Warning: Using a password on the command line interface can be insecure.
i
1
3
3
[root@k8s-master3 ~]#
Mysqlのデータはpodとデカップリングされていることがわかります.