Kerberized HDFS with Kubernetes
1 Overview
部署 Kerberos 认证的 HDFS 本来就是一件比较麻烦的事,那么如果遇到 K8S 呢?也就是需要把 HDFS 部署到 K8S 集群上,并且带有 Kerberos 认证的呢,那恐怕就既要懂的 Hadoop 安全集群的搭建又要一点 K8S 的实践基础。
本文就这个项目 hadoop-kerberos-helm,讲解一下作者是如何部署 Kerberized HDFS 到 K8S 集群上的。
Kerberized HDFS -> KH
2 Steps
2.1 Step1 下载 Hadoop 2.7.3 的发行版
wget https://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz
这是因为在构建 Docker 镜像的时候需要。
2.2 Step2 构建 Docker 镜像
以下是一个相当常规的 Dockerfile,可以见到,需要给容器安装 krb5-server 等 Kerberos 相关的软件,另外就是将 Step 1 下载的 tar 放入镜像。然后就是复制几个启动 NameNode 和 DataNode 节点的脚本,以及启动 KDC 的脚本(KDC 可以理解是 Kerberos 存储用户信息的数据库)。
FROM centos:7
RUN yum -y install krb5-server krb5-workstation
RUN yum -y install java-1.8.0-openjdk-headless
RUN yum -y install apache-commons-daemon-jsvc
RUN yum install net-tools -y
RUN yum install telnet telnet-server -y
RUN yum -y install which
RUN sed -i -e 's/#//' -e 's/default_ccache_name/# default_ccache_name/' /etc/krb5.conf
RUN useradd -u 1098 hdfs
ADD hadoop-2.7.3.tar.gz /
RUN ln -s hadoop-2.7.3 hadoop
RUN chown -R -L hdfs /hadoop
COPY core-site.xml /hadoop/etc/hadoop/
COPY hdfs-site.xml /hadoop/etc/hadoop/
COPY ssl-server.xml /hadoop/etc/hadoop/
COPY yarn-site.xml /hadoop/etc/hadoop/
COPY krb5.conf /etc/
COPY start-namenode.sh /
COPY start-datanode.sh /
COPY populate-data.sh /
COPY start-kdc.sh /
COPY people.json /
COPY people.txt /
ENV JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk
ENV PATH=/hadoop/bin:$PATH
ENV HADOOP_CONF_DIR=/hadoop/etc/hadoop
2.3 Step3 启动 K8S 集群
Mac 用户还是建议用 Docker For Mac,因为配置实在太简单了…
2.4 Step4 创建 PV 和 PVC
前提是你本地安装了 helm,没有也没有关系,可以用 kubectl 自行安装。
helm install -n hdfs-pvs pv
看看 PV 相关的文件。
➜ hadoop-kerberos-helm git:(master) tree pv
pv
├── Chart.yaml
└── templates
├── namenode-hadoop-pv.yaml
├── namenode-hadoop.yml
├── server-keytab-pv.yaml
└── server-keytab.yaml
先创建 PV 再创建 PVC。
2.5 Step5 启动 Pods
然后就是创建启动 KDC, NameNode, DataNode 的 Pods 了。
2.5.1 KDC Node
安装 KDC。同样如果是没有 helm 的话,按照上述方法就可以安装。
helm install -n hdfs-kdc kdc
需要注意,创建 KDC 的 Pod 的时候,运行了 start-kdc.sh 这个脚本,这个脚本主要是创建 KDC 的用户和赋予密码,并且生成了 hdfs.keytab 文件。
2.5.2 NN Node
helm install -n hdfs-nn namenode
2.5.3 DN Node
helm install -n hdfs-dn datanode
2.5.4 DataPopulator Node
helm install -n hdfs-dp datapopulator
2.6 运行 kinit
上述过程如果顺利的话,应该可以看到几个 Pod 都是处于 Running
状态。
➜ hadoop-kerberos-helm git:(master) kubectl get pods
NAME READY STATUS RESTARTS AGE
hdfs-data-populator-f9d85cf5d-r4tnx 1/1 Running 0 46s
hdfs-dn1-fdbb479d6-99tx4 1/1 Running 0 48s
kerberos-86b44bf796-4mtwr 1/1 Running 0 53s
nn-644bb56d5b-54tfn 1/1 Running 0 50s
kinit
是因为需要和 KDC 通信,下面的 Principal hdfs/nn.default.svc.cluster.local
是在启动 KDC 的时候创建的,下面的脚本可以根据这个 Principal 和预生成的 keytab 文件通过 Kerberos 的安全认证。
kubectl exec -it <POD_NAME> -- /bin/bash
su hdfs
kinit -kt /var/keytabs/hdfs.keytab hdfs/nn.default.svc.cluster.local
hdfs dfs -ls /
3 Summary
至此,就简单介绍了在 K8S 集群中部署 KH 的步骤。
- MYSQL数据导出与导入,secure_file_priv参数设置
- numpy 参数(一) —— np.linalg
- 关于查看dba_data_files的一个小问题(r7笔记第72天)
- 一则备库CPU报警的思考(r7笔记第69天)
- Java设计模式-观察者模式
- 今天处理的三个小问题——20160120(r7笔记第84天)
- 主备切换的准备工作(r7笔记第83天)
- Java设计模式-外观模式
- Java设计模式-组合模式
- 使用shell批量监控磁盘坏块(二) (r7笔记第80天)
- JavaWeb10-request&response你不得不学(1)
- dg的奇怪问题终结和分区问题答疑 (r7笔记第77天)
- 最近让我焦灼的四个问题(有解) (r7笔记第76天)
- JavaWeb10-reques;response你不得不学(2)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux常用命令之chmod修改文件权限777和754
- 解决CentOS 7升级Python到3.6.6后yum出错问题总结
- Linux下如何挂载磁盘的方法示例
- centos7 PHP环境搭建 GD库 等插件安装方法
- CentOS服务器环境下MySQL主从同步配置方法
- awk命令
- linux下C语言实现写日志功能
- centOS7下Spark安装配置教程详解
- linux tail 查看日志文件方法
- Linux下Python脚本自启动和定时启动的详细步骤
- linux后台执行命令&和nohup的具体使用方法
- Linux修改hostname与免密码登录的方法
- Linux启动与停止spring boot工程的脚本示例
- 在Linux上如何检查用户所属组详解
- Linux中移除(删除)符号链接的命令