一键构建高效应用交付的k8s集群
lite应该是不将docker image的镜像打进sealer镜像中,我们的目的是制作离线安装包,指定container是创建6个容器来作为k8s的3个master节点和3个node节点,我在执行过程中得到了找不到clusterfile的返回结果,clusterfile是sealer中对k8s集群的配置文件。3.还有就是目标要求离线安装,那么无论是operator还是helm的安装方式都需要导入
本周主要给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
更多推荐
所有评论(0)