k8s学习笔记——安装istio的仪表盘之prometheus安装
所以prometheus命令一定要写在ENIRYPOINT而不是CMD里不然执行 kubectl apply -f istio-1.22.0/samples/addons/prometheus.yaml时会报错,因为在yaml中args里只写了命令的参数而没有命令,在部署时,yaml里的参数直接把dockerfile的cmd里的命令替换,如果没有ENIRYPOINT里的命令,容器中就执行的没有命令
接上一篇,继续安装istio的dashboard。
先到istio-1.22.0/samples/addons目录下,把yaml文件中的镜像仓库地址修改了,修改地址参考我之前写的CSDN里的镜像对照表。不然直接执行kubectl apply -f samples/addons这个命令后,依据会出现下拉不下来镜像的问题。
可悲的是,按照对照表修改完后,依旧会有下拉不下来的镜像,比如prometheus,找了国内很多仓库地址能没能下拉成功,而且之前从github下载源程序本地编译也没成功!!于是决定到prometheus官网下载二进制文件,自建个镜像。下面是具体操作步骤。
到官网https://prometheus.io/download/下载二进制文件,我这里下载的是prometheus-2.51.1.linux-amd64.tar.gz版本,解压,进入目录创建Dockerfile文件
#Dockerfile文件内容如下:
FROM docker.m.daocloud.io/library/ubuntu:latest
USER root
# 将 Prometheus 二进制文件复制到镜像中
RUN mkdir -p /usr/share/prometheus/console_libraries
RUN mkdir -p /usr/share/prometheus/consoles
RUN mkdir -p /prometheus
ADD prometheus /bin/prometheus
ADD promtool /bin/promtool
ADD prometheus.yml /etc/prometheus/prometheus.yml
ADD console_libraries/ /usr/share/prometheus/console_libraries/
ADD consoles/ /usr/share/prometheus/consoles/
ADD LICENSE /LICENSE
ADD NOTICE /NOTICE
# 创建 nobody 用户组
RUN groupadd -r nobody
# 创建 nobody 用户
#RUN useradd -r -g nobody nobody
# 设置工作目录
WORKDIR /prometheus
RUN ln -s /usr/share/prometheus/console_libraries /usr/share/prometheus/consoles/ /etc/prometheus/
RUN chown -R nobody:nobody /etc/prometheus
RUN chown -R nobody:nobody /prometheus
# 暴露 Prometheus 默认端口
USER nobody
EXPOSE 9090
VOLUME [ "/prometheus" ]
# 运行 Prometheus
ENTRYPOINT [ "/bin/prometheus" ]
CMD [ "--config.file=/etc/prometheus/prometheus.yml", "--storage.tsdb.path=/prometheus", "--web.console.libraries=/usr/share/prometheus/console_libraries", "--web.console.templates=/usr/share/prometheus/consoles" ]
在创建Dockerfile文件时,有一点要注意就是ENIRYPOINT和CMD还有yaml文件中的args里的命令或参数设置。这里的执行顺序或规则是
1. 如果容器镜像中指定了 `ENTRYPOINT`,那么 `args` 将会作为 `ENTRYPOINT` 的参数。
2. 如果容器镜像中指定了 `CMD`,那么 `args` 将会作为 `CMD` 的参数。
3. 如果 `args` 和 `CMD` 都存在,那么 `args` 将会覆盖 `CMD` 中的参数。
所以prometheus命令一定要写在ENIRYPOINT而不是CMD里不然执行 kubectl apply -f istio-1.22.0/samples/addons/prometheus.yaml时会报错,因为在yaml中args里只写了命令的参数而没有命令,在部署时,yaml里的参数直接把dockerfile的cmd里的命令替换,如果没有ENIRYPOINT里的命令,容器中就执行的没有命令的参数,所以会报错,容器启动不起来。
然后执行sudo nerdctl build -t core.harbor.shell.com:443/istio/prometheus:v2.51.1
上传至私有仓库 sudo nerdctl push core.harbor.shell.com:443/istio/prometheus:v2.51.1
测试镜像有没有问题
sudo nerdctl run --name prometheus-test -it --rm -p 8090:9090 --network=host core.harbor.shell.com:443/istio/prometheus:v2.51.1
在浏览器输入当前节点ip:8090看是否可以打开prometheus的网页
没问题就到istio-1.22.0/samples/addons目录下执行kubectl apply -f prometheus.yaml
看到如下就表明仪表盘安装成功了
kubectl get pod -n istio-system
NAME READY STATUS RESTARTS AGE
grafana-66ffbc9664-fjs9s 1/1 Running 0 2d4h
istio-ingressgateway-94974fc7f-cxjwz 1/1 Running 0 5d5h
istiod-54785969-6rfzh 1/1 Running 0 5d5h
jaeger-856f88d5d7-fv2zc 1/1 Running 0 2d4h
kiali-d9dfd8fb7-rztq2 1/1 Running 0 2d4h
loki-0 0/1 Pending 0 2d4h
prometheus-7fc648b979-hmnp7 2/2 Running 0 4h45m
//这里的日志收集的loki-0处于pending状态,是因为其pvc没有挂载,并不会影响仪表盘的正常使用。
更多推荐
所有评论(0)