Linux-ARM版kibana7.3.2镜像离线编译

本文介绍如何在ARM版本的Linux系统上从零开始构建Kibana Docker镜像,包括安装基础工具、下载及配置依赖包、编写Dockerfile等步骤。

说明:本文Linux系统版本是ARM,专门针对ARM版本的linux系统
在这里插入图片描述

资料准备

github上下载对应的资料

https://github.com/gagara/docker-elk-arm64

0 安装基础工具

yum install -y make
yum install -y gcc
yum install -y glibc-static

这里的make、gcc、glibc-static均可离线安装,详见《Linux离线安装gcc和gcc-c++》

1 下载所需要的依赖包

https://artifacts.elastic.co/downloads/kibana/kibana-oss-7.3.2-linux-x86_64.tar.gz
https://nodejs.org/dist/v10.15.2/node-v10.15.2-linux-arm64.tar.gz
https://github.com/Yelp/dumb-init/archive/v1.2.2.tar.gz

2 解压下载的文件

解压kibana-oss-7.3.2-linux-x86_64.tar.gz目录,并把解压后的目录改为kibana
删除kibana目录中的node,将下载的arm版node解压并放入kibana目录中,且改名为node.

在这里插入图片描述

3 解压dumb-init-1.2.2.tar.gz

解压完成之后,在目录中执行make编译命令。make命令执行完之后,会在原路径下多出一个dumb-init文件
在这里插入图片描述

4 将kibana和dumb-init目录分别压缩为kibana.tar和dumb-init.tar

tar -zcvf kibana.tar kibana
tar -zxvf dumb-init.tar dumb-init

5 编写Dockerfile

FROM centos:7

RUN mkdir /usr/share/kibana
WORKDIR /usr/share/kibana
RUN mkdir -p /opt/dumb-init
ADD dumb-init.tar /opt/dumb-init 
RUN pushd /opt/dumb-init/dumb-init  && popd
RUN chmod -R g=u /usr/share/kibana
RUN find /usr/share/kibana -type d -exec chmod g+s {} \;

################################################################################
# Build stage 1
# Copy prepared files from the previous stage and complete the image.
################################################################################
FROM centos:7
EXPOSE 5601
RUN yum clean all
COPY --chown=1000:0 /dumb-init/dumb-init /usr/local/bin
WORKDIR /usr/share/kibana
RUN ln -s /usr/share/kibana /opt/kibana
ENV ELASTIC_CONTAINER true
ENV PATH=/usr/share/kibana/bin:$PATH
ADD kibana.tar /usr/share
COPY --chown=1000:0 config/kibana.yml /usr/share/kibana/config/kibana.yml
COPY --chown=1000:0 bin/kibana-docker /usr/local/bin/
RUN chmod g+ws /usr/share/kibana && find /usr/share/kibana -gid 0 -and -not -perm /g+w -exec chmod g+w {} \;
USER root

LABEL org.label-schema.schema-version="1.0" org.label-schema.vendor="Elastic" org.label-schema.name="kibana" org.label-schema.version="7.3.2" org.label-schema.url="https://www.elastic.co/products/kibana" org.label-schema.vcs-url="https://github.com/elastic/kibana" org.label-schema.license="ASL 2.0" license="ASL 2.0"

ENTRYPOINT ["/usr/local/bin/dumb-init", "--"]

CMD ["/usr/local/bin/kibana-docker"]

6 利用docker打镜像

docker build -t linux-arm-kibana:7.3.2 .

在这里插入图片描述

7 进入镜像,查看镜像是否可用

docker run –it 镜像id /bin/bash

在这里插入图片描述

在这里插入图片描述
发现镜像可用正常使用,编译镜像完成!
此时可以修改/config目录下的kibana.yml文件,配置好elasticsearch的地址,再启动kibana即可正常使用。

<think>好的,我现在要处理用户的问题:他在Kubernetes的logging命名空间下有很多Pod处于Error或Completed状态,无法删除。首先,我需要理解这些Pod的状态以及为什么无法删除。 用户提供的kubectl get po输出显示,多个Pod的状态是Error或Completed,比如post-delete和pre-install相关的Pod。这些Pod可能是由Job或CronJob创建的,或者属于某个资源的一部分。通常,Completed状态的Pod是Job成功执行后的结果,而Error状态意味着容器启动失败或执行过程中出错。 用户提到这些Pod“删不掉”,可能是指即使执行了kubectl delete pod命令,它们仍然存在,或者被自动重新创建。这种情况通常与控制器(如Job、CronJob、Deployment、StatefulSet)有关,因为控制器会不断尝试维持Pod的数量,符合预期的副本数。例如,如果Job没有正确配置,可能会在失败后不断重启,生成新的Pod。 接下来需要分析具体哪些资源在控制这些Pod。比如,pre-install和post-delete这类名称可能关联到Helm的钩子(hooks)。Helm在安装或卸载时会创建一些Job作为pre-install、post-delete等钩子,这些Job生成的Pod在完成后会处于Completed状态,失败则处于Error。如果这些Job没有被正确清理,其对应的Pod可能会残留。此外,如果用户尝试直接删除Pod,而没有删除对应的Job或控制器,Pod可能会被重新生成。 可能的解决方案包括: 1. 检查并删除相关的Job资源,因为Job控制器会管理这些Pod。 2. 确认是否有残留的Helm release,可能需要使用helm命令来清理。 3. 强制删除Pod,但需注意控制器可能会重新生成。 4. 检查命名空间中的其他控制器资源,如CronJob,确保它们不再创建这些Pod。 用户之前的问题是关于Kibana部署时的Volume冲突,可能当前的问题是在尝试部署或卸载Kibana时Helm操作失败,导致残留资源。需要指导用户检查Helm release的状态,并正确清理相关资源,而不仅仅是删除Pod。 需要注意,用户可能有多个失败的Helm操作,导致重复的钩子Job。例如,pre-install钩子在安装前运行,如果安装失败,这些Job可能遗留。同样,post-delete可能在卸载后执行清理,但如果卸载过程被中断,也可能残留。 因此,正确的步骤可能是: - 使用helm list -n logging查看是否有残留的release。 - 如果有,使用helm uninstall彻底删除。 - 检查kubectl get jobs -n logging,删除相关的Job。 - 如果Job已被删除,但Pod仍存在,可能需强制删除Pod,但需谨慎。 同时,用户可能需要检查这些Pod的日志,以了解失败原因,避免后续再次出现类似问题。例如,pre-install-kkibana-kibana的Pod处于Error状态,查看其日志可能揭示安装前的准备工作为何失败。 总结,用户的问题核心在于如何正确清理由控制器(如Job、Helm release)管理的残留Pod,而不仅仅是删除Pod本身。需要引导用户删除父资源,如Job或Helm release,才能彻底解决问题。</think>--- ### **问题分析** 从输出中可以看到,命名空间 `logging` 中存在大量状态为 `Error` 或 `Completed` 的 Pod(如 `pre-install-*`, `post-delete-*` 等)。这些 Pod 通常与 **Helm Hook 任务**(例如安装前/卸载后的清理任务)或 **Job/CronJob** 相关。它们的残留通常是因为 Helm 操作未完全成功或被中断,导致控制器(如 Job)未正常清理。 --- ### **分步解决方案** #### **步骤 1 - 确认 Pod 的控制器类型** 首先检查这些 Pod 是否由 **Job** 或 **CronJob** 控制: ```bash kubectl describe pod <Pod名称> -n logging | grep "Controlled By" ``` 输出示例: ```bash Controlled By: Job/pre-install-kkibana-kibana ``` #### **步骤 2 - 删除关联的 Job/CronJob** 若 Pod 由 Job 控制,直接删除 Job 即可连带清理 Pod: ```bash kubectl delete job <Job名称> -n logging # 示例(根据上一步的输出): kubectl delete job pre-install-kkibana-kibana -n logging ``` #### **步骤 3 - 检查 Helm Release 状态** 这些 Job 可能是 Helm 操作的残留。查看当前 Helm Release: ```bash helm list -n logging ``` 若存在未完全卸载的 Release(如 `kkibana`),彻底卸载它: ```bash helm uninstall kkibana -n logging ``` #### **步骤 4 - 强制删除残留 Pod(谨慎操作)** 如果 Job 已被删除但 Pod 仍残留(通常不会发生),可强制删除: ```bash kubectl delete pod <Pod名称> -n logging --force --grace-period=0 ``` --- ### **原因解释** 1. **Helm Hook 机制** Helm 在安装/卸载时通过 Hook 创建临时 Job(如 `pre-install`, `post-delete`),若操作被中断或失败,这些 Job 及其 Pod 可能残留。 2. **Job 控制器行为** Job 生成的 Pod 在完成后会保持 `Completed` 状态,失败则为 `Error` 状态,需手动删除关联的 Job 才能彻底清理。 3. **Finalizers 阻塞** 少数情况下 Finalizers(资源删除的拦截逻辑)可能导致删除卡住,需检查 Pod 描述中的事件: ```bash kubectl describe pod <Pod名称> -n logging ``` --- ### **完整清理示例** 1. 列出所有 Job 并删除: ```bash kubectl get jobs -n logging kubectl delete job pre-install-kkibana-kibana post-delete-kibana-kibana -n logging ``` 2. 卸载 Helm Release: ```bash helm uninstall kkibana -n logging ``` 3. 确认 Pod 已清理: ```bash kubectl get pods -n logging ``` --- ### **预防措施** 1. **确保 Helm 操作完整执行** 避免强制中断 `helm install` 或 `helm uninstall` 操作。 2. **清理测试 Release** 若多次尝试安装,使用 `helm list --failed -n logging` 列出失败 Release 并清理。 3. **配置 Job 自动清理** 在 Helm Chart 中为 Job 添加注解,实现自动清理: ```yaml annotations: "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded ``` --- ### **扩展排查** 如果仍存在无法删除的 Pod,可能是**命名空间卡在终止状态**,需检查命名空间 Finalizers: ```bash kubectl get namespace logging -o yaml ``` 若存在异常 Finalizer,可手动移除(需谨慎操作)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值