前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >我要在k8s部署nfs动态存储

我要在k8s部署nfs动态存储

原创
作者头像
dgds
修改2023-06-09 10:23:36
1.2K0
修改2023-06-09 10:23:36
举报
文章被收录于专栏:dgds的运维

在这里分为k8s1.26以下及以上,两种方式

k8s1.26以下

rbac

代码语言:txt
复制
[root@k8s-master /date/jumpserver/jumpserver-yaml/sc]# cat rbac.yaml 
kind: ServiceAccount
apiVersion: v1
metadata:
  name: nfs-client-provisioner
  namespace: jumpserver           #换成自己的
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: jumpserver      #替换成你要部署NFS Provisioner的 Namespace
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  namespace: jumpserver         #换成自己的
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    namespace: jumpserver      #替换成你要部署NFS Provisioner的 Namespace
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

nfs-deploy

代码语言:txt
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  namespace: jumpserver         #替换
  labels:
    app: nfs-client-provisioner
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccount: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner
          volumeMounts:
            - name: nfs-client-root
              mountPath:  /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: jumpserver-test      #这里注意,后面的storageclass资源会用到这个参数,要保持一致
            - name: NFS_SERVER
              value: 10.0.0.160         #nfs服务器地址
            - name: NFS_PATH
              value: /mnt/jenkins      #nfs共享目录,不是你容器内的目录,是你外部nfs服务器的目录

      volumes:
        - name: nfs-client-root
          nfs:
            server: 10.0.0.160  #同上
            path: /mnt/jenkins  #同上

storageclass

代码语言:txt
复制
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: storageclass
provisioner: jumpserver-test   #和nfs-deploy PROVISIONER_NAME 保持一致
parameters:
  archiveOnDelete: "true"
reclaimPolicy: Retain
allowVolumeExpansion: True

创建pvc测试

代码语言:txt
复制
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: jumpserver-pvc
  namespace: jumpserver
spec:
  storageClassName: storageclass   #这里写storageclass名字
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 200Mi



创建pvc
kubectl apply -f pvc.yaml
查看
kubectl apply -f pvc.yaml
但在这里发现pvc一直处于peding状态

kubectl describe pvc -n jumpserver jumpserver-pvc 来查看详细信息发现以下提示

解决办法

代码语言:txt
复制
修改k8sapiserver文件
vim /etc/kubernetes/manifests/kube-apiserver.yaml

加入以下配制
- --feature-gates=RemoveSelfLink=false

保存退出即可,配制会自动更新,这是再看pvc状态已经是bound状态,在查看pv已经自动创建出来

没图,这里我也不确定对不对,因为我的是k8s1.27版本,

但一定注意,1.26版本不能按照上面的方式修改api,会导致api下线像这样

改了也没关系,添加的操作删除后等一会就好了

如果上述方法不好使使用下述方法,就不用管什么版本,用就完了

k8s1.26版本以上

3)安装helm

helm官网

跟着上面来就ok

我下载的是这个

完成上述操作后输入helm,有提示命令就代表helm可以正常使用

代码语言:txt
复制
#添加helm源
helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner


# 安装nfs驱动
helm install nfs  nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --set storageClass.name=storageclass1 --set nfs.server=10.0.0.160 --set nfs.path=/mnt/jenkins --set storageClass.defaultClass=true -n nfs-sc-default


解释
helm install nfs  \                                      #helm的名字
nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \    #源地址名字
--set storageClass.name=storageclass1 \                  #storageclass名字
--set nfs.server=10.0.0.160 \                            #nfs服务器地址
--set nfs.path=/mnt/jenkins \                            #nfs共享目录
--set storageClass.defaultClass=true \                   #默认
-n nfs-sc-default                                        #指定名称空间

执行完成,需要下载镜像,请耐心等待

查看nfs-sc-default名称空间下的资源

镜像下载失败请手动下载镜像,镜像非国内镜像

实在下载不下来就用我这个共享的

链接:https://pan.baidu.com/s/1KO70SPdt8RI4T9SfXZrBeg?pwd=dgds

提取码:dgds

代码语言:txt
复制
下载下来上传到k8sndoe服务器
docker load -i nfs.tar.gz
如果这时docker images 命令显示nfs镜像名字和版本为none手动修改镜像名字和版本
docker  tag  IMAGE ID(注:没名字的那个镜像id,docker images可查看)  nfs-subdir-external-provisioner:v4.0.2(你要定义的镜像名字:就是这个,不用改)

如果镜像上传成功还是提示下载镜像失败,直接改deployment文件

代码语言:txt
复制
kubectl edit -n nfs-sc-default deployments.apps nfs-nfs-subdir-external-provisioner

镜像这里直接改成本地镜像名字

代码语言:txt
复制
保存退出
删除pod
kubectl delete pod -n nfs-sc-default nfs-nfs-subdir-external-provisioner-7bcdc959fb-r5b59

再次查看已经部署好了

sc也没什么问题

创建一个pvc进行测试

代码语言:txt
复制
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ceshi
  namespace: jumpserver
spec:
  storageClassName: storageclass1     #改成你刚才创建的sc的名字
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 200Mi


kubectl 

可以看到pvc已经绑定了pv

pv已经自动创建好了

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • k8s1.26以下
    • 但一定注意,1.26版本不能按照上面的方式修改api,会导致api下线像这样
    • k8s1.26版本以上
      • 3)安装helm
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档