在云计算和容器化的世界中,数据存储资源的配置和管理是至关重要的。本文将介绍如何使用KubeSpray项目在Azure上部署一个生产就绪的Kubernetes集群,并进一步配置数据存储资源。
在任何项目中,数据存储设施的使用都是不可或缺的。当涉及到云服务和容器时,不再有像本地硬盘那样的直接访问方式。相反,需要考虑持久卷和基于云的存储解决方案。使用Kubernetes,可以设置一个数据卷,它对于容器资源来说就像一个大的远程硬盘。这是将不同技术以协调的方式整合在一起的关键部分。
首先,在控制面板中选择“新建”操作,然后选择“通用存储资源”:
为资源指定一个唯一的名称(小写),并使用与主Kubernetes集群相同的资源组:
新资源将在资源组中可用 - 选择它进行编辑:
在详细信息页面中,选择“文件”共享部分:
在文件共享页面,点击“添加新”,为共享指定一个唯一的名称,并指定所需的文件存储大小(以GB为单位):
保存后,应该可以看到新创建的共享可供使用。
接下来,需要从存储账户获取一些安全密钥。返回到存储账户所在的主要资源组列表,并选择它。
进入存储账户后,需要导航到“访问密钥”部分,并复制出第一个密钥和资源名称。
不能直接在Kubernetes中使用这些密钥,需要使用Base64进行转换。在这个例子中,使用在线资源www.base64encode.org进行编码。
现在需要将这些信息以Yaml文件的形式提供给Kubernetes。SSH到主Kubernetes管理机器,并执行以下命令:
sudo su -
apt-get update
apt-get install -y cifs-utils
现在使用nano创建一个新的yaml文件:
nano azure-secret.yaml
在该文件中添加以下内容,替换accountname和accountkey的值为每个的base64编码值(注意yaml文件中的缩进/空格):
apiVersion: v1
kind: Secret
metadata:
name: azure-secret
type: Opaque
data:
azurestorageaccountname: <your encoded account name>
azurestorageaccountkey: <your encoded key>
修改完成后,使用CTRL + O
这已经设置了“密钥秘密”文件,现在需要设置主指令文件。在这种情况下,它被称为“azure.yaml”,但可以赋予任何名称。
该文件的内容如下:
apiVersion: v1
kind: Pod
metadata:
name: shareddatastore
spec:
containers:
- image: kubernetes/pause
name: azure
volumeMounts:
- name: azure
mountPath: /mnt/azure
volumes:
- name: azure
azureFile:
secretName: azure-secret
shareName: kubedatashare
readOnly: false
需要更改的重要部分包括:
volumeMounts
- 给定名称为'azure'和内部虚拟挂载路径。名称应与卷的名称(下一步/文件条目)匹配。
volumes
→ name
→ 这已设置为默认名称'azure'。下一个条目是'azureFile'(定义了Kubernetes的存储卷类型)。'secretName
'引用了之前创建的'azure-secret.yaml
'文件中的数据,'shareName
'是在第(5)步中创建的文件共享的名称。设置'readOnly
'为'false'使卷可读/写。
在命令行中,输入以下命令:
kubectl create -f azure-secret.yaml
完成后,密钥已设置,因此可以发送命令来设置卷本身。
kubectl create -f azure.yaml
完成后,可以通过检查可用的pods来测试一切是否设置正确:
kubectl get po
这将显示如下输出:
最后,可以检查卷的实现以确认它符合规定:
kubectl describe po azure
查看'describe'的输出,可以看到重要信息,例如容器托管的节点(VM),它是'基于秘密'的卷,并且它连接到了Azure文件服务。
现在,任何容器都可以直接访问该卷...将在以后的文章中详细介绍如何做到这一点。