安装 NFS Client

本教程演示了如何搭建 KubeSphere 集群并配置 NFS 存储。

备注

  • 本教程以 Ubuntu 16.04 为例。
  • 不建议您在生产环境中使用 NFS 存储(尤其是在 Kubernetes 1.20 或以上版本),这可能会引起 failed to obtain lockinput/output error 等问题,从而导致 Pod CrashLoopBackOff。此外,部分应用不兼容 NFS,例如 Prometheus 等。

准备工作

您必须准备好提供外部存储服务的 NFS 服务器。请确保已在客户端机器允许访问的 NFS 服务器上创建并导出目录。有关更多信息,请参见搭建 NFS 服务器

步骤 1:配置客户端机器

请在所有客户端上安装 nfs-common,它提供必要的 NFS 功能,而无需安装其他服务器组件。

  1. 执行以下命令确保使用最新软件包。

    1. sudo apt-get update
  2. 在所有客户端上安装 nfs-common

    1. sudo apt-get install nfs-common
  3. 访问稍后想要下载 KubeKey 到其上的一台客户端机器(任务机)。创建一个配置文件,其中包含 NFS 服务器的全部必要参数,KubeKey 将在安装过程中引用该文件。

    1. vi nfs-client.yaml

    示例配置文件:

    1. nfs:
    2. server: "192.168.0.2" # This is the server IP address. Replace it with your own.
    3. path: "/mnt/demo" # Replace the exported directory with your own.
    4. storageClass:
    5. defaultClass: false

    备注

    • 如果想要配置更多的值,请参见 NFS-client Chart 配置
    • storageClass.defaultClass 字段决定是否将 NFS-client Provisioner 的存储类型设置为默认存储类型。如果您输入 false,KubeKey 将安装 OpenEBS 来提供本地卷,您在集群上创建工作负载时,不会动态供应本地持久卷。安装 KubeSphere 之后,您可以直接在控制台上更改默认存储类型。
  4. 保存文件。

步骤 2:下载 KubeKey

根据以下步骤在任务机上下载 KubeKey

GitHub Release Page 下载 KubeKey 或者直接运行以下命令。

  1. curl -sfL https://get-kk.kubesphere.io | VERSION=v2.2.1 sh -

首先运行以下命令,确保您从正确的区域下载 KubeKey。

  1. export KKZONE=cn

运行以下命令来下载 KubeKey:

  1. curl -sfL https://get-kk.kubesphere.io | VERSION=v2.2.1 sh -

备注

下载 KubeKey 之后,如果您将其转移到访问 Googleapis 受限的新机器上,请务必再次运行 export KKZONE=cn,然后继续执行以下步骤。

备注

通过以上命令,可以下载 KubeKey 的最新版本 (v2.2.1)。您可以更改命令中的版本号来下载特定的版本。

使 kk 可执行:

  1. chmod +x kk

