K8S篇 您所在的位置:网站首页 truenas安装插件 K8S篇

K8S篇

#K8S篇| 来源: 网络整理| 查看: 265

前言

有关k8s的搭建可以参考:http://t.csdn.cn/H84Zu 有关过程中使用到的nfs相关的nas,可以参考: http://t.csdn.cn/ACfoT http://t.csdn.cn/tPotK http://t.csdn.cn/JIn27

安装nfs存储插件

NFS-Subdir-External-Provisioner是一个自动配置卷程序,它使用现有的和已配置的 NFS 服务器来支持通过持久卷声明动态配置 Kubernetes 持久卷。

此组件是对 nfs-client-provisioner 的扩展,nfs-client-provisioner 已经不提供更新,且 nfs-client-provisioner 的 Github 仓库已经迁移到 NFS-Subdir-External-Provisioner 的仓库。

GitHub 地址:https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner

创建NFS服务端

这里使用的是trueNas提供的NFS服务: ip地址:192.168.1.10 存储目录:/mnt/kingStoragePool 也可以自行实现一个nfs服务器。

部署NFS Provisioner

所有节点都必须提前安装nfs-utils

yum install nfs-utils

使用下面的命令查看nfs状态:

[root@centos-k8s-master ~]# showmount -a 192.168.1.10 All mount points on 192.168.1.10: 192.168.1.13:/mnt/kingStoragePool [root@centos-k8s-master ~]# rpm -qa | grep nfs libnfsidmap-0.25-19.el7.x86_64 nfs-utils-1.3.0-0.68.el7.2.x86_64 [root@centos-k8s-master ~]# rpm -qa | grep rpcbind rpcbind-0.2.0-49.el7.x86_64 创建 ServiceAccount

现在的 Kubernetes 集群大部分是基于 RBAC 的权限控制,所以创建一个一定权限的 ServiceAccount 与后面要创建的 “NFS Provisioner” 绑定,赋予一定的权限。

apiVersion: v1 kind: ServiceAccount metadata: name: nfs-client-provisioner namespace: provisioner# 替换成你要部署的 Namespace --- 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: provisioner 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 namespace: 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: provisioner subjects: - kind: ServiceAccount name: nfs-client-provisioner namespace: provisioner roleRef: kind: Role name: leader-locking-nfs-client-provisioner apiGroup: rbac.authorization.k8s.io

部署RBAC:

kubectl apply -f nfs-rbac.yaml 部署 NFS-Subdir-External-Provisioner

创建 NFS Provisioner 部署文件,这里将其部署到 “provisioner” Namespace 中。 nfs-provisioner-deploy.yaml:

apiVersion: apps/v1 kind: Deployment metadata: name: nfs-client-provisioner 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: serviceAccountName: nfs-client-provisioner containers: - name: nfs-client-provisioner #image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0 image: registry.cn-beijing.aliyuncs.com/xngczl/nfs-subdir-external-provisione:v4.0.0 volumeMounts: - name: nfs-client-root mountPath: /persistentvolumes env: - name: PROVISIONER_NAME ## Provisioner的名称,以后设置的storageclass要和这个保持一致 value: nfs-client - name: NFS_SERVER ## NFS服务器地址,需和valumes参数中配置的保持一致 value: 192.168.1.10 - name: NFS_PATH ## NFS服务器数据存储目录,需和valumes参数中配置的保持一致 value: /mnt/kingStoragePool volumes: - name: nfs-client-root nfs: server: 192.168.1.10 ## NFS服务器地址 path: /mnt/kingStoragePool ## NFS服务器数据存储目录

创建 NFS Provisioner:

# -n: 指定应用部署的 Namespace kubectl apply -f nfs-provisioner-deploy.yaml -n provisioner 创建 NFS SotageClass

创建一个 StoageClass,声明 NFS 动态卷提供者名称为 “nfs-storage”。

nfs-storage.yaml:

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: nfs-storage annotations: storageclass.kubernetes.io/is-default-class: "false" ## 是否设置为默认的storageclass provisioner: nfs-client ## 动态卷分配者名称,必须和上面创建的"provisioner"变量中设置的Name一致 parameters: archiveOnDelete: "true" ## 设置为"false"时删除PVC不会保留数据,"true"则保留数据 mountOptions: - hard ## 指定为硬挂载方式 - nfsvers=4 ## 指定NFS版本,这个需要根据NFS Server版本号设置 kubectl apply -f nfs-storage.yaml -n provisioner


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有