什么是FinOps

FinOps 是一种用于优化云资源使用和成本管理的实践。它通过监控、分析和优化云资源的使用,帮助企业降低成本并提高效率。

什么是OptScale

OptScale 是基于 Kubernetes 的云原生监控和成本管理工具。它可以帮助企业监控云资源的使用情况,并提供成本分析和优化建议。

部署

OptScale 部署前注意

  1. 一定要遵循官方文档使用Ubuntu进行部署,使用CentOS部署会绝对失败,因为官方的部署程序中很多都是用Ubuntu的内部命令
  2. 需要准备一台可以连接外网的机器,因为部署过程中需要下载很多东西
  3. 配置一定要高最低配8c16g,推荐16c32g

开始部署

环境准备

安装基础依赖

# 安装基础依赖
sudo apt update; sudo apt install python3-pip sshpass git python3.9-venv python3.9-dev python3.9 -y

克隆仓库

git clone https://github.com/hystax/optscale.git

进入部署目录

cd optscale/optscale-deploy

准备虚拟环境

virtualenv -p python3.9 venv
source venv/bin/activate
pip install -r requirements.txt

部署K8,Docker基础运行环境

ansible-playbook -e "ansible_ssh_user=<user>" -k -K -i "<ip address>," ansible/k8s-master.yaml

ansible-playbook是一个自动化运维工具,用于执行预定义的任务和配置管理。
如果是本机部署添加上 -e “ansible_connection=local”
一切正常的话,就已经部署好docker和k8了

常见问题

  1. Q:创建一个用户后,发现跳板机的passwd被禁用了怎么办
    A:通过alias解决

  2. Q:我的服务器不能访问外网怎么办
    A:使用代理 https://zhuanlan.zhihu.com/p/1151023289

  3. Q:ansible-playbook是通过远程SSH连接来部署的,我没有办法让他在远程连接的session中挂上代理
    A:修改optscale用户的.bashrc来进行代理的配置&修改.bash_profile

    # 如果存在 ~/.bashrc,则加载它
    if [ -f ~/.bashrc ]; then
    . ~/.bashrc
    fi
  4. Q:出现报错

    fatal: [172.28.30.40]: FAILED! => {"changed": false, "dest": "/tmp/helm-install.sh", "elapsed": 10, "msg": "Request failed: <urlopen error [Errno 99] Cannot assign requested address>", "url": "https://git.io/get_helm.sh"}

    A:还是外网的原因,手动下载脚本放到/tmp/helm-install.sh

    # 删除部署脚本的
    - name: Download Helm install script
    get_url:
    url: https://git.io/get_helm.sh
    dest: /tmp/helm-install.sh
    mode: 0755

image-20250217181943056

上述图片有误,正确路径就是/tmp/helm-install.sh 记得给755权限

开始构建(可选)

根目录下.build.sh

我直接跳过了这步,使用官方提供的镜像来部署

开始部署

./runkube.py --with-elk  -o overlay/user_template.yml -- meow-optscale latest (offical)
./runkube.py --with-elk -o overlay/user_template.yml -- meow-optscale local (self-build)

等待完成之会访问 IP就可以访问了

常见问题

  1. Q:报错image-20250219095451097登录上去直接 docker pull k8s.gcr.io/kube-proxy:v1.17.3 发现是相同的报错,明明已经终端内挂了代理为什么还是这样
    A:因为需要配置docker的代理 https://blog.csdn.net/Mingcai_Xiong/article/details/144591364
    "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me"
    ],

开始使用

image-20250227112551228

注册账户

什么,你说给我发了邮件,为什么我没有收到捏,我们还需要配置SMTP的邮箱发送

有两种方式

  1. image-20250227112906762修改该文件配置后重新部署–参考上方部署阶段命令
  2. 通过k8的etcd
kubectl exec -it etcd-0 etcd-walker

image-20250220095317029

修改菜单内的smtp选项

连接数据源

image-20250227200313244

image-20250227200333296

选择一个进行连接

image-20250227200413775

等到这个变成绿色,就有实例还有推荐减配的一些东西了

后续升级

./runkube.py --with-elk  --update-only -- meow-optscale latest

k8命令参考

kubectl delete pod --all -n [namespace] k8重启pod--有损
kubectl rollout restart deployment -n <namespace> k8重启pod--无损
systemctl start kubelet 服务器重启后启动k8
kubectl get svc 获取集群中所有服务
kubectl describe svc grafana 获取该服务的详细信息
kubectl exec -it grafana-54dd5f6bdf-2q87c bash 进入到容器
kubectl edit svc elk 修改elk服务的属性