1. 获取资料 网址: https://blog.csdn.net/xts_huangxin/article/details/51494472 感谢原作者 这里面 按照自己的机器情况进行了学习模仿 并且mark一下.
2. 下载yaml 文件:
https://github.com/FlyingShit-XinHuang/my-doc/blob/master/k8s/pv%26pvc/nfs.zip
3. 解压缩文件,然后根据实际情况进行修改.
4. 创建NFS
mkdir -p /nfs/k8s
创建目录
chmod-R 777 /nfs
修改权限
vim/etc/exports
增加内容/nfs/k8s *(rw,insecure,sync,no_subtree_check,no_root_squash)
保存.
exportfs-r
让文件生效
systemctl enable nfs
systemctl enable rpcbind
systemctl restart nfs
systemctl restart rpcbind
启动服务
5. 创建PV 用到的yaml文件进行修改后的为:
spec 里面定义相关的内容. nfs 里面对应的 server 制定 以及 path 下面 写好了nfs的目录
创建语句为
kubectl create-f nfs-pv.yaml
yaml文件为
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs
spec:
capacity:
storage: 1Gi
accessModes:-ReadWriteMany
nfs:
server:10.24.103.1path:"/nfs/k8s"
6. 创建PVC
据说 capacity 里面的存储大小应该保持一致 ,避免出现问题
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nfs
spec:
accessModes:-ReadWriteMany
resources:
requests:
storage: 1Gi
7. 进行测试验证, github 里面是定义了 一个 busybox 来写入 文件 nginx 来读取 当前目录的index.html的值
首先 busybox 相关的内容为
apiVersion: v1
kind: ReplicationController
metadata:
name: nfs-busybox
spec:
replicas:1selector:
name: nfs-busybox
template:
metadata:
labels:
name: nfs-busybox
spec:
containers:-image:busybox
command:-sh- -c- 'while true; do date > /mnt/index.html; hostname >> /mnt/index.html; sleep $(($RANDOM % 5 + 5)); done'imagePullPolicy: IfNotPresent
name: busybox
volumeMounts:
# name must match the volume name below-name: nfs
mountPath:"/mnt"volumes:-name: nfs
persistentVolumeClaim:
claimName: nfs
创建 nginx 前段网页
apiVersion: v1
kind: ReplicationController
metadata:
name: nfs-web
spec:
replicas:1selector:
role: web-frontend
template:
metadata:
labels:
role: web-frontend
spec:
containers:-name: web
image: nginx
ports:-name: web
containerPort:80volumeMounts:
# name must match the volume name below-name: nfs
mountPath:"/usr/share/nginx/html"volumes:-name: nfs
persistentVolumeClaim:
claimName: nfs
创建services
kind: Service
apiVersion: v1
metadata:
name: nfs-web
spec:
ports:- port: 80selector:
role: web-frontend
然后
kubectl getservice
获取信息
[root@k8smaster01~]# kubectl getservice
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
frontend NodePort10.100.8.215 80:30001/TCP 35d
kubernetes ClusterIP10.96.0.1 443/TCP 37d
nfs-web ClusterIP 10.103.125.236 80/TCP 1h
redis-master ClusterIP 10.111.216.233 6379/TCP 35d
redis-slave ClusterIP 10.107.12.137 6379/TCP 35d
然后测试验证
命令 :curl 10.103.125.236显示结果:
[root@k8smaster01~]# curl 10.103.125.236Mon Jun25 09:15:25 UTC 2018nfs-busybox-l596c
[root@k8smaster01~]#
7. 学习用到的其他命令
kubectl create -f *.yaml
创建资源
kubectl delete pv pvname
kubectl delete pvc pvcname
删除pv和pvc 但是如果 有 pod 在引用他们的话无法删除需要删除rc 才可以
kubectl delete pod podname
删除pod k8s 会瞬间再启动一个起来. 如果没有images 重新pull一下 用这种方式很快就能从containercreating 变成 running状态.
kubectl delete rc rcname
能够删除rc定义 保证pv也被完整性的删除
kubectlgetservice
kubectlgetpod
kubectlgetnodes
kubectlgetrc
kubectlget rc -n kube-system (选择显示namespace)