步骤 3:创建集群

  1. 指定您想要安装的 Kubernetes 版本和 KubeSphere 版本,例如:

    1. ./kk create config --with-kubernetes v1.22.10 --with-kubesphere v3.3.0

    备注

    • 安装 KubeSphere 3.3.0 的建议 Kubernetes 版本:v1.19.x、v1.20.x、v1.21.x、v1.22.x 和 v1.23.x(实验性支持)。如果不指定 Kubernetes 版本,KubeKey 将默认安装 Kubernetes v1.23.7。有关受支持的 Kubernetes 版本的更多信息,请参见支持矩阵

    • 如果您在此步骤的命令中不添加标志 --with-kubesphere,则不会部署 KubeSphere,只能使用配置文件中的 addons 字段安装,或者在您后续使用 ./kk create cluster 命令时再次添加这个标志。

    • 如果您添加标志 --with-kubesphere 时不指定 KubeSphere 版本,则会安装最新版本的 KubeSphere。

  2. 如果您不自定义名称,将创建默认文件 config-sample.yaml。编辑文件:

    1. vi config-sample.yaml
    1. ...
    2. metadata:
    3. name: sample
    4. spec:
    5. hosts:
    6. - {name: client1, address: 192.168.0.3, internalAddress: 192.168.0.3, user: ubuntu, password: Testing123}
    7. - {name: client2, address: 192.168.0.4, internalAddress: 192.168.0.4, user: ubuntu, password: Testing123}
    8. - {name: client3, address: 192.168.0.5, internalAddress: 192.168.0.5, user: ubuntu, password: Testing123}
    9. roleGroups:
    10. etcd:
    11. - client1
    12. control-plane:
    13. - client1
    14. worker:
    15. - client2
    16. - client3
    17. controlPlaneEndpoint:
    18. domain: lb.kubesphere.local
    19. address: ""
    20. port: 6443
    21. kubernetes:
    22. version: v1.21.5
    23. imageRepo: kubesphere
    24. clusterName: cluster.local
    25. network:
    26. plugin: calico
    27. kubePodsCIDR: 10.233.64.0/18
    28. kubeServiceCIDR: 10.233.0.0/18
    29. registry:
    30. registryMirrors: []
    31. insecureRegistries: []
    32. addons:
    33. - name: nfs-client
    34. namespace: kube-system
    35. sources:
    36. chart:
    37. name: nfs-client-provisioner
    38. repo: https://charts.kubesphere.io/main
    39. valuesFile: /home/ubuntu/nfs-client.yaml # Use the path of your own NFS-client configuration file.
    40. ...
  3. 请特别注意 addons 字段,您必须在该字段下提供 NFS-client 的信息。有关文件中每个参数的更多信息,请参见多节点安装

  4. 保存文件,执行以下命令安装 Kubernetes 和 KubeSphere:

    1. ./kk create cluster -f config-sample.yaml
  5. 安装完成后,可以使用以下命令检查安装日志:

    1. kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f

    预期输出:

    1. #####################################################
    2. ### Welcome to KubeSphere! ###
    3. #####################################################
    4. Console: http://192.168.0.3:30880
    5. Account: admin
    6. Password: [email protected]
    7. NOTES
    8. 1. After you log into the console, please check the
    9. monitoring status of service components in
    10. "Cluster Management". If any service is not
    11. ready, please wait patiently until all components
    12. are up and running.
    13. 2. Please change the default password after login.
    14. #####################################################
    15. https://kubesphere.io 20xx-xx-xx xx:xx:xx
    16. #####################################################

步骤 4:验证安装

您可以使用命令行或者从 KubeSphere 的 Web 控制台来验证 NFS-client 是否安装成功。

命令行

  1. 运行以下命令检查存储类型:

    1. kubectl get sc

    预期输出:

    1. NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
    2. local (default) openebs.io/local Delete WaitForFirstConsumer false 16m
    3. nfs-client cluster.local/nfs-client-nfs-client-provisioner Delete Immediate true 16m

    备注

    若将 nfs-client 设置为默认存储类型,KubeKey 则不会安装 OpenEBS。

  2. 运行以下命令检查 Pod 的状态。

    1. kubectl get pod -n kube-system

    请注意,nfs-client 安装在命名空间 kube-system 中,预期输出(不包括无关 Pod):

    1. NAME READY STATUS RESTARTS AGE
    2. nfs-client-nfs-client-provisioner-6fc95f4f79-92lsh 1/1 Running 0 16m

KubeSphere 控制台

  1. 使用默认帐户和密码 (admin/[[email protected]](https://kubesphere.io/cdn-cgi/l/email-protection)) 通过 <NodeIP>:30880 登录 Web 控制台。点击左上角的平台管理,选择集群管理

  2. 选择应用负载 > 容器组,从下拉菜单中选择 kube-system,可以看到 nfs-client 的 Pod 正常运行。

  3. 选择存储 > 存储类型,可以看到集群中可用的存储类型。

备注

有关如何在 KubeSphere 控制台上创建持久卷声明的更多信息,请参见持久卷声明