前言

K8S通过标准的CSI实现容器的持久化,目前很多的存储都有现成的CSI,如NFS,GFS,CEPH等。但是HDFS目前为止没有官方的CSI实现,Apache基于HDFS封装的新的分布式文件系统Ozone可以有HDFS文件系统的属性,同时提供了官方CSI。项目需要,故进行了对接尝试,并且实现了透明加解密(TDE)的模式。中间也遇到了一些问题,分享给大家。

集群说明

整个集群的资源使用私有云上的资源,故拥有两个IP地址(公有云也是一样),内部IP在同一个VPC内可以通讯,弹性IP实现整个私有云通讯

K8S集群

角色内部IP弹性IP
K8S Master  10.10.0.16010.228.82.9     
K8S Worker  10.10.0.13510.228.82.232
K8S Worker  10.10.0.19610.228.82.36

PS: K8S集群的搭建这里就不在赘述了,集群的版本不要太新,目前Ozone CSI的适配没有到新版本。 1.18.X为优,我的集群版本为: 1.18.18 

Ozone集群,每个角色的说明参考: Documentation for Apache Ozone

角色内部IP弹性IP备注
SCM,OM,RECON,S3G10.50.0.8010.228.82.233这些角色可以理解为控制节点,验证中为部署为高可用形式
DATANODE 10.50.0.8410.228.82.239节点为3个,实现数据存储的3副本,默认CSI创建的PVC需要3副本,如果没有3个CSI会报错
DATANODE10.50.0.3610.228.82.156
DATANODE10.50.0.8810.228.82.214

PS : 当前最新版本为1.1.0 

Ozone集群搭建

1. 在所有节点中安装JDK 1.8  可参考: 使用Ansible安装jdk1.8_不羡鸳鸯丶不羡仙的博客-CSDN博客

2. 将ozone的二进制包下载到所有节点的中并解压到/opt/目录下,下载地址为: Apache Downloads

解压后的目录结构如下:

[root@vm10-50-0-80 hadoop]# ls
bin      Dockerfile  etc         libexec   LICENSE.txt  NOTICE.txt  sbin   smoketest
compose  docs        kubernetes  licenses  logs         README.md   share  tests
[root@vm10-50-0-80 hadoop]# pwd
/opt/hadoop

3. 修改配置文件 路径为: /opt/hadoop/etc/hadoop/ozone-site.xml,配置文件中的IP地址,由于管理角色都在同一个服务器,故IP一致。建议完全按照我的步骤先跑通流程,然后考虑分拆。

所有4个节点上的配置文件都一致,可通过ansible批量部署

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property><name>ozone.om.address</name><value>10.50.0.80</value></property>
<property><name>ozone.om.http-address</name><value>10.50.0.80:9874</value></property>
<property><name>ozone.scm.names</name><value>10.50.0.80</value></property>
<property><name>ozone.scm.datanode.id.dir</name><value>/data/ozone-data</value></property>
<property><name>ozone.scm.block.client.address</name><value>10.50.0.80</value></property>
<property><name>ozone.metadata.dirs</name><value>/data/ozone-data/metadata</value></property>
<property><name>ozone.scm.client.address</name><value>10.50.0.80</value></property>
<property><name>ozone.replication</name><value>1</value></property>
<property><name>ozone.scm.client.address</name><value>10.50.0.80</value></property>
<property><name>hdds.datanode.dir</name><value>/data/ozone-data/hdds</value></property>
<property><name>ozone.recon.db.dir</name><value>/data/ozone-data/metadata/recon</value></property>
<property><name>ozone.recon.address</name><value>10.50.0.80:9891</value></property>
<property><name>ozone.security.enabled</name><value>false</value></property>
</configuration>

4. 将ozone命令添加到PATH变量中,所有节点都需要操作

export PATH=$PATH:/opt/hadoop/bin/

