通过harbor和rancher在私有化场景发布应用
至此,我们的私有化的应用发布流程就结束了(docker image推送到registry的步骤还没有体现)。这样做的好处是将底层组件模块化,基本上可以兼容所有的私有化场景,当面对不同客户环境时,只要底层组件支持了,那不管上层应用怎么变都没关系。初步设想是开发一个面向交付过程的工具,rancher主要面向开发和运维人员。工具的落点主要集中在:1.添加主机2.利用sealos/sealer一键拉起k8
目录
第一部分-安装harbor私有仓库
1.安装docker-compose
关于docker-compose的安装,docker官方文档已经给出相应的指导
Install Docker Compose | Docker Documentation
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
记得给二进制文件附上相应权限
chmod +x /usr/local/bin/docker-compose
2.配置harbor
先下载安装包,官方提供离线安装和在线安装两种方式,离线安装包多了harbor组件的docker image,github上下载速度比较慢,反正对应的镜像不是gcr上面的,所以采用在线安装,下载对应的在线安装包
release地址:
https://github.com/goharbor/harbor/releases/tag/v2.4.1
下载链接:
https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-online-installer-v2.4.1.tgz
xftp工具上传到/root下面
cd root
tar zxf harbor-online-installer-v2.4.1.tgz && cd harbor
自带了一个harbor配置文件的官方模版,需要手动配置一下
mv harbor.yml.tmpl harbor.yaml && vi harbor.yml
配置http域名和端口,我的80端口被rancher使用了,所以用81端口
# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: sea.hub
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 81
https的配置全部注释掉,因为https配置优先级比http高,如果启动了https,http会自动重定向到https。这里值得一提的是,官方声明将在未来版本弃用http,由于安全的原因。这里我们仅作测试,https需要通过openssl生成自签名证书,比较麻烦。需要启用https访问自行查询相关方法。
# https related config
#https:
# https port for harbor, default is 443
# port: 443
# # The path of cert and key files for nginx
# certificate: /data/certs/sea.hub.crt
# private_key: /data/certs/sea.hub.key
配置登陆ui界面的admin密码,默认是Harbor12345,如果配置了不符合要求的密码会以默认密码启动,暂时不知道这个密码的要求规则是什么。
# The initial password of Harbor admin
# It only works in first time to install harbor
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: Harbor12345
其他配置都用默认的就行了。
执行 安装脚本,需要携带组件chartmuseum一起安装,用于存取chart包
./install.sh --with-chartmuseum
看到如下的提示就表明安装成功了
[Step 4]: starting Harbor ...
Creating harbor-log ... done
Creating registry ... done
Creating redis ... done
Creating harbor-db ... done
Creating harbor-portal ... done
Creating registryctl ... done
Creating chartmuseum ... done
Creating harbor-core ... done
Creating nginx ... done
Creating harbor-jobservice ... done
✔ ----Harbor has been installed and started successfully.----
通过刚才设置的admin密码访问对应的浏览器页面,进入项目页面
默认生成一个公开的项目library
3.安装helm&helm push
官方安装文档,遵从导引即可
wget https://get.helm.sh/helm-v3.6.0-linux-amd64.tar.gz
tar -zxvf helm-v3.6.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
helm version
查看helm环境变量
helm env
获取plugin目录
HELM_BIN="helm"
HELM_CACHE_HOME="/root/.cache/helm"
HELM_CONFIG_HOME="/root/.config/helm"
HELM_DATA_HOME="/root/.local/share/helm"
HELM_DEBUG="false"
HELM_KUBEAPISERVER=""
HELM_KUBEASGROUPS=""
HELM_KUBEASUSER=""
HELM_KUBECAFILE=""
HELM_KUBECONTEXT=""
HELM_KUBETOKEN=""
HELM_MAX_HISTORY="10"
HELM_NAMESPACE="default"
HELM_PLUGINS="/root/.local/share/helm/plugins"
HELM_REGISTRY_CONFIG="/root/.config/helm/registry.json"
HELM_REPOSITORY_CACHE="/root/.cache/helm/repository"
HELM_REPOSITORY_CONFIG="/root/.config/helm/repositories.yaml"
helm push release:
https://github.com/chartmuseum/helm-push/releases/tag/v0.10.1
下载链接:
把helm push安装包解压到helm插件目录
mkdir -p /root/.local/share/helm/plugins/helm-push
cp helm-push_0.10.1_linux_amd64.tar.gz /root/.local/share/helm/plugins/helm-push
cd /root/.local/share/helm/plugins/helm-push
tar zxvf helm-push_0.10.1_linux_amd64.tar.gz
helm plugin list
4.配置helm repo&上传chart
添加在harbor ui上看到的项目library
helm repo add library http://sea.hub:81/chartrepo/library
添加一个本地的chart包,我这里用的是loki-stack和prometheus-stack
helm cm-push loki-stack-2.1.2.tgz library
上传完成查询repo下的所有chart
helm search repo
可以看到刚才上传的chart
NAME CHART VERSION APP VERSION DESCRIPTION
library/kube-prometheus-stack 26.0.0 0.53.1 kube-prometheus-stack collects Kubernetes manif...
library/loki-stack 2.1.2 v2.0.0 DEPRECATED Loki: like Prometheus, but for logs.
loki/fluent-bit 2.0.2 v2.0.0 DEPRECATED Uses fluent-bit Loki go plugin for g...
loki/loki 2.1.1 v2.0.0 DEPRECATED Loki: like Prometheus, but for logs.
loki/loki-stack 2.1.2 v2.0.0 DEPRECATED Loki: like Prometheus, but for logs.
loki/promtail 2.0.2 v2.0.0 DEPRECATED Responsible for gathering logs and s...
rancher/loki-stack 2.1.2 v2.0.0 DEPRECATED Loki: like Prometheus, but for logs.
登陆harbor查看helm charts,loki stack因为是比较老的版本所以已经被废弃了
点击prometheus-stack查看chart信息
概要->prometheus-stack的简介,环境要求,安装/卸载/升级方法,配置文件详解,添加仓库和安装chart的命令等等
依赖->安装的各个组件,grafana,node exporter等等
取值->展示values.yaml的值,这里不支持修改,后面我们可以在rancher上进行在线修改
第二部分-catalog发布应用
1.安装rancher server
以容器启动rancher server,官方提供这种方式去quick start,也提供helm安装等方式
docker run --privileged -d --restart=unless-stopped -p 80:80 -p 443:443 -v /var/lib/rancher:/var/lib/rancher/ rancher/rancher:stable
启动后浏览器访问对应ip,遵从导引即可,这里贴一下重置rancher管理员密码的方法,以防在不手动设置新的密码的情况下无法登陆
docker exec -it <conrainer_id> reset-password
2.纳管k8s集群
选择管理集群部分,点击导入已有集群
这里可以看到可以直接根据amazon、azure等云提供商提供的kubernetes服务去注册集群,我们选择导入一个现有的集群
填写名称等基本属性后,点击提交创建,会提供给我们一个注册页面
需要去 control-plane节点执行以上命令,为了防止ssl认证不通过,直接执行第二条命令。
执行完会生成一系列crd资源,并创建cattle-system命名空间,以及其下的agent对应的deployment和service
clusterrole.rbac.authorization.k8s.io/proxy-clusterrole-kubeapiserver created
clusterrolebinding.rbac.authorization.k8s.io/proxy-role-binding-kubernetes-master created
namespace/cattle-system created
serviceaccount/cattle created
clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding created
secret/cattle-credentials-e744736 created
clusterrole.rbac.authorization.k8s.io/cattle-admin created
deployment.apps/cattle-cluster-agent created
service/cattle-cluster-agent created
等待集群状态变为active,标志着导入集群成功
3.创建chart仓库
从集群管理选择相应集群点击explore或者直接从导航栏点击对应集群进行浏览
在应用市场的chart仓库中点击创建,由于默认library项目是一个公有项目,所以我们只需要输入url即可,不需要任何认证方式,创建成功后如图所示,rancher会去仓库中自动读取所有的chart包,这个过程可能需要几分钟,读取的时候状态显示为in progress,耐心等待变成active状态
4.安装chart
进入charts界面,筛选我们刚添加的仓库
可以看到之前上传的prometheus-stack,loki-stack可能因为是废弃的版本所以可能被自动过滤掉了,我们点击对应的图标查看详情
和harbor中看到的概要是一致的,点击安装,输入命名空间和应用名称,你可能需要提前创建一个名为monitoring的命名空间供监控资源使用,点击下一步
可以看到rancher支持页面上直接去编辑values.yaml并且提供一个简易的beyond compare的功能,非常方便,编辑完点击安装就可以。
总结
至此,我们的私有化的应用发布流程就结束了(docker image推送到registry的步骤还没有体现)。这样做的好处是将底层组件模块化,基本上可以兼容所有的私有化场景,当面对不同客户环境时,只要底层组件支持了,那不管上层应用怎么变都没关系。初步设想是开发一个面向交付过程的工具,rancher主要面向开发和运维人员。工具的落点主要集中在:
1.添加主机
2.利用sealos/sealer一键拉起k8s集群
3.打包和注册应用到rancher catalog上面
4.部署harbor(registry、chartmuseum)
后续可以做成流水线的形式,去组装我们的应用合集,发布到rancher
rancher的主要职能有:纳管集群,集群层面的去收集和展示事件,对各类资源进行管理和控制,发布应用,还有监控、备份,升级
这样我们就能对整个交付的流程以及后续的运维支持提供良好的软件基础,因为本身降低运维成本与应付多种交付场景本身存在一定的冲突。在考虑不一定能有专业的运维人员进场的情况下,这也是我能想到最合理的解决方案了。
更多推荐
所有评论(0)