StorageClass 简单学习


学习资料来源

https://www.jianshu.com/p/5e565a8049fc
https://zhuanlan.zhihu.com/p/289501984
https://blog.csdn.net/ag1942/article/details/115371793
https://stackoverflow.com/questions/65376314/kubernetes-nfs-provider-selflink-was-empty

等等..

第一部分: StorageClass 资源获取

  • 搭建nfs, 以及提供服务, 我这边采用的是 * 指定ip地址, 避免k8s内部无法连接.
  • k8s集群内每个节点都需要打开 nfs systemctl enable nfs && systemctl restart nfs

下载资料

git clone https://github.com/kubernetes-incubator/external-storage.git

  • 公司网络太差, 也可以直接使用浏览器下载然后解压缩的方式来实现.

第二部分: 部署使用

2.1 部署deployment

注意下载好的文件内有多种外部存储, 为了简单起见使用nfs-client的方式进行

  • 进入到nfs-client 文件夹中进行相关工作
  • 注意我自己手动下载了一些文件.最开始并没有这么多文件夹的.
/k8ssc/external-storage-master/nfs-client/deploy
[root@k8s-master01 deploy]# ll
总用量 36
-rw-r--r-- 1 root root 226 10月 21 2020 class.yaml
-rw-r--r-- 1 root root 1030 10月 21 2020 deployment-arm.yaml
-rw-r--r-- 1 root root 1008 5月 4 09:58 deployment.yaml
-rw-r--r-- 1 root root 278 5月 4 10:09 nfs-clusterrolebinding.yaml
-rw-r--r-- 1 root root 836 5月 4 10:08 nfs-clusterrole.yaml
drwxr-xr-x 2 root root 214 10月 21 2020 objects
-rw-r--r-- 1 root root 1656 5月 4 09:44 rbac2.yaml
-rw-r--r-- 1 root root 1819 10月 21 2020 rbac.yaml
-rw-r--r-- 1 root root 241 5月 4 09:24 test-claim.yaml
-rw-r--r-- 1 root root 424 10月 21 2020 test-pod.yaml
  • 需要注意的是 deployment 需要修改之后再进行部署
  • 修改内容为将服务修改成自己本地的nfs-server以及目录
[root@k8s-master01 deploy]# exportfs
/nfs <world>
# 注意 这个目录是我本地的环境信息.
[root@k8s-master01 deploy]# cat deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
labels:
app: nfs-client-provisioner
# replace with namespace where provisioner is deployed
namespace: default
spec:
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app: nfs-client-provisioner
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: quay.io/external_storage/nfs-client-provisioner:latest
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: 10.110.83.201 # 需要修改为自己的nfs-server
- name: NFS_PATH
value: /nfs #需要修改成自己的服务目录
volumes:
- name: nfs-client-root
nfs:
server: 10.110.83.201 # 同样处理.
path: /nfs #同样处理.
  • 修改完deployment.yaml 之后就可以执行部署了.

    kubectl apply -f deployment.yaml
  • 部署完成之后可以进行查看
[root@k8s-master01 deploy]# kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-7b9cf5df76-78n5d 1/1 Running 0 12h
nfs-client-provisioner-7f547686c4-59294 1/1 Running 0 80m
redis-master-0 1/1 Running 0 69m
redis-slave-0 0/1 CrashLoopBackOff 18 69m
[root@k8s-master01 deploy]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
mysql 1/1 1 1 12h
nfs-client-provisioner 1/1 1 1 80m
  • 注意: 为了简单可以先在一个节点将这个images 拉取到 然后分发到各个node 节点中.
  • 注意: 有问题需要kubectl describe pods podid 或者是 kubectl logs -f podname 查看相关错误信息.

2.2 部署 StorageClass

  • 不需要修改相关文件, 直接部署即可.
cat class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-nfs-storage
provisioner: fuseim.pri/ifs # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
archiveOnDelete: "false"
  • 直接部署即可 kubectl apply -f class.yaml
  • 部署完之后可以进行查看:
[root@k8s-master01 deploy]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE
managed-nfs-storage fuseim.pri/ifs Delete Immediate false 96m
  • 著有需要记住这个name 后面会有用.

