首页 > 其他分享 >k8s实现动态存储

k8s实现动态存储

时间:2023-06-08 15:23:46浏览次数:40  
标签:存储 动态 name client nfs provisioner k8s metadata

NFS服务端安装

            1.yum install nfs-utils -y

               k8s所有节点都需要安装上面的nfs包

           2.在NFS server上配置NFS

              

            3.启动NFS服务

              systemctl start nfs-server

            4.验证服务的可用性

                showmount -e 192.168.30.156

                

 storageclass安装配置

      1.创建storageclass资源

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-client
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
  archiveOnDelete: "false"
sc.yaml

            kubectl apply -f sc.yaml

            kubectl patch storageclass nfs-client -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

          

      2.创建rbac资源   因为storage自动创建pv需要经过kube-apiserver,所以需要授权

apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["get", "list", "watch"]
  - 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
    # replace with namespace where provisioner is deployed
    namespace: default
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
  # replace with namespace where provisioner is deployed
  namespace: default
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
  # replace with namespace where provisioner is deployed
  namespace: default
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io
rbac.yaml

         kubectl apply -f rbac.yaml

      3.创建nfs deployment资源   

         需要一个deployment来专门实现pv与pvc的自动创建

apiVersion: apps/v1
kind: Deployment
metadata:
  name: 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-beijing.aliyuncs.com/pylixm/nfs-subdir-external-provisioner:v4.0.0
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: k8s-sigs.io/nfs-subdir-external-provisioner
            - name: NFS_SERVER
              value: 192.168.30.156
            - name: NFS_PATH
              value: /nfsdata
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.30.156
            path: /nfsdata
deployment-nfs.yaml

     

   4.查看deployment

      

  5.测试自动创建NFS PV

---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      imagePullSecrets:
      - name: huoban-harbor
      terminationGracePeriodSeconds: 10
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: "nfs-client"
      resources:
        requests:
          storage: 1Gi
nginx.yaml

    kubectl apply -f nginx.yaml

     

    

Helm安装数据库集群  

       

       在执行helm命令的时候必须先创建一个storageClass 否则创建的pod会一直处于pending状态

        kubectl get pvc | grep Pending | awk '{print $1}' | xargs kubectl delete pvc   删除所有状态为pending的pvc

        使用helm uninstall my-relase的时候不会自动删除pvc和pv资源 ,需要手动删除

       

        cd   /home/admin/db/milvus-helm-master/charts/milvus

        helm install --set cluster.enabled=true --set persistence.enabled=true --set mysql.enabled=true my-release  .

        

     

     

 

标签:存储,动态,name,client,nfs,provisioner,k8s,metadata
From: https://www.cnblogs.com/yxh168/p/17466559.html

相关文章

  • NOR - 闪存 S28HS01GTGZBHI033/S28HS01GTGZBHB033/S28HS01GTGZBHI030 1Gb存储器
    器件概述:Infineon带有HyperBus™的S28HS01GTSemper™闪存是一种高性能、安全可靠的NOR闪存解决方案。 这些组件集成了关键的安全功能,用于汽车、工业、通信等行业的各种应用。S28HS01GTSemper闪存采用HyperBus接口,符合JEDECeXpandedSPI(JESD251)规范。InfineonS28HS01GTSe......
  • 动态规划三:常见状态与常见递推关系式
    动态规划三:常见递推关系式常见状态坐标型前缀划分型前缀匹配型区间型背包型常见状态坐标型dp[i]:从起点到坐标i的最值/方案数/可行性dp[i][j]:从起点到坐标i,j的最值/方案数/可行性 前缀划分型dp[i]:前i个字符的最值/方案数/可行性dp[i][j]:前i个字符划分为j个部分的......
  • 使用GDB调试断点信息是gdb动态添加或取消的还是将断点烧录到elf文件的?断点信息是如何
    使用GDB调试断点信息是gdb动态添加或取消的还是将断点烧录到elf文件的?断点信息是如何加载进单片机的并进行加下来的调试运行的? from:GPT-4GDB(GNU调试器)是一个用于调试程序的强大工具,它可以让你设置断点、检查变量和内存、执行单步调试等。在单片机(微控制器)上使用GDB进行调试......
  • K8s 指定 pod 运行在固定ip方式
    Kubernetes指定pod运行在固定ip方式方式一在CalicoGitHubIssues#5196问题的commits#6249提交中,引入新的Pod注释cni.projectcalico.org/hwAddr,用于将指定的MAC地址分配给容器端Veth接口。将Calico升级至v3.24.1或以上版本,使用如下注解轻松设置PodIP和Mac地址。......
  • 无法定位程序输入点于动态链接库怎么办?电脑无法定位动态链接库什么意思?
    http://server.sosol.com.cn/server/2022/0801/23414.html一、重装软件当我们的电脑出现无法定位程序输入点于动态链接库的时候,可以先尝试把软件卸载,因为有可能是系统的软件没有及时更导致的,可以卸载了然后下载最新版的软件; 二、在看到该错误提示框后,记录下框里提示的那个.dl......
  • 一些动态几何问题的流式算法
    本文为STOC'04AlgorithmsforDynamicGeometricProblemsoverDataStreams的阅读笔记。论文作者PiotrIndyk,研究领域:高维几何问题,流式算法,摘要数据结构维护,稀疏傅立叶变换。1近似算法在假设\(\text{P}\neq\text{NP}\)的情况下,近似算法一般针对NP最优化问题(N......
  • 算法学习day50动态规划part11-123、188
    packageLeetCode.DPpart11;/***123.买卖股票的最佳时机III*给定一个数组,它的第i个元素是一支给定的股票在第i天的价格.*设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。*注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。......
  • 算法学习day51动态规划part12-309、714
    packageLeetCode.DPpart12;/***309.最佳买卖股票时机含冷冻期*给定一个整数数组prices,其中第prices[i]表示第i天的股票价格。*设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):*卖出股票后,你无法在第二天买入......
  • 动态组件,插槽,vue-cli创建项目,目录结构,编写规范,导入导出语法
    1动态组件#<component:is="who"></component>#component标签的is属性等于组件名字,这里就会显示这个组件<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title>......
  • [Docker/K8S]Docker与K8S的区别
    1定义角度Docker是一种开放源码的应用容器引擎,允许开发人员将其应用和依赖包打包成可移植的容器/镜像中;然后,发布到任何流行的Linux或Windows机器上,也能实现虚拟化。该容器完全使用沙箱机制,彼此之间没有任何接口。k8s,全称kubernetes,是一种开放源码的容器集群管理系统,能......