Heimdall安装器安装使用文档
目录1.概述
Heimdall项目是今年规划的新版的云运维平台,整体部分包含三部分:安装器、初始化器和云运维平台。其中安装器部分提供对集群的界面化安装,初始化器提供对集群依赖组件和盘载应用的安装和配置,云运维平台则提供对日常集群的运维,包括弹性计算平台、API Gateway、配置中心、日志中心、微服务治理等功能。
Heimdall集群安装器是基于k3s框架以及go语言开发的集群部署工具,主要用于在客户内网环境中方便快捷的安装集群环境,该工具具有良好的安装界面,方便用户操作,目前该安装器已适配ubuntu系统和centos系统。具体安装操作流程可参考该文档。
2.编写目的
详细说明heimdall安装器安装集群的安装操作流程。
3.修改记录
安装器版本 | 修改人 | 修改内容描述 | 修改日期 | 审批人 | 备注 |
---|---|---|---|---|---|
0.3.0 | 柯桓 | 增加演示环境子命令,并对部分操作指令进行补充 | 2022/6/6 | ||
0.2.0 | 柯桓 | 增加initialization与自动安装内容 | 2021/10/18 | ||
0.1.0 | 李争诗 | 集群安装器安装使用文档 | 2021/9/2 |
4.安装流程
4.1 安装前环境检查
首先确保您的集群环境(centos或ubuntu)具备以下环境:
-
系统版本:推荐centos7.8、7.9,ubuntu2004,debian 10;
centos系统通过以下命令查看版本信息
cat /etc/redhat-release
ubuntu系统通过以下命令查看版本信息
cat /proc/version
-
机器处于开机状态且网络通畅,并且需要确保各台机器防火墙处于关闭状态。
通过以下命令禁用防火墙以及Selinux
systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
-
机器主机名各不相同,若有相同主机名请提前修改。
注意:
- 若存在相同机器名,建议使用命令
sudo hostnamectl set-hostname xxxxx
永久更改 - 机器名要保证没有下滑线、大写字母,建议使用小写字母开头,比如master-171、worker-172
- 若存在相同机器名,建议使用命令
-
机器处于相同时区,即东八区,集群中各机器时间要保持一致,建议各机器使用时钟服务器进行同步。
-
确保您的机器拥有root权限。
-
如果网络路由考虑使用calico插件,各台机器上不能有额外的虚拟化网卡以及虚拟ip服务,否则会造成插件安装失败
4.2 安装包启动
4.1.1获取安装包
拿到开发人员准备的安装压缩包解压之后,您便拿到了安装器的安装包。解压之后的安装包目录结构如下图所示。
值得注意的是,上图中红色方框内的文件为Linux系统启动安装服务的执行文件,椭圆框内的文件为Windows系统下启动安装服务的应用程序,其它文件为安装器依赖文件。
注:app文件夹是盘载应用上传目录,如果用户想要在部署过程中安装自己的应用包,可以提前将应用拷贝至该目录,具体操作参考4.4.2章节。
4.1.2 安装器启动
将解压缩之后的文件上传至您的server节点机器(您希望启动安装服务的机器),值得注意的是,该节点可以是您集群外的某个节点,也可以是您集群之中的主master节点。如果是主master节点,解压文件目录需要放在/home/heimdall。
上传成功之后,如果是Linux的机器,进入上图中hmtctl文件所在目录下,执行chmod a+x hmdctl
即可赋予该文件可执行权限。之后在该目录下执行./hmdctl
即可启动安装器服务,出现类似下图中信息即表示服务启动成功;如果是windows机器,直接点击hmdctl.exe即可启动。
安装器默认启动端口为8181端口,若您希望服务启动时在其它端口监听,只需启动服务时加入相应的端口参数即可,如./hmdctl --port 9000
表示服务在9000端口启动。
4.3安装演示
第一步:打开您的浏览器,输入您集群server节点的ip加服务端口即可访问安装首页,点击【下一步】即可。
第二步:点击下一步后,在此页面将会要求您输入集群的一些基本信息,包括集群名称(自定义)、容器IP段、服务IP段、网络模式,定义IP段时请留意图片中红框内的提示内容,以免出错。输入完毕点击【下一步】即可。如果不需要调整,选择默认的IP段和网络模式即可。
第三步:点击下一步后即可来到管理节点界面,您需要在此页面添加您的管理节点信息。点击右上角【添加节点】按钮,按照下图所示输入管理节点信息点击【测试连接】,若测试连接成功则可点击【添加节点】按钮。在进行【测试连接】时,会对操作系统版本、防火墙、SeLinux、磁盘类型等进行检查,如果检查不通过,会提示错误信息,需要手工调整后才能添加节点。注:系统默认第一个添加的节点为主master节点,若启动安装器的机器就是规划的主master节点,则该机器必须第一个添加。
第四步:添加完管理节点之后,在下图所示红框中输入server节点IP,之后点击【下一步】
第五步:接下来来到负载节点界面,在此界面您需要添加您的负载节点信息,负载节点的添加类似于管理节点,也需使用root账户登录,测试连接成功后,即可点击【添加节点】按钮。
第六步:添加完您所有的负载节点之后,即可点击【下一步】按钮来到安装页面。节点信息核对无误后,即可点击【开始安装】按钮。
在以上安装过程中,您可随时点击【安装日志】按钮查看安装日志。此外,安装过程中出现的三种节点状态分别如下图中红色框所示。
第七步:直到出现如下界面说明您的集群安装成功,集群配置文件默认位于/root/.kube/config中,请妥善保管,后续集群维护可能会用到该文件。
集群安装成功后,在您的master管理节点或者下载配置文件至本地或其他机器执行kubectl get node
即可看到集群中的节点信息,如下图所示,至此集群已经安装完毕。
注:若安装失败,请在各台机器的/usr/local/bin
目录下依次执行卸载脚本进行卸载,然后重新安装。
master节点卸载脚本依次执行:./k3s-killall.sh ./ k3s-uninstall.sh
worker节点卸载脚本依次执行:./k3s-killall.sh ./k3s-agent-uninstall.sh
4.4 initializer功能初始化
集群功能部署完毕后,可以跟随向导进行基础组件、盘载应用等功能部署
4.4.1 基础组件部署
集群部署成功后,heimdall会提示进行功能初始化。
目前heimdall基础组件支持安装ingress功能,这里可直接点击下一步
4.4.2 盘载应用部署
heimdall工具支持用户安装自行准备的应用包,并在本环节进行安装部署。盘载应用目前支持helm、yaml文件部署两种方式,并要求用户按照目录提供应用资源与说明配置信息。
注:如果盘载应用中有存储组件需求,请提前在应用中规划好存储部署方式,集群默认存储策略为local-path本地存储,如果需要其他存储插件建议单独部署
- app.yaml需要填写应用描述以及安装编排信息等,字段说明与参考范例如下:
name: "basis" #盘载应用名称
description: "测试范例app" #盘载应用描述
version: "0.0.1" #盘载应用版本
index: 1 #应用安装顺序,排序规则为数字从小到大
type: "yaml" #应用安装模式,目前支持helm、yaml两种方式
steps: #yaml模式下文件部署顺序
- file: statefulset.yaml #文件名称
waitInSeconds: 5 #文件部署完成后等待时间(秒)
- file: deployment.yaml
- images文件夹存放应用需要导入的离线镜像tar文件
- yaml文件夹存放yaml安装模式需要执行的安装文件,要求文件名与描述信息steps中的信息保持一致
- charts文件夹存放helm安装模式需要的tgz安装包
盘载应用部署界面会展示工具中已经上传的应用信息。勾选应用并点击下一步按钮即可进入确认界面
全部选择完成后,系统会提示已选组件,若确认无误即可开始安装。
5.自动安装流程
如果客户网络环境不支持通过浏览器访问服务,那么可以选择使用自动安装脚本进行一键部署,具体操作配置步骤如下。
-
拷贝安装包至可以连接目标集群的堡垒机或者主master节点机器,要求放置目录为/home/heimdall;
-
执行
chmod a+x autoInstall.sh
为安装脚本赋予可执行权限 -
修改config文件中的env.yaml与apps.yaml,具体格式如下。
env.yaml 集群环境配置文件
host-info: ##集群机器资源信息 master: ##master管理节点信息,默认第一个是主master机器,且master数量为奇数 - ip: 网络地址 port: 端口号 user: 远程连接账号,要求必须是root password: 密码 worker: - ip: 网络地址 port: 端口号 user: 远程连接账号,要求必须是root password: 密码 cluster-info: ##集群配置信息 name: demo-01 ##集群名称 podcidr: 10.42.0.0/16 ##容器网络位,不能与机器所在环境ip网段和保留地址冲突 servicecidr: 10.43.0.0/16 ##服务网络位,不能与机器所在环境ip网段和保留地址冲突 tlssans: https://192.168.125.135:6443 ##apiserver地址,必须使用https,且端口6443必须可用,建议使用域名地址 cluster: true flannel:vxlan ##默认是采用flannel网络模式,如果想使用自定义CNI例如calico需要改为none并自行使用helm或其他方式手动安装
apps.yaml 盘载应用配置文件。如果有要安装的盘载应用,需要将盘载应用enabled参数改为true。如果不安装需要将enabled参数改为false
applist: - name: nginx enabled: true - name: busybox enabled: false - name: kibana enabled: false
-
执行
autoInstall.sh
脚本
6.试用环境部署
针对开发、测试等人员,可以使用试用指令安装单节点集群环境,用于试用集群环境,参考流程如下:
- 按照4.安装流程对机器进行检查
- 拷贝安装包至安装机器
- 移动至安装包heimdall目录下,使用
chmod a+x hmdctl
对二进制文件进行授权 - 执行
./hmdctl trial
,快速安装试用环境
7.手动命令部署
如果遇到客户不能提供机器root权限甚至是普通账号密码sudo权限,仅允许通过控制台单点登录,可以参考以下流程:
前期准备:
- 向客户说明如果无法提供sudo权限,那就需要客户方完成机器名称设置、hosts文件配置apiserver地址映射至负载均衡机器
- 提前搭建好nginx负载均衡、存储等服务器
安装过程:
- 拷贝安装包至可以连接目标集群的堡垒机或者主master节点机器,要求放置目录为/home/heimdall;
- 先把参数写到主master节点install-flag.yaml
name: demo-01 ##集群名称
podcidr: 10.42.0.0/16 ##容器网络位,不能与机器所在环境ip网段和保留地址冲突
servicecidr: 10.43.0.0/16 ##服务网络位,不能与机器所在环境ip网段和保留地址冲突
tlssans: https://192.168.125.135:6443 ##apiserver地址,必须使用https,且端口6443必须可用
cluster: true
flannel:vxlan##默认是采用flannel网络模式,如果想使用自定义CNI例如calico需要改为none并自行使用helm或其他方式手动安装
-
主master节点移动至heimdall工具目录下执行命令
chmod a+x ./hmdctl ./hmdctl install --config-path ./config/install-flag.yaml
-
安装完毕后把config文件拷贝至工具目录下的config/k3s.yaml文件,安装信息拷贝到clusterInfo(如果现场无法互联或者拿不到root密码安装信息就先不拷贝了 后续再补)
-
更新其他节点的config/join-flag.yaml文件,server与主master节点tlssans参数一致,token是主master节点/var/lib/rancher/k3s/server/node-token内容,podCidr与serviceCidr与master节点配置的网络位保持一致
server: https://10.110.85.171:6443 ##apiserver地址 token: K108cb4f4eaef3013ec8836861ebbd344a277671ff9d9dddd2bfced941197e42be0::server:41bfecb7c3be76173354e85edbf0e4e3 podCidr: 10.42.0.0/16 ##容器网络位 serviceCidr: 10.43.0.0/16 ##服务网络位
-
各从节点移动至heimdall工具目录下执行以下命令,全部成功以后k3s基础框架就搭建完成了
chmod a+x ./hmdctl ./hmdctl join --config-path ./config/join-flag.yaml --role master/worker ##最后一个参数是执行命令机器的身份 注:如果此时部署环境并没有完成apiserver域名到master节点的映射,需要在后面再增加参数 --master-ip 主masterIP地址,否则会出现节点无法连接至主master节点的错误
-
安装helm:在主master节点中将bin/helm拷贝到/usr/bin即可
-
master、worker各个节点导入image/目录下的离线镜像,导入命令
k3s ctr i import 镜像文件名
-
使用helm安装组件,安装命令
helm install 组件名称 charts包路径 -n 命名空间 范例: helm install nfs ./nfs.tgz -n kube-system
-
安装calico:如果之前安装master节点选择none改为使用calico网络模式,本步骤需要移动至component/calico下先导入对应镜像,然后执行helm安装命令。
-
安装nfs:如果客户已部署好存储服务器,建议项目实施人员直接采用客户存储方案进行对接部署,如果客户提出需要实施人员搭建nfs存储,可以参考以下步骤:
-
将heimdall工具拷贝至nfs服务器
-
如果nfs服务器支持外网建议可以直接在线安装nfs服务,如果只能内网环境请至lib/nfs文件夹下找到对应系统目录,执行相关脚本
./nfs-install.sh nfs服务器开放目录路径 libs镜像文件夹所属路径(可以移动至系统目录下用pwd查看)
-
nfs搭建完毕后,需要到集群各个节点工具包lib/nfs文件夹下找到对应系统目录,执行相关脚本
./nfs-import.sh nfs服务器开放目录路径 libs镜像文件夹所属路径(可以移动至系统目录下用pwd查看)
-
回到主master机器使用helm安装nfs组件
helm安装nfs组件前需要创建values.yaml文件存放客户nfs服务器信息
nfs: server: 10.201.48.163 ##客户方提供的nfs服务器地址 path: /data/nfs ##nfs挂载数据路径
然后在helm执行安装命令时指定values.yaml文件
helm install 组件名称 charts包路径 -n 命名空间 -f values.yaml路径 范例: helm install nfs ./nfs.tgz -n kube-system -f ./values.yaml
-
-
安装ingress:导入image/镜像后移动至component/下使用helm安装组件
-
安装盘载应用:移动至app/路径下先导入app相关离线镜像,再使用helm指令安装组件
-
-
如果现场环境需要使用普通用户执行kubectl、helm等命令,首先保证该用户有权限执行该执行文件。然后将/root/.kube/config文件拷贝至用户目录下:/home/用户名/.kube/config。这样才能保证普通用户可以执行相关命令。
8.手动新增节点
注:适用于在heimdall安装的现有集群中新增节点。
8.1 通过更改配置文件命令新增
-
将heimdall安装盘拷贝至需要新增的节点下的
/home
文件夹下。 -
更新需要新增节点的安装盘下的
config/join-flag.yaml
文件,server需与主master节点配置文件中的apiserver参数保持一致,token是主master节点/var/lib/rancher/k3s/server/node-token
内容,podCidr与serviceCidr与master节点配置的网络位保持一致server: https://10.110.85.171:6443 ##apiserver地址 token: K108cb4f4eaef3013ec8836861ebbd344a277671ff9d9dddd2bfced941197e42be0::server:41bfecb7c3be76173354e85edbf0e4e3 podCidr: 10.42.0.0/16 ##容器网络位 serviceCidr: 10.43.0.0/16 ##服务网络位
-
在hmdctl工具所在目录下,使用命令
chmod a+x hmdctl
给安装盘下的hmdctl工具赋予可执行权限,使用命令./hmdctl join --config-path ./config/join-flag.yaml --role master/worker --master-ip 主masterIP地址
执行新增即可。
8.2 直接使用命令新增
- 将heimdall安装盘拷贝至需要新增的节点下的
/home
文件夹下。 - 找到主master节点配置文件中的apiserver、podcidr、servicecidr参数的值和主master节点
/var/lib/rancher/k3s/server/node-token
的值,将在新增命令中使用。 - 在hmdctl工具所在目录下,使用命令
chmod a+x hmdctl
给安装盘下的hmdctl工具赋予可执行权限,使用命令./hmdctl join --master-url apiserver值 --token token值 --service-cidr servicecidr值 --pod-cidr podcidr值 --role master/worker --master-ip 主masterIP地址
执行新增即可。
9.集群卸载方式
9.1 卸载整个集群
如果在安装过程中如果节点部署或执行命令出现异常情况需要进行卸载重新安装,可以在对应节点执行以下步骤
-
需要卸载的节点按照先卸载worker工作负载节点,再卸载master集群管理节点顺序执行
-
worker节点卸载需要依次执行机器上以下两个脚本即可完成卸载,如果不存在则代表该机器安装失败后已经完成自动回滚无需卸载。
/usr/local/bin/k3s-killall.sh /usr/local/bin/k3s-agent-uninstall.sh
-
master节点卸载需要依次执行机器上以下两个脚本即可完成卸载,如果不存在则代表该机器安装失败后已经完成自动回滚无需卸载。
/usr/local/bin/k3s-killall.sh /usr/local/bin/k3s-uninstall.sh
9.2 删除集群节点
若是要删除集群中某个节点,需要现在集群中停止该节点调度并删除注册信息,然后再执行删除脚本。
-
获取节点列表,查找要删除的节点名称
kubectl get node
-
设置节点为不可调度
kubectl cordon $node_name
-
驱逐该节点上的Pod
kubectl drain $node_name --ignore-daemonsets ##守护进程类的Pod可以不用驱逐,节点删除不会影响相关服务
-
在集群中移除节点
kubectl delete node $node_name
-
执行节点卸载脚本,关联脚本名称参考9.1