拉取hadoop镜像
Hadoop镜像,到docker hub上拉取,也可以使用自己制作的hadoop镜像,这里我们直接到docker hub拉取
docker pull kubeguide/hadoop:latest
配置hadoop.yaml文件
apiVersion: v1kind: ConfigMapmetadata:name: kube-hadoop-confnamespace: defaultdata:HDFS_MASTER_SERVICE: hadoop-hdfs-masterHDOOP_YARN_MASTER: hadoop-yarn-master---apiVersion: v1kind: Servicemetadata:name: hadoop-hdfs-masterspec:type: NodePortselector:app: hdfs-masterports:- name: rpcport: 9000targetPort: 9000- name: httpport: 50070targetPort: 50070nodePort: 32007---apiVersion: v1kind: Podmetadata:name: hdfs-masterlabels:app: hdfs-masterspec:containers:- name: hdfs-masterimage: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 9000- containerPort: 50070env:- name: HADOOP_NODE_TYPEvalue: namenode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always---apiVersion: v1kind: Podmetadata:name: hadoop-datanode-1labels:app: hadoop-datanode-1spec:containers:- name: hadoop-datanode-1image: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 9000- containerPort: 50070env:- name: HADOOP_NODE_TYPEvalue: datanode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always---apiVersion: v1kind: Podmetadata:name: hadoop-datanode-2labels:app: hadoop-datanode-2spec:containers:- name: hadoop-datanode-2image: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 9000- containerPort: 50070env:- name: HADOOP_NODE_TYPEvalue: datanode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always---apiVersion: v1kind: Podmetadata:name: hadoop-datanode-3labels:app: hadoop-datanode-3spec:containers:- name: hadoop-datanode-3image: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 9000- containerPort: 50070env:- name: HADOOP_NODE_TYPEvalue: datanode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always---apiVersion: v1kind: Servicemetadata:name: hadoop-yarn-masterspec:type: NodePortselector:app: yarn-masterports:- name: "8030"port: 8030- name: "8031"port: 8031- name: "8032"port: 8032- name: httpport: 8088targetPort: 8088nodePort: 32088---apiVersion: v1kind: Podmetadata:name: yarn-masterlabels:app: yarn-masterspec:containers:- name: yarn-masterimage: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 9000- containerPort: 50070env:- name: HADOOP_NODE_TYPEvalue: resourceman- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always---apiVersion: v1kind: Servicemetadata:name: yarn-node-1spec:clusterIP: Noneselector:app: yarn-node-1ports:- port: 8040---apiVersion: v1kind: Servicemetadata:name: yarn-node-2spec:clusterIP: Noneselector:app: yarn-node-2ports:- port: 8040---apiVersion: v1kind: Servicemetadata:name: yarn-node-3spec:clusterIP: Noneselector:app: yarn-node-3ports:- port: 8040---apiVersion: v1kind: Podmetadata:name: yarn-node-1labels:app: yarn-node-1spec:containers:- name: yarn-node-1image: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 8040- containerPort: 8041- containerPort: 8042env:- name: HADOOP_NODE_TYPEvalue: yarnnode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always---apiVersion: v1kind: Podmetadata:name: yarn-node-2labels:app: yarn-node-2spec:containers:- name: yarn-node-2image: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 8040- containerPort: 8041- containerPort: 8042env:- name: HADOOP_NODE_TYPEvalue: yarnnode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always---apiVersion: v1kind: Podmetadata:name: yarn-node-3labels:app: yarn-node-3spec:containers:- name: yarn-node-3image: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 8040- containerPort: 8041- containerPort: 8042env:- name: HADOOP_NODE_TYPEvalue: yarnnode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always
这个yaml文件包含一个ConfigMap,5个Service,8个pod,这里需要注意的是ConfigMap中HDFS_MASTER_SERVICE和HDOOP_YARN_MASTER不要使用IP,使用HDFS service的名称,否则datanode将会连接不上namenode,出现错误【ipc.Client: Retrying connect to server: xxx:9000.】
启动pod
执行创建命令
kubectl create -f hadoop.yaml
检查是否启动成功
- 查看pod
如下,全部running则为启动成功kubectl get po -o wide

 
2.查看service
kubectl get svc -o wide

3.查看configmap
kubectl get cm -o wide
外部访问
通过浏览器访问:http://10.8.0.117:32007/
因为设置了nodeport,所以无论是哪台物理机的ip都可以访问
使用pod控制器搭建
上面的搭建方式是以单个POD声明的,这种方式不稳定,如果不小心删除后就没有了,其实我们可以使用Replication Controller方式进行搭建,这样的话始终可以确保保留相应数量的POD,具体的yaml文件如下:
apiVersion: v1kind: ConfigMapmetadata:name: kube-hadoop-confnamespace: defaultdata:HDFS_MASTER_SERVICE: hadoop-hdfs-masterHDOOP_YARN_MASTER: hadoop-yarn-master---apiVersion: v1kind: Servicemetadata:name: hadoop-hdfs-masterspec:type: NodePortselector:name: hdfs-masterports:- name: rpcport: 9000targetPort: 9000- name: httpport: 50070targetPort: 50070nodePort: 32007---apiVersion: v1kind: ReplicationControllermetadata:name: hdfs-masterlabels:name: hdfs-masterspec:replicas: 1selector:name: hdfs-mastertemplate:metadata:labels:name: hdfs-masterspec:containers:- name: hdfs-masterimage: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 9000- containerPort: 50070env:- name: HADOOP_NODE_TYPEvalue: namenode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always---apiVersion: v1kind: ReplicationControllermetadata:name: hadoop-datanodelabels:app: hadoop-datanodespec:replicas: 3selector:name: hadoop-datanodetemplate:metadata:labels:name: hadoop-datanodespec:containers:- name: hadoop-datanodeimage: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 9000- containerPort: 50070env:- name: HADOOP_NODE_TYPEvalue: datanode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always---apiVersion: v1kind: Servicemetadata:name: hadoop-yarn-masterspec:type: NodePortselector:name: yarn-masterports:- name: "8030"port: 8030- name: "8031"port: 8031- name: "8032"port: 8032- name: httpport: 8088targetPort: 8088nodePort: 32088---apiVersion: v1kind: ReplicationControllermetadata:name: yarn-masterlabels:name: yarn-masterspec:replicas: 1selector:name: yarn-mastertemplate:metadata:labels:name: yarn-masterspec:containers:- name: yarn-masterimage: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 9000- containerPort: 50070env:- name: HADOOP_NODE_TYPEvalue: resourceman- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always---apiVersion: v1kind: Servicemetadata:name: yarn-nodespec:clusterIP: Noneselector:name: yarn-nodeports:- port: 8040---apiVersion: v1kind: ReplicationControllermetadata:name: yarn-nodelabels:name: yarn-nodespec:replicas: 3selector:name: yarn-nodetemplate:metadata:labels:name: yarn-nodespec:containers:- name: yarn-nodeimage: kubeguide/hadoopimagePullPolicy: IfNotPresentports:- containerPort: 8040- containerPort: 8041- containerPort: 8042env:- name: HADOOP_NODE_TYPEvalue: yarnnode- name: HDFS_MASTER_SERVICEvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDFS_MASTER_SERVICE- name: HDOOP_YARN_MASTERvalueFrom:configMapKeyRef:name: kube-hadoop-confkey: HDOOP_YARN_MASTERrestartPolicy: Always
使用kubectl命令创建
kubectl apply -f hadoop.yaml
查看pod,全部running则启动成功
kubectl get pods -o wide

至此,我们的hadoop就搭建完成了
