丽水市做网站的,平台购物系统,wordpress页面修改,网站建设中的风险风险1、HostPath 持久化存储
1.1 持久卷 HostPath#xff08;节点上的文件或目录挂载到Pod上#xff09;
将节点上的文件或目录挂载到Pod上#xff0c;此时该目录会变成持久化存储目录#xff0c;即使Pod被删除后重启#xff0c;也可以重新加载到该目录#xff0c;该目录下…1、HostPath 持久化存储
1.1 持久卷 HostPath节点上的文件或目录挂载到Pod上
将节点上的文件或目录挂载到Pod上此时该目录会变成持久化存储目录即使Pod被删除后重启也可以重新加载到该目录该目录下的文件不会丢失。
1.2 配置文件
volumes 中如何与node节点主机共享目录时type类型有多种如下类型 空字符串默认类型不做任何检查DirectoryOrCreate如果给定的path不存在就创建一个755的空目录Directory这个目录必须存在FileOrCreate如果给定的文件不存在则创建一个空文件权限为644File这个文件必须存在SocketUNIX套接字必须存在CharDevice字符设备必须存在BlockDevice块设备必须存在
apiVersion: v1
kind: Pod
metadata:name: test-host-volume-pod
spec:containers:- image: nginx:1.20name: nginx-volumevolumeMounts:- mountPath: /data # 挂载到容器哪个目录name: host-volume # 挂载的数据卷的名字volumes:- name: host-volumehostPath: # 与主机共享目录path: /data # node节点上的目录type: DirectoryOrCreate #检查类型在挂数前对挂载目录做什么检查操作有多种选项默认为空字符串不做任何检查1.3 创建这个pod资源
[rootk8s-master volume]# kubectl create -f host-volume.yaml
pod/host-volume-pod created[rootk8s-master volume]# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
configfile-po 0/1 Completed 0 178m 10.2.1.69 k8s-node-02 none none
dns-test 1/1 Running 2 (12h ago) 2d21h 10.2.1.58 k8s-node-02 none none
fluentd-59k8k 1/1 Running 1 (12h ago) 2d4h 10.2.2.34 k8s-node-01 none none
fluentd-hhtls 1/1 Running 1 (12h ago) 2d4h 10.2.1.59 k8s-node-02 none none
host-volume-pod 0/1 ContainerCreating 0 13s none k8s-node-02 none none
nginx-deploy-6fb8d6548-8khhv 1/1 Running 6 (33m ago) 6h33m 10.2.1.67 k8s-node-02 none none
nginx-deploy-6fb8d6548-fd9tx 1/1 Running 6 (33m ago) 6h33m 10.2.2.40 k8s-node-01 none none[rootk8s-master volume]# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
configfile-po 0/1 Completed 0 179m 10.2.1.69 k8s-node-02 none none
dns-test 1/1 Running 2 (12h ago) 2d21h 10.2.1.58 k8s-node-02 none none
fluentd-59k8k 1/1 Running 1 (12h ago) 2d4h 10.2.2.34 k8s-node-01 none none
fluentd-hhtls 1/1 Running 1 (12h ago) 2d4h 10.2.1.59 k8s-node-02 none none
host-volume-pod 1/1 Running 0 61s 10.2.1.71 k8s-node-02 none none
nginx-deploy-6fb8d6548-8khhv 1/1 Running 6 (34m ago) 6h34m 10.2.1.67 k8s-node-02 none none
nginx-deploy-6fb8d6548-fd9tx 1/1 Running 6 (34m ago) 6h34m 10.2.2.40 k8s-node-01 none none
1.4 在容器中查看这个挂载的数据目录并且在容器中创建文件
[rootk8s-master volume]# kubectl exec -it host-volume-pod -- sh -c ls -l /data/
total 0[rootk8s-master volume]# kubectl exec -it host-volume-pod -- sh -c cd /data/ echo hello kubernetes... index.html1.5 刚才查到这个pod创建到了k8s-node-02节点上查看这个文件内容
[rootk8s-node-02 ~]# cd /data/
[rootk8s-node-02 data]# ll
总用量 4
-rw-r--r--. 1 root root 20 2月 27 00:30 index.html
[rootk8s-node-02 data]# cat index.html
hello kubernetes...2、临时卷 EmptyDir
2.1 EmptyDir 共享多个pod的数据共享但是数据不能做之久话存储
EmptyDir主要用于一个Pod中不同的Container共享致据使用的由于只是在Pod内部使用因此与英他volume比较大的区别是当Pod如果被除了那么emptyDir也会被除。存价质可以是任意类型如SSD、磁盈或网焰存储。可以将emptyDir.medium设置为Memory让k8s使用tmpfs(内存支待文件系统)速度比较快但是里启tmp形节点时数据会被清除且设旦的大小会计入到Container的内存限制中.
2.2 配置文件
apiVersion: v1
kind: Pod
metadata:name: emptydir-volume-pod
spec:containers:- image: alpinename: alpine-volume-01command: [/bin/sh, -c, sleep 3600;]volumeMounts:- mountPath: /emptydir-1 # 挂载到容器哪个目录name: emptydir-volume # 挂载的数据卷的名字- image: alpinename: alpine-volume-02command: [/bin/sh, -c, sleep 3600;]volumeMounts:- mountPath: /emptydir-2 # 挂载到容器哪个目录name: emptydir-volume # 挂载的数据卷的名字 volumes:- name: emptydir-volumeemptyDir: {}
2.3 创建这个pod资源
[rootk8s-master volume]# kubectl create -f emptydir-volume.yaml
pod/emptydir-volume-pod created
[rootk8s-master volume]#
[rootk8s-master volume]# kubectl get po
NAME READY STATUS RESTARTS AGE
configfile-po 0/1 Completed 0 3h15m
dns-test 1/1 Running 2 (13h ago) 2d21h
emptydir-volume-pod 0/2 ContainerCreating 0 5s
fluentd-59k8k 1/1 Running 1 (13h ago) 2d4h
fluentd-hhtls 1/1 Running 1 (13h ago) 2d4h
host-volume-pod 1/1 Running 0 17m
nginx-deploy-6fb8d6548-8khhv 1/1 Running 6 (50m ago) 6h50m
nginx-deploy-6fb8d6548-fd9tx 1/1 Running 6 (50m ago) 6h50m
[rootk8s-master volume]# kubectl get po
NAME READY STATUS RESTARTS AGE
configfile-po 0/1 Completed 0 3h17m
dns-test 1/1 Running 2 (13h ago) 2d22h
emptydir-volume-pod 2/2 Running 0 81s
fluentd-59k8k 1/1 Running 1 (13h ago) 2d4h
fluentd-hhtls 1/1 Running 1 (13h ago) 2d4h
host-volume-pod 1/1 Running 0 18m
nginx-deploy-6fb8d6548-8khhv 1/1 Running 6 (51m ago) 6h52m
nginx-deploy-6fb8d6548-fd9tx 1/1 Running 6 (51m ago) 6h52m2.4 emptydir 共享数据测试
2.4.1 在 alpine-volume-01 容器内创建文件
[rootk8s-master volume]# kubectl exec -it emptydir-volume-pod -c alpine-volume-01 -- sh -c cd /emptydir-1 touch test.log 2.4.2 在 alpine-volume-02 容器内查看这个文件
[rootk8s-master volume]# kubectl exec -it emptydir-volume-pod -c alpine-volume-02 -- sh -c cd /emptydir-2 ls -l
total 0
-rw-r--r-- 1 root root 0 Feb 26 16:48 test.log2.4.3 在 alpine-volume-02 容器内创建文件
[rootk8s-master volume]# kubectl exec -it emptydir-volume-pod -c alpine-volume-02 -- sh -c cd /emptydir-2 touch aaa.txt 2.4.4 在 alpine-volume-01 容器内查看文件 [rootk8s-master volume]# kubectl exec -it emptydir-volume-pod -c alpine-volume-01 -- sh -c cd /emptydir-1 ls -l
total 0
-rw-r--r-- 1 root root 0 Feb 26 16:50 aaa.txt
-rw-r--r-- 1 root root 0 Feb 26 16:48 test.log3、NFS网络文件系统持久化存储
nfs卷能将NFS(网络文件系统挂载到你的Pod中。不像emptyDir那样会在删除Pod的同时也会被除nfs卷的内容在删除Pod时会被保存卷只是被卸载。这意味着fs卷可以被预先填充数据并且这些数据可以在Pod之间共享
3.1 安装nfs服务
3.1.1 k8s 3台节点都安装nfs服务
yum install -y nfs-utils3.1.2 节点都启动nfs服务
systemctl start nfs3.1.3 在master节点创建nfs的共享目录
mkdir -p /data/nfs/{ro,rw} 3.1.4 设置共享目录
echo /data/nfs/rw 10.10.10.0/24(rw,sync,no_subtree_check,no_root_squash) /etc/exportsecho /data/nfs/ro 10.10.10.0/24(ro,sync,no_subtree_check,no_root_squash) /etc/exports 3.1.5 重新加载配置并重启nfs服务
exportfs -fsystemctl restart nfs3.1.6 挂载nfs共享目录
[rootk8s-node-01 ~]# mkdir -p /data/nfs/{ro,rw}
[rootk8s-node-01 ~]# mount -t nfs 10.10.10.100:/data/nfs/rw /data/nfs/rw/
[rootk8s-node-01 ~]# mount -t nfs 10.10.10.100:/data/nfs/ro /data/nfs/ro/3.1.7 测试挂载目录是否成功 master 上在ro目录创建一个文件 [rootk8s-master ~]# cd /data/nfs/ro/
[rootk8s-master ro]# echo 这是一个只读目录 Readme.md
[rootk8s-master ro]# ll
总用量 4
-rw-r--r--. 1 root root 25 2月 27 01:39 Readme.md在node-01节点上查看这个ro目录中的文件内容并且确认是否可写 [rootk8s-node-01 ~]# cd /data/nfs/ro
[rootk8s-node-01 ro]# ll
总用量 4
-rw-r--r--. 1 root root 25 2月 27 01:39 Readme.md
[rootk8s-node-01 ro]# cat Readme.md
这是一个只读目录
[rootk8s-node-01 ro]# touch node.md
touch: 无法创建node.md: 只读文件系统 在node-01节点上rw目录创建一个文件 [rootk8s-node-01 ro]# cd ../rw/
[rootk8s-node-01 rw]# echo 这个是可读可写目录 Readme.md
[rootk8s-node-01 rw]#我们在master节点上看是否有这个文件 [rootk8s-master ro]# cd ../rw/
[rootk8s-master rw]# cat Readme.md
这个是可读可写目录3.2 创建配置文件
apiVersion: v1
kind: Pod
metadata:name: nfs-volume-pod
spec:containers:- image: nginx:1.20name: nfs-nginxcommand: [/bin/sh, -c, sleep 3600;]volumeMounts:- mountPath: /usr/share/nginx/html # 挂载到容器哪个目录name: nfs-volume # 挂载的数据卷的名字volumes:- name: nfs-volumenfs:server: 10.10.10.100path: /data/nfs/rwreadOnly: false 3.3 提前在rw目录中创建一个index.html文件
[rootk8s-master ~]# echo k8s-master: 10.10.10.100 /data/nfs/rw/index.html3.4 创建pod
[rootk8s-master nfs]# kubectl create -f nfs-volume.yaml
pod/nfs-volume-pod-1 created[rootk8s-master nfs]# kubectl get po -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
configfile-po 0/1 Completed 0 4h30m 10.2.1.69 k8s-node-02 none none
dns-test 1/1 Running 2 (14h ago) 2d23h 10.2.1.58 k8s-node-02 none none
emptydir-volume-pod 2/2 Running 2 (14m ago) 74m 10.2.1.72 k8s-node-02 none none
fluentd-59k8k 1/1 Running 1 (14h ago) 2d5h 10.2.2.34 k8s-node-01 none none
fluentd-hhtls 1/1 Running 1 (14h ago) 2d5h 10.2.1.59 k8s-node-02 none none
host-volume-pod 1/1 Running 0 92m 10.2.1.71 k8s-node-02 none none
nfs-volume-pod-1 1/1 Running 0 64s 10.2.2.41 k8s-node-01 none none
nginx-deploy-6fb8d6548-8khhv 1/1 Running 8 (5m27s ago) 8h 10.2.1.67 k8s-node-02 none none
nginx-deploy-6fb8d6548-fd9tx 1/1 Running 8 (5m26s ago) 8h 10.2.2.40 k8s-node-01 none none3.5 使用curl访问这个nginx服务 刚才我创建的index.html文件在访问nginx的时候生效也就是说通过nfs网络挂成功。 [rootk8s-master nfs]# curl 10.2.2.41
k8s-master: 10.10.10.1003.6 使用配置文件再创建一个pod需要修改pod名字
[rootk8s-master nfs]# kubectl create -f nfs-volume2.yaml
pod/nfs-volume-pod-2 created
[rootk8s-master nfs]# kubectl get po
NAME READY STATUS RESTARTS AGE
configfile-po 0/1 Completed 0 4h36m
dns-test 1/1 Running 2 (14h ago) 2d23h
emptydir-volume-pod 2/2 Running 2 (19m ago) 80m
fluentd-59k8k 1/1 Running 1 (14h ago) 2d5h
fluentd-hhtls 1/1 Running 1 (14h ago) 2d5h
host-volume-pod 1/1 Running 0 97m
nfs-volume-pod-1 1/1 Running 0 6m19s
nfs-volume-pod-2 1/1 Running 0 6s
nginx-deploy-6fb8d6548-8khhv 1/1 Running 8 (10m ago) 8h
nginx-deploy-6fb8d6548-fd9tx 1/1 Running 8 (10m ago) 8h
[rootk8s-master nfs]# kubectl get po -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
configfile-po 0/1 Completed 0 4h36m 10.2.1.69 k8s-node-02 none none
dns-test 1/1 Running 2 (14h ago) 2d23h 10.2.1.58 k8s-node-02 none none
emptydir-volume-pod 2/2 Running 2 (19m ago) 80m 10.2.1.72 k8s-node-02 none none
fluentd-59k8k 1/1 Running 1 (14h ago) 2d5h 10.2.2.34 k8s-node-01 none none
fluentd-hhtls 1/1 Running 1 (14h ago) 2d5h 10.2.1.59 k8s-node-02 none none
host-volume-pod 1/1 Running 0 97m 10.2.1.71 k8s-node-02 none none
nfs-volume-pod-1 1/1 Running 0 6m25s 10.2.2.41 k8s-node-01 none none
nfs-volume-pod-2 1/1 Running 0 12s 10.2.2.42 k8s-node-01 none none
nginx-deploy-6fb8d6548-8khhv 1/1 Running 8 (10m ago) 8h 10.2.1.67 k8s-node-02 none none
nginx-deploy-6fb8d6548-fd9tx 1/1 Running 8 (10m ago) 8h 10.2.2.40 k8s-node-01 none none
3.7 访问这个新的pod上的nginx服务
[rootk8s-master nfs]# curl 10.2.2.42
k8s-master: 10.10.10.1003.8 小结
通过刚才创建的两个nginx-pod资源我们使用nfs共享目录到两个pod中通过访问nginx服务可以看到两个pod资源显示的结果都是一致的。