2.3 授权

  • 注意: 这里面我遇到了一个很大的坑.

    按照原始文档创建之后一直报错

    leaderelection.go:234] error retrieving resource lock default/fuseim.pri-ifs: Unauthorized

    后来经过多发查找发现问题原因 如果创建到default 的表空间, 可能对backends的获取有问题,除了需要执行的kubectl apply -f rbac.yaml 之后还需要执行另外的权限设置.

    注意 default 的命令空间 设置.
nfs-clusterrole.yaml
新增内容: kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-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: ["watch", "create", "update", "patch"]
- apiGroups: [""]
resources: ["services"]
verbs: ["get"]
- apiGroups: ["extensions"]
resources: ["podsecuritypolicies"]
resourceNames: ["nfs-provisioner"]
verbs: ["use"]
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-nfs-provisioner
subjects:
- kind: ServiceAccount
name: default
namespace: default
roleRef:
kind: ClusterRole
name: nfs-provisioner-runner
apiGroup: rbac.authorization.k8s.io

2.4 简要测试验证.

  • 创建pvc

    kubectl apply -f test-claim.yaml

  • 注意文件里面的 class 名字.

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: test-claim
annotations:
volume.beta.kubernetes.io/storage-class: "managed-nfs-storage"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
  • 可以查看相关信息:
[root@k8s-master01 deploy]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
mysql Bound pv-volume-mysql 8Gi RWO 12h
pvc-test Bound pv-test 1Gi RWO 12h
redis-data-redis-master-0 Bound pvc-34e2b8de-13af-4f60-9b45-3259c45e2338 8Gi RWO managed-nfs-storage 83m
redis-data-redis-slave-0 Bound pvc-b651443d-ecff-46a4-9507-977180cde3be 8Gi RWO managed-nfs-storage 83m
test-claim Bound pvc-cd79f7a1-2eab-443a-b183-e7730e38840a 1Mi RWX managed-nfs-storage 107m
[root@k8s-master01 deploy]# cd /nfs
[root@k8s-master01 nfs]# ll
总用量 0
-rw-r--r-- 1 root root 0 5月 4 09:49 1
drwxrwxrwx 2 root root 28 5月 4 10:34 default-redis-data-redis-master-0-pvc-34e2b8de-13af-4f60-9b45-3259c45e2338
drwxrwxrwx 2 root root 28 5月 4 10:34 default-redis-data-redis-slave-0-pvc-b651443d-ecff-46a4-9507-977180cde3be
drwxrwxrwx 2 root root 6 5月 4 10:11 default-test-claim-pvc-cd79f7a1-2eab-443a-b183-e7730e38840a

第三部分: 其他问题.

  • 除了default 命令空间之后 还遇到一个 一直提示 avaible 但是不能 bound的错误 经过一番查看, 找到一个合理的解释为:
In v1.16, we will deprecate the SelfLink field in both ObjectMeta and ListMeta objects by: documenting in field definition that it is deprecated and is going to be removed adding a release-note about field deprecation We will also introduce a feature gate to allow disabling setting SelfLink fields and opaque the logic setting it behind this feature gate.

In v1.20 (12 months and 4 release from v1.16) we will switch off the feature gate which will automatically disable setting SelfLinks. However it will still be possible to revert the behavior by changing value of a feature gate.

In v1.21, we will get rid of the whole code propagating those fields and fields themselves. In the meantime, we will go over places referencing that field (see below) and get rid of those too.
  • 解决方法为在kube-apiserver.yaml 里面添加内容为:
在文件: /etc/kubernetes/manifests/kube-apiserver.yaml
添加内容:
- --feature-gates=RemoveSelfLink=false
# 注意多主节点, 每个都需要修改.
# 注意kubeadm搭建的 修改了 次文件 apiserver 会自动重启.
修改之后为: apiVersion: v1
kind: Pod
metadata:
annotations:
kubeadm.kubernetes.io/kube-apiserver.advertise-address.endpoint: 10.110.83.201:6443
creationTimestamp: null
labels:
component: kube-apiserver
tier: control-plane
name: kube-apiserver
namespace: kube-system
spec:
containers:
- command:
- kube-apiserver
- --feature-gates=RemoveSelfLink=false
  • 但是怀疑跟这个没关系, 因为 我用的1.21 说已经完全废除了.

第四部分: 简单使用

  • 设置storageclass 为默认 default 的存储类
kubectl patch storageclass managed-nfs-storage  -p '{"metadata": {"annotations":{"storageclass.beta.kubernetes.io/is-default-class":"true"}}}'

执行 mysql的安装

helm install mysqltestsc stable/mysql
然后可以执行
kubectl exec -it mysqltestscxxxx /bin/bash 的方式来连接查看
查看密码的命令为:
kubectl get secret --namespace default mysqltestsc -o jsonpath="{.data.mysql-root-password}" | base64 --decode; echo

StorageClass 简单学习的更多相关文章

  1. Log4j简单学习笔记

    log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...

  2. shiro简单学习的简单总结

    权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...

  3. CentOS 简单学习 firewalld的使用

    1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...

  4. Windows 下 Docker 的简单学习使用过程之一 dockertoolbox

    1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...

  5. 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习

    嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...

  6. Linux——帮助命令简单学习笔记

    Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...

  7. OI数学 简单学习笔记

    基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...

  8. mongodb,redis简单学习

     2.mongodb安装配置简单学习                   配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作                 ...

  9. html css的简单学习(三)

    html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...

  10. html css的简单学习(二)

    html css的简单学习(二) <!Doctype html>告诉浏览器,这是一个html文档.lang="en" 默认是en,表示英语:zh-Hans 中文简体:z ...

随机推荐

  1. ModelArts黑科技揭秘|弹性训练,让训练资源张弛有度

    摘要:AI进入产业的门槛变高,开发者想要做出优秀的AI模型就不得不在算力和成本之间折中,怎么办? 为帮助企业在AI落地过程中进一步实现降本增效,华为云推出AI黑科技--弹性训练. 今年,AI界最被热议 ...

  2. 扎根CNCF社区贡献五年是怎样的体验?听听华为云原生开源团队的负责人怎么说

    摘要:本月我们要重点介绍王泽锋(Kevin Wang),他是 CNCF 社区的长期贡献者,华为云原生开源团队的负责人,KubeEdge 和 Volcano 项目的联合创始人.Kevin 回答了几个关于 ...

  3. 洞见商业新机,云原生数据库GaussDB让企业决策更科学

    摘要:华为云GaussDB(for Redis)为数位科技打造了一个稳定可靠.高效安全.卓越性能的大数据引擎,KV存储降本80%,助力实体企业数字化转型之路走的更加稳健. 本文分享自华为云社区< ...

  4. 华为云MVP程云:知识化转型,最终要赋能一线

    摘要:如今的智能语音助手,可以帮助我们完成日常生活中的一些常规动作.同样,在企业中,智能问答机器人也在扮演着同样的角色. 本文分享自华为云社区<[亿码当先,云聚金陵]华为云MVP程云:知识化转型 ...

  5. 深度解读鸿蒙轻内核CPU占用率

    摘要:CPUP(Central Processing Unit Percentage,CPU占用率)分为系统CPU占用率和任务CPU占用率.用户通过系统级的CPU占用率,判断当前系统负载是否超出设计规 ...

  6. 一通百通,带你一次性全理解Spring 中的Template

    摘要:Template定义了问题的边界,子类定义了具体的实现,只要在模板的范围内玩耍就可以了. 本文分享自华为云社区<Spring 中的Template一次全理解,解析问题的本质>,作者: ...

  7. 陕西旅游集团旗下景区春节期间累计接待超 200 万人次,这背后也有火山引擎 VeDI 的身影

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 春节期间累计接待游客 200.42 万人次,同比 2022 年增长 102.47%,同比 2019 年增长 19.27%, ...

  8. PPT 动画-滚动数字

    插入一个文本框,输入 0~9 调整边框大小,使其竖着排列 页面切换,选择平滑

  9. 用 ChatGPT 写一篇《ChatGPT 会取代我们的工作吗》

    自从 ChatGPT 火爆以后,最常谈到的话题就是 ChatGPT 会取代我们的工作吗?在写这篇内容时我有个大胆的想法,那就是让 ChatGPT 来取代我的工作. 首先,我决定直接让 ChatGPT ...

  10. 洛谷P1174 打砖块 | CCPC2021网络赛8.28 1011 动态规划 分组背包

    本文学习自洛谷社区 喜提CCPC2021网络赛原题 题意相当于是要在每一列中选若干个砖块打掉,消耗所需的子弹数并得到对应的得分.最大化k个子弹能得到的最大得分. 预处理出第 \(i\) 列 \(j\) ...