背景
工作需要研究kebecost,正好也看到阿里云ACK集成了kubecost的推送,想着装个研究研究。
本文中依据Kubecost的文档:https://docs.kubecost.com/install-and-configure/install/provider-installations/alibaba-install 安装,文档寥寥几句看似容易,但是实际装起来坑还是蛮多的,这里记录一下以便后人能快速安装。
安装步骤
本人使用的电脑是MacOs,本文主要以MacOs展开操作。
-
前提步骤:需要提前安装helm和kubectl,具体安装命令:
brew install kubectl
brew install helm
其他操作系统可参考文档:
Kubectl:https://kubernetes.io/zh-cn/docs/tasks/tools/
Helm:https://helm.sh/zh/docs/intro/install/
-
在安装Helm、Kubectl目录下(其他目录也行)新建文件 example_path,主要为执行步骤三命令。这里没有文件后缀,XXX为输入accessKeyID和Sercret,注意这里两行没有逗号:
{
"alibaba_access_key_id": “XXX”
"alibaba_secret_access_key": “XXX"
}
保存退出。
-
依据官网命令输入:
kubectl create secret generic alibaba-service-key -n kubecost –from-file=./example_path
报错:error: exactly one NAME is required, got 2
解决办法:需要将容器连接信息(下图公网访问下面这一大部分内容)作为文件config放置到~/.kube文件夹中,注意,如果没有.kube文件夹需要新建,否则内容将不会放到文件夹中;
继续执行官网命令
报错:Error: unknown shorthand flag: 'f' in -from-file=./example_path
解决办法:命令修改为如下,其中from前面是-- ,官网给的是— 不对,修改后如下:
kubectl create secret generic alibaba-service-key -n kubecost --from-file=./example_path
报错:error: failed to create secret namespaces "kubecost" not found
解决办法:未创建过命名空间,需要创建,执行:kubectl create ns kubecost 创建,再执行,成功了。
-
依据官网命令输入:
helm install kubecost/cost-analyzer -n kubecost -f values.yaml
报错:Error: must either provide a name or specify --generate-name
解决办法:缺少创建名称,末尾加入 --generate-name,代表自动创建名称:
helm install kubecost/cost-analyzer -n kubecost -f values.yaml --generate-name
报错:Error: failed to download "kubecost/cost-analyzer" (hint: running `helm repo update` may help)
解决办法:缺少kubecost/cost-analyzer库,需要更新库,执行:
helm repo add kubecost https://kubecost.github.io/cost-analyzer/
helm repo update
成功执行:
之后再执行本步骤最开始的命令,成功:
根据提示,你以为依据指令输入 kubectl port-forward --namespace kubecost deployment/cost-analyzer-1679644373 9090,就可以了?
并不是!
提示容器状态为Pending,不是Running,有问题。
-
登陆ACK查看,发现两个Pod都没有启动:
实在不知道为什么了,点进去看Pod日志,只有一行:
{"code":"SERVER_ERROR_CODE","message":"Cannot invoke method getContent() on null object","requestId":"5f753e35-82b1-46ab-8bb7-b9d714e10570","successResponse":false}
无果,提工单:
工单说没有PVC,点开一看果然没有:
去存储卷中创建了一个:
依据工单人员提示,删除了旧的存储声明,然后又复制原有名称创建了一个,创建时候引用这个存储卷:
由于这里有两个存储声明,所以需要创建两个存储卷,分别在两个存储声明中引用,如下状态显示代表已完成:
-
重新部署,仍然报错,这次没说具体的问题,工单回复:
得,得把本地镜像push到ACR(容器镜像)上。
执行本操作需要有ACR的仓库,如果之前没接触过可能需要学习一下。
这个上传过程我和客服也是battle了好久,我就直接讲怎么成功的:
命令行中输入Docker --version,正常返回,表示Docker已经启动。
-
拉取镜像到本地,输入 docker pull XXX,XXX是镜像名称,从下方获取:
注意,上面截图中是我已经成功的,如果是第一次,在cost-analyzer-xxx得yaml中有2个Image,在cost-analyzer-xxx-kube-state-metrics 有1个Image,下面截图是cost-analyzer-xxx中的,咱们pull下来:
具体为:
docker pull k8s.gcr.io/kube-state-metrics/kube-state-metrics:v1.9.8
docker pull gcr.io/kubecost1/cost-model:prod-1.101.3
docker pull gcr.io/kubecost1/frontend:prod-1.101.3
-
打开ACR权限相关内容:
-
上传镜像,具体参考下图位置,镜像ID通过 docker images 查看(需要docker pull之后查看),镜像版本自己写,最好和其名称一致,如kubecost-cost-model,方便之后选择。
注意,输入登录信息(docker login XXX)之前需要先设置密码:
-
docker push之后,就可以在容器镜像里找到了,在选择镜像中选择,之后选择Tag,两个设置完之后点击更新。注意,cost-analyzer-xxx 和 cost-analyzer-xxx-kube-state-metrics 都需要改,我不知道有没有顺序问题,改完之后,就是正常了,如果还没有重新部署一下。
-
至此,容器这里终于弄好了:
-
复制步骤四最后的开启命令,输入kubectl port……
至此,折腾了我快一周的KubeCost安装终于完成。
上图可能还需要配置一些东西才会生效,我再研究研究,之后再继续更新文章。