5. 启动管理角色(SCM,OM,S3G,RECON),SCM服务需要最先启动

  a. root登录到SCM角色服务器(10.50.0.80)

  b. 初始化SCM并启动scm服务,初始化的操作只需要集群搭建的时候执行一次就可以

ozone scm --init #初始化命令
ozone --daemon start scm

  c. 初始化OM并启动om服务,初始化的操作只需要集群搭建的时候执行一次就可以

       

ozone om --init #初始化命令
ozone --daemon start om

  d. 启动S3G与RECON服务

ozone --daemon start s3g #启动s3g服务,提供s3的网关
ozone --daemon start recon #集群整体状态的收集,可以对接prometheus拉取监控指标

6. 启动数据角色节点 ,以下操作需要在所有的DATANODE节点中执行

ozone --daemon start datanode

7. 验证Ozone集群,在任意的节点都可以执行以下命令,可以看到3个数据节点都是 IN_SERVICE,健康状态为: HEALTHY

[root@vm10-50-0-80 hadoop]# ozone admin datanode list
Datanode: 973eb161-682e-4cc6-9f1c-48207b1387d8 (/default-rack/10.50.0.36/10.50.0.36/3 pipelines)
Operational State: IN_SERVICE
Health State: HEALTHY
Related pipelines:
c81e2cc4-e603-4002-b741-5f9edff4e753/THREE/RATIS/OPEN/Leader
48ad502e-3745-449d-99ff-632d67c28d8e/ONE/RATIS/OPEN/Leader
602bd2b9-e0c2-42f7-bf7e-283db7858369/THREE/RATIS/OPEN/Follower

Datanode: f99c4b18-35c4-4885-93a2-8e4441f22c46 (/default-rack/10.50.0.88/10.50.0.88/3 pipelines)
Operational State: IN_SERVICE
Health State: HEALTHY
Related pipelines:
7f477617-9800-4089-8a59-24eeb4c5477b/ONE/RATIS/OPEN/Leader
c81e2cc4-e603-4002-b741-5f9edff4e753/THREE/RATIS/OPEN/Follower
602bd2b9-e0c2-42f7-bf7e-283db7858369/THREE/RATIS/OPEN/Leader

Datanode: 5b5acc23-b121-492d-8ace-f880e55dc3b9 (/default-rack/10.50.0.84/10.50.0.84/3 pipelines)
Operational State: IN_SERVICE
Health State: HEALTHY
Related pipelines:
87602a5c-11f4-4b07-8bf9-dba6acbfb3dc/ONE/RATIS/OPEN/Leader
c81e2cc4-e603-4002-b741-5f9edff4e753/THREE/RATIS/OPEN/Follower
602bd2b9-e0c2-42f7-bf7e-283db7858369/THREE/RATIS/OPEN/Follower

8. 尝试往分布式文件集群中写入文件

ozone sh bucket create /s3v/test
ozone sh key put /s3v/test/Key README.md #README.md为当前目录的一个文件, Key代表在分布式文件系统里面的名称
ozone sh key get /s3v/test/Key  README-FROM-Ozone.md #将上传的文件下载为README-FROM-Ozone.md
[root@vm10-50-0-80 hadoop]# ozone sh bucket list /s3v
{
  "metadata" : { },
  "volumeName" : "s3v",
  "name" : "test",
  "storageType" : "DISK",
  "versioning" : false,
  "usedBytes" : 0,
  "usedNamespace" : 2,
  "creationTime" : "2021-10-07T04:02:25.671Z",
  "modificationTime" : "2021-10-07T04:02:25.671Z",
  "encryptionKeyName" : null,
  "sourceVolume" : null,
  "sourceBucket" : null,
  "quotaInBytes" : -1,
  "quotaInNamespace" : -1
}
[root@vm10-50-0-80 hadoop]# ozone sh key put /s3v/test/Key README.md 
[root@vm10-50-0-80 hadoop]# ozone sh key list /s3v/test/
{
  "volumeName" : "s3v",
  "bucketName" : "test",
  "name" : "Key",
  "dataSize" : 3812,
  "creationTime" : "2021-10-31T12:18:49.345Z",
  "modificationTime" : "2021-10-31T12:18:51.064Z",
  "replicationType" : "RATIS",
  "replicationFactor" : 1
}
#下载文件的命令
[root@vm10-50-0-80 hadoop]# ozone sh key get /s3v/test/Key README-FROM-Ozone.md 

K8S中安装Ozone CSI插件

1. 登录master节点,并clone csi的yaml文件

git clone https://gitee.com/kevinliu_CQ/ozone-1-1-0-csi.git

2. 部署csi插件

cd  ozone-1-1-0-csi
kubectl apply -f .

3. 检查csi的daemonSet 和Provisioner的已经运行正常

[root@vm10-10-0-160 ozone-docker]# kubectl get po
csi-node-blr8n                                     2/2     Running       0          5h15m
csi-node-g94hz                                     2/2     Running       0          5h15m
csi-provisioner-6f7d4778cf-ct9sw                   2/2     Running       0          5h16m

4. 创建一个pvc来验证 Ozone的存储

cd pvc-test
kubectl apply -f test-pvc.yaml -f test-pvc-deployment.yaml -f test-pvc-service.yaml

5. 验证pvc和验证容器都运行起来

[root@vm10-10-0-160 pvc-test]# kubectl get pvc
ozone-csi-test-webserver   Bound         pvc-c4226796-5f9a-41f2-8264-d275eac107b4   100Mi      RWO            ozone          5h19m

[root@vm10-10-0-160 pvc-test]# kubectl get po
NAME                                               READY   STATUS        RESTARTS   AGE
csi-node-blr8n                                     2/2     Running       0          5h21m
csi-node-g94hz                                     2/2     Running       0          5h21m
csi-provisioner-6f7d4778cf-ct9sw                   2/2     Running       0          5h21m
ozone-csi-test-webserver-dc48985d5-7gl4h           1/1     Running       0          5h19m

6. 向新开的PVC 写文件

#root登录到ozone集群的SCM节点
[root@vm10-50-0-80 hadoop]# ozone sh bucket list /s3v/
{
  "metadata" : { },
  "volumeName" : "s3v",
  "name" : "test",
  "storageType" : "DISK",
  "versioning" : false,
  "usedBytes" : -268430730,
  "usedNamespace" : 3,
  "creationTime" : "2021-10-07T04:02:25.671Z",
  "modificationTime" : "2021-10-07T04:02:25.671Z",
  "encryptionKeyName" : null,
  "sourceVolume" : null,
  "sourceBucket" : null,
  "quotaInBytes" : -1,
  "quotaInNamespace" : -1
}
{
  "metadata" : { },
  "volumeName" : "s3v",
  "name" : "pvc-c4226796-5f9a-41f2-8264-d275eac107b4", #新创建的PVC
  "storageType" : "DISK",
  "versioning" : false,
  "usedBytes" : 0,
  "usedNamespace" : 2,
  "creationTime" : "2021-10-31T07:55:22.561Z",
  "modificationTime" : "2021-10-31T07:55:22.561Z",
  "encryptionKeyName" : null,
  "sourceVolume" : null,
  "sourceBucket" : null,
  "quotaInBytes" : -1,
  "quotaInNamespace" : -1
}
[root@vm10-50-0-80 hadoop]#ozone sh key list /s3v/pvc-c4226796-5f9a-41f2-8264-d275eac107b4/Key README.md 

7. 打开服务验证上传的文件是否可以下载

[root@vm10-10-0-160 pvc-test]# kubectl get svc
NAME                       TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                                  AGE

ozone-csi-test-webserver   NodePort       10.68.239.159   <none>        8000:30135/TCP  5h26m

PS : 如何在Ozone与Ranger KMS 实现透明加解密(Transparent Data Encryption),我单独列一个文章来写,目前我的机器就是运行的这种模式。

链接如下:

https://blog.csdn.net/lwlfox/article/details/121070459

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