标签(空格分隔): kubernetes系列
一: 系统环境介绍
系统:
centos7.9x64
k8s 集群最新版本:
k8s1.28.2 采用kubeadm部署
caclico 版本:
calico v3.26.2
containerd版本:
containerd://1.6.24
hadoop 版本:
hadoop 3.3.6
helm 版本:
helm 3.13.0
二:k8s部署Hadoop集群
2.1 部署一套k8s1.28.x 集群
k8s 1.28.x 集群已经部署完成
kubectl get node -o wide
2.2 安装helm 包管理工具
# 下载helm
wget https://get.helm.sh/helm-v3.13.0-linux-amd64.tar.gz
# 解压文件
tar zxvf helm-v3.13.0-linux-amd64.tar.gz
# 移动到bin目录
mv linux-amd64/helm /usr/bin/helm
# 查看版本
helm version
2.3 安装buildkit
# 下载文件 https://github.com/moby/buildkit
wget https://github.com/moby/buildkit/releases/download/v0.11.6/buildkit-v0.11.6.linux-amd64.tar.gz
# 创建解压的目录
mkdir -p /usr/local/buildkit
# 解压到指定的目录
tar -xf buildkit-v0.11.6.linux-amd64.tar.gz -C /usr/local/buildkit
# 查看解压的目录
yum -y install tree
tree /usr/local/buildkit
修改PATH环境变量
# 注意这里的echo 要使用单引号,单引号会原样输出,双引号会解析变量
echo 'export PATH=/usr/local/buildkit/bin:$PATH' >> /etc/profile
cat /etc/profile
# 使刚才配置生效
source /etc/profile
创建buildkitd自启动服务
cat <<EOF > /usr/lib/systemd/system/buildkitd.service
[Unit]
Description=buildkitd
After=network.target
[Service]
ExecStart=/usr/local/buildkit/bin/buildkitd
[Install]
WantedBy=multi-user.target
EOF
# 重新加载Unit file
systemctl daemon-reload
# 启动服务
systemctl start buildkitd
# 开机自启动
systemctl enable buildkitd
2.4 准备Hadoop的镜像
vim Dockerfile
---
FROM openjdk:8-jdk
ENV HADOOP_VERSION 3.3.6
ENV HADOOP_HOME=/opt/hadoop
ENV HADOOP_COMMON_HOME=${HADOOP_HOME} \
HADOOP_HDFS_HOME=${HADOOP_HOME} \
HADOOP_MAPRED_HOME=${HADOOP_HOME} \
HADOOP_YARN_HOME=${HADOOP_HOME} \
HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop \
PATH=${PATH}:${HADOOP_HOME}/bin
RUN curl --silent --output /tmp/hadoop.tgz https://ftp-stud.hs-esslingen.de/pub/Mirrors/ftp.apache.org/dist/hadoop/common/hadoop-${HADOOP_VERSION}/hadoop-${HADOOP_VERSION}.tar.gz && tar --directory /opt -xzf /tmp/hadoop.tgz && rm /tmp/hadoop.tgz
RUN ln -s /opt/hadoop-${HADOOP_VERSION} ${HADOOP_HOME}
WORKDIR $HADOOP_HOME
# Hdfs ports
EXPOSE 50010 50020 50070 50075 50090 8020 9000
# MapReduce ports
EXPOSE 19888
# Yarn ports
EXPOSE 8030 8031 8032 8033 8040 8042 8088
# Other ports
EXPOSE 49707 2122
---
如果K8S 底层走的是containerd 则使用buildkitd 去构建镜像
# 查看镜像
ctr -n k8s.io image ls
# 生成镜像导入containerd
buildctl build --frontend=dockerfile.v0 --local context=. --local dockerfile=. --output type=docker,name=apache-hadoop:3.3.6 | ctr -n k8s.io image import -
# 查看镜像
nerdctl -n k8s.io images
注:buildkitd 构建镜像介绍:
----
`buildctl build --frontend=dockerfile.v0 --local context=. --local dockerfile=. --output type=docker,name=apache-hadoop:3.3.6`:这部分命令使用 buildctl 工具来构建 Docker 镜像。它指定了以下参数:
`--frontend=dockerfile.v0`:使用 Dockerfile v0 格式的构建前端。
`--local context=.`:将当前目录(表示为 .)作为构建上下文。
`--local dockerfile=.`:在当前目录中查找 Dockerfile。
`--output type=docker,name=apache-hadoop:3.3.6`:将构建的镜像输出为 Docker 镜像,命名为 apache-hadoop:3.3.6。
`|`:这是一个管道符号,用于将第一个命令的输出传递给下一个命令。
`ctr -n k8s.io image import -`:这部分命令使用 ctr 工具导入 Docker 镜像。它指定了以下参数:
`-n k8s.io`:使用 k8s.io 运行时来执行操作。
`image import -`:从标准输入导入 Docker 镜像。
综上所述,该命令的作用是在构建过程中使用 buildctl 工具构建一个名为 apache-hadoop:3.3.6 的 Docker 镜像,并将其导入到 Docker 运行时中使用 ctr 工具。
导出镜像
nerdctl -n k8s.io save -o apache-hadoop-images-3.3.6.tar.gz apache-hadoop:3.3.6
导入镜像
nerdctl -n k8s.io load -i apache-hadoop-images-3.3.6.tar.gz
2.5 安装hadoop
创建hadoop 的持久化目录
mkdir -p /bigdata/hadoop/{nn,dn}/data/data{1..3}
tree /bigdata/hadoop
2.6 准备Hadoop的helm charts 文件
上传编写好的hadoop helm charts 的文件
unzip hadoop.zip
执行helm 安装
helm install hadoop ./hadoop -n hadoop --create-namespace
NAME: hadoop
LAST DEPLOYED: Tue Oct 10 11:45:28 2023
NAMESPACE: hadoop
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. You can check the status of HDFS by running this command:
kubectl exec -n hadoop -it hadoop-hadoop-hdfs-nn-0 -- /opt/hadoop/bin/hdfs dfsadmin -report
2. You can list the yarn nodes by running this command:
kubectl exec -n hadoop -it hadoop-hadoop-yarn-rm-0 -- /opt/hadoop/bin/yarn node -list
3. Create a port-forward to the yarn resource manager UI:
kubectl port-forward -n hadoop hadoop-hadoop-yarn-rm-0 8088:8088
Then open the ui in your browser:
open http://localhost:8088
4. You can run included hadoop tests like this:
kubectl exec -n hadoop -it hadoop-hadoop-yarn-nm-0 -- /opt/hadoop/bin/hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.6-tests.jar TestDFSIO -write -nrFiles 5 -fileSize 128MB -resFile /tmp/TestDFSIOwrite.txt
5. You can list the mapreduce jobs like this:
kubectl exec -n hadoop -it hadoop-hadoop-yarn-rm-0 -- /opt/hadoop/bin/mapred job -list
6. This chart can also be used with the zeppelin chart
helm install --namespace hadoop --set hadoop.useConfigMap=true,hadoop.configMapName=hadoop-hadoop stable/zeppelin
7. You can scale the number of yarn nodes like this:
helm upgrade hadoop --set yarn.nodeManager.replicas=4 stable/hadoop
Make sure to update the values.yaml if you want to make this permanent.
kubectl get pod,svc -n hadoop -o wide
打开hdfs的web
http://172.16.10.11:30870
打开yarn的web
http://172.16.10.11:30088
2.7 hdfs 的测试
# 进入容器
kubectl exec -it hadoop-hadoop-hdfs-nn-0 -n hadoop -- bash
# 显示已安装的Hadoop版本
hadoop version
# 显示HDFS集群的报告,包括有关集群节点、块数量、磁盘使用情况等信息
hdfs dfsadmin -report
# 在HDFS上创建一个新目录
hdfs dfs -mkdir /tmp
# 列出HDFS根目录下的文件和目录
hdfs dfs -ls /
# 将字符串“test hadoop”写入名为“test.txt”的本地文件
echo "test hadoop" >test.txt
# 将本地文件“test.txt”上传到HDFS的“/tmp”目录中
hdfs dfs -put test.txt /tmp/
# 列出HDFS上“/tmp”目录中的文件和目录
hdfs dfs -ls /tmp/
# 显示HDFS上“/tmp/test.txt”文件的内容
hdfs dfs -cat /tmp/test.txt
2.8 测试yarn:
执行命令:
kubectl exec -n hadoop -it hadoop-hadoop-yarn-nm-0 -- /opt/hadoop/bin/hadoop jar /opt/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-3.3.6-tests.jar TestDFSIO -write -nrFiles 5 -fileSize 128MB -resFile /tmp/TestDFSIOwrite.txt
2.9 卸载 Hadoop
卸载Hadoop
helm uninstall hadoop -n hadoop
kubectl get pod --all-namespaces -o wide
删除目录
rm -rf /bigdata/hadoop
mkdir -p /bigdata/hadoop/{nn,dn}/data/data{1..3}
tree /root/hadoop
删除ns
kubectl delete namespace hadoop
kubectl get namespace