NFS环境搭建与在K8s的应用

第一部分:配置 docker

1.1、配置Nginx,转发 nexus 上传包的请求
sudo tee /etc/nginx/conf.d/k8s.conf <<-‘EOF’

HTTPS 服务器块

server {
listen 443 ssl;
server_name sls.registry.k8s;

# SSL 证书配置
ssl_certificate /home/projectname/server/mydomain.crt;
ssl_certificate_key /home/projectname/server/mydomain.key;

# 反向代理设置
location / {
    proxy_pass http://192.168.1.205:8082;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

}
EOF

nginx -s reload

1.2、配置Nexus 调整上传附件的大小,确保能上传镜像
http {

// 新增下面这一行
client_max_body_size 2000M;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
// 修改这一行的值
keepalive_timeout 100;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;


ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;


access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;


gzip on;



include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

}

1.3、配置docker 让docker 能访问nexus
1.3.1、nginx + nexus + docker 服务器
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“insecure-registries”: [ “sls.registry.k8s:443”,“192.168.1.205:8082”],
“registry-mirrors”: [ “https://sls.registry.k8s”,“http://192.168.1.205:8082”,“https://7e9g5tmw.mirror.aliyuncs.com”,“https://registry.docker-cn.com”],
“exec-opts”: [“native.cgroupdriver=systemd”]
}

EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

1.3.2、k8s 服务器:
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“insecure-registries”:[“sls.registry.k8s:5000”,“192.168.1.205:8082”],
“registry-mirrors”: [“https://sls.registry.k8s:5000”,“http://192.168.1.205:8082”,“https://7e9g5tmw.mirror.aliyuncs.com”]
}
EOF
sudo systemctl daemon-reload

第二部分: 安装NFS

2.1、安装NFS 服务器:
搭建一个 NFS(Network File System)服务器通常需要在 Linux 系统上进行操作。下面是一个基本的步骤指南:

步骤 1: 安装 NFS 服务器软件

  1. 使用包管理器安装 NFS 服务器软件。具体命令取决于你使用的 Linux 发行版。以 Ubuntu 为例,可以使用以下命令:

    sudo apt update
    sudo apt install nfs-kernel-server
    

步骤 2: 配置 NFS 服务器

  1. 编辑 NFS 服务器的配置文件。在 Ubuntu 上,配置文件位于 /etc/exports

    sudo nano /etc/exports
    
  2. 在配置文件中添加要共享的目录及其权限。例如,如果要共享 /srv/nfs_share 目录,可以添加类似以下内容:

    
    

/srv/nfs_share *(rw,sync,no_subtree_check)


- `/srv/nfs_share`: 要共享的目录路径。
- `*`: 允许所有客户端访问。
- `rw`: 可读写权限。
- `sync`: 同步写入。
- `no_subtree_check`: 不检查子目录。

3. 保存并关闭文件。

4. 更新 NFS 服务器配置:

sudo exportfs -a


### 步骤 3: 启动 NFS 服务器

1. 启动 NFS 服务器:

s

### 如何在Kubernetes(K8S)中设置NFS存储 #### 定义PersistentVolume(PV) 为了使Kubernetes集群中的Pod可以利用外部的NFS服务作为持久化卷,需先定义一个`PersistentVolume`(PV),该资源对象描述了一个由管理员配置好的网络文件系统的位置以及其访问模式等特性。下面是一份用于创建基于NFS的PV实例清单: ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: my-pv spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow mountOptions: - hard - nfsvers=4.1 nfs: path: /tmp server: 172.17.0.2 ``` 此YAML文档指定了名为`my-pv`的一个持久卷,它连接到位于IP地址为`172.17.0.2`的NFS服务器上路径为`/tmp`的共享目录,并提供给单个Pod以读写方式挂载使用[^1]。 #### 创建PersistentVolumeClaim(PVC) 为了让应用程序能够请求并绑定上述定义过的PV,在应用部署前还需要准备一份`PersistentVolumeClaim`(PVC)声明来表达所需存储的具体需求。这里给出一段简单的例子说明如何编写这样的申请文件: ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 5Gi storageClassName: slow ``` 这段配置告诉Kubernetes去寻找满足条件(即容量至少为5GB且支持ReadWriteOnce模式)的可用PV并之建立关联关系。 #### 应用程序使用NFS存储 最后一步是在实际的应用程序配置里通过引用之前创建成功的PVC实现数据持久化的功能。例如对于运行于容器内的Web服务器来说,则可以在相应的Deployment或StatefulSet模板部分加入如下片段完成这一目的: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: webapp-deployment spec: replicas: 1 selector: matchLabels: app: webapp template: metadata: labels: app: webapp spec: containers: - name: nginx-container image: nginx:latest volumeMounts: - name: html-volume mountPath: "/usr/share/nginx/html" volumes: - name: html-volume persistentVolumeClaim: claimName: my-pvc ``` 在此案例中,名为`nginx-container`的服务会将其内部的工作目录映射至先前设定好名称叫作`html-volume`的数据源之上,从而确保即使重启也不会丢失任何上传至此处的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沃心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值