本周主要给k8s的集群安装接入prometheus stack(prometheus+grafana+alertmanager)、loki的初始化。集群的初始化一开始采用了sealyun的sealos工具,非常简单,简单到只要一条命令就能进行集群的初始化,能实现自动安装docker/containerd,还能解决证书过期问题,并且免去高可用组件的安装。

一开始打算通过springboot的事件监听机制,去发布安装prometheus stack和loki的两个事件;

那么集成日志、监控、告警到集群的自动化安装来就会引入两个问题:

1.如何保证集群可用后再来进行我的组件安装

2.清理集群后的重新部署如何重新安装这部分组件

3.还有就是目标要求离线安装,那么无论是operator还是helm的安装方式都需要导入对应的镜像和配置文件,需要构建一个私有的镜像仓库,那么无疑会让整个工具变得更重

那么有没有底层的或者是更加简单直接的方式,能够一次性打包我的所有镜像,并且优雅地实现一次性部署安装呢?偶然间看到sealos的一个issue上作者的回答:sealos只能帮助你安装k8s,sealer支持用户Build一个自定义的k8s,比如你想要一个包含dashboard的k8s 那sealer更合适。 sealer定位是实现分布式软件的build share run.

这个工具提出了集群镜像的概念,通过类似dockerfile的方式去在k8s镜像来安装应用进行封装。在安装k8s集群的过程中run一个registry的容器,搭建私有仓库来在各个节点间进行镜像的共享。你需要交付的saas应用会在集群安装完成后自动进行初始化。 

是不是很方便?那好,话不多说,动手实践

下载sealer工具

# Download and install sealer. Sealer is a binary tool of golang. You can download and unzip it directly to the bin directory, and the release page can also be downloaded
$ wget -c https://sealer.oss-cn-beijing.aliyuncs.com/sealer-latest.tar.gz && \
      tar -xvf sealer-latest.tar.gz -C /usr/bin

首先编写kubefile

FROM registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.8
COPY helm /usr/bin
COPY kube-prometheus-release-0.5 .
COPY loki-stack-2.1.2.tgz .
CMD kubectl create -f kube-prometheus-release-0.5/manifests/setup
CMD kubectl create -f kube-prometheus-release-0.5/manifests
CMD helm install loki loki-stack-2.1.2.tgz -n monitoring

然后sealer build构建镜像,这里kubefile的编写以及构建镜像的方法都是和docker类似的

这里build的模式(-m指定)有三种,container、lite、cloud

lite应该是不将docker image的镜像打进sealer镜像中,我们的目的是制作离线安装包,指定container是创建6个容器来作为k8s的3个master节点和3个node节点,我在执行过程中得到了找不到clusterfile的返回结果,clusterfile是sealer中对k8s集群的配置文件。切用cloud mode,报错,找不到kubectl,于是先用sealos部署一遍集群,再执行build命令,get。

$ sealer build -t priva-center-kube:v.1.19.8 .

sealer images查看镜像,然后sealer save导出tar包

+------------------------------------------------------------------+---------------------------------------------------------------+---------------------+----------+
|                             IMAGE ID                             |                          IMAGE NAME                           |       CREATE        |   SIZE   |
+------------------------------------------------------------------+---------------------------------------------------------------+---------------------+----------+
| c32739914843bcb31400a1bd0728b2ed1770a2fed46cd6efbc08c8117f66b596 | priva-center-kube:v1.19.8                                     | 2021-12-16 14:29:45 | 1.09GB   |
| bfb2810f9ad176cb9bc39e4a98d6319ea8599fa22a0911a98ae0b3e86e96b0a4 | registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:v1.19.8 | 2021-12-15 06:13:07 | 774.05MB |
+------------------------------------------------------------------+---------------------------------------------------------------+---------------------+----------+
$ sealer save -o priva-center-kube.tar priva-center-kube:v1.19.8

清除集群,把tar传到要部署集群的节点

$ sealer load -i priva-center-kube:v.1.19.8.tar

注意,执行部署命令的节点必须得是master节点!!不然会报错

然后执行sealer run就可以愉快地搭建我们的集群了,安装过程3-5分钟(我只有三个节点)

$ sealer run priva-center-kube:v1.19.8 --masters 172.16.90.75 \
    --nodes 172.16.90.76,172.16.90.77 \
    --user root \
    --passwd 321qweasd 

安装完成后kubectl get查看命名空间和pod,可以看到我们需要的资源都已经部署好了。

# kubectl get pods -n monitoring
NAME                                   READY   STATUS    RESTARTS   AGE
alertmanager-main-0                    2/2     Running   2          26h
alertmanager-main-1                    2/2     Running   0          26h
alertmanager-main-2                    2/2     Running   0          26h
grafana-56b76d795d-c6r9g               1/1     Running   0          26h
kube-state-metrics-7fddf8779f-nplhd    3/3     Running   3          26h
loki-0                                 1/1     Running   0          26h
loki-promtail-67nsk                    1/1     Running   1          26h
loki-promtail-gl4gd                    1/1     Running   0          26h
loki-promtail-rt5m6                    1/1     Running   0          26h
node-exporter-8pdkn                    2/2     Running   2          26h
node-exporter-tdl2t                    2/2     Running   0          26h
node-exporter-x69m8                    2/2     Running   0          26h
prometheus-adapter-cb548cdbf-7h5mz     1/1     Running   0          26h
prometheus-k8s-0                       3/3     Running   4          26h
prometheus-k8s-1                       3/3     Running   1          26h
prometheus-operator-6478d8fc6d-fk6xl   2/2     Running   2          26h

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