k8s的安装:http://www.haijin.xyz/list/article/486
1、找一台服务器安装:
yum install -y nfs-utils #安装nfs
编辑:vi /etc/exports
/data/nfs 192.168.204.0/24(rw,sync,no_subtree_check)
这里的 192.168.204.0/24
表示允许从该子网内的所有 IP 地址进行挂载。请确保 Kubernetes 节点的 IP 地址在这个范围内。
sudo exportfs -r
更改 /etc/exports
文件后,需要重新加载 NFS 导出配置:
如果有问题可以执行下面的一些命令:
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时
# 关闭swap
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 根据规划设置主机名
hostnamectl set-hostname <hostname>
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.152.200 k8smaster
192.168.152.201 k8snode1
192.168.152.202 k8snode2
EOF
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效
# 时间同步
yum install ntpdate -y
ntpdate time.windows.com
创建挂载的路径:
/data/nfs
mkdir /data
mkdri /data/nfs
启动nfs:systemctl start nfs
2、然后在k8s的node节点上安装:
yum install -y nfs-utils #安装nfs
3、在k8s的master节点上构建应用来试试:
编写yaml文件:
nfs-nginx.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-dep1
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: wwwroot
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
volumes:
- name: wwwroot
nfs:
server: 192.168.204.181
path: /data/nfs
构建pod:kubectl apply -f nfs-nginx.yaml
删除pod:kubectl delete deployment nginx-dep1
查看pod:kubectl describe pod nginx-dep1-7c7697484-2lfff (结合kubectl get pods来看)
构建之后如果有问题请查看pod找问题,可能是nfs的网络不通的问题,可以执行一下上面的关闭防火墙的代码
4、然后在nfs的这台服务器上/data/nfs的目录下创建一个index.html文件
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>标题</title>
</head>
<body>
<p>我爱海鲸</p>
</body>
</html>
然后在任意k8s的集群的节点ip+端口就能访问到我们配置的服务
5、现在我们在操作一下pv和pvc
这两个简单的说还是使用的nfs,就是pv绑定nfs地址,pvc绑定pv,然后服务绑定pvc就完成了挂载。
pv.yaml:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
path: /data/nfs
server: 192.168.204.181
pvc.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-dep1
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: wwwroot
mountPath: /usr/share/nginx/html
ports:
- containerPort: 80
volumes:
- name: wwwroot
persistentVolumeClaim:
claimName: my-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
然后加载服务:
kubectl apply -f pvc.yaml
kubectl get pods
kubectl apply -f pv.yaml
kubectl get pv,pvc
kubectl get pods,svc
然后修改之前的index.html: