k8s学习之持久化以及挂载

我爱海鲸 2024-10-04 17:29:50 暂无标签

简介nfs、pv、pvc

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:

你好:我的2025