接上一篇,继续安装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没有挂载,并不会影响仪表盘的正常使用。