一、知识点分析
1.Helm是什么?
Helm 帮助管理 Kubernetes 应用—— Helm Chart,即使是最复杂的 Kubernetes 应用程序,都可以帮助您定义,安装和升级。具有复杂性管理、易于升级、分发简单、回滚优点。可以简单理解为k8s的yum源、maven后端依赖库、nexus前端依赖库等。
2.Chart是什么?
Chart是Helm使用包格式。 chart就是一个描述Kubernetes相关资源的文件集合。单个chart可以用来部署一些简单的, 类似于memcache pod,或者某些复杂的HTTP服务器以及web全栈应用、数据库、缓存等等。可以简单理解为类似于rpm包与yum源之间的关系。
3.AWX是什么?
AWX 提供基于 Web 的用户界面、REST API 和基于Ansible 构建的任务引擎。它是红帽 Ansible 自动化平台的上游项目之一。可以简单理解为Ansible的web页面管理工具。
二、环境及安装包
1.安装包
- helm-v3.8.1-linux-amd64.tar.gz
- awx-operator-1.0.0.tgz
- helm-push_0.10.3_linux_amd64.tar.gz
2.环境
- Kubenetes1.23.1
- CentOS7.8
- Kuboard3.3.0
- Harbor2.4.2
#查看系统信息、版本、k8s版本
hostnamectl && cat /etc/redhat-release && kubectl version
(提示:k8s、harbor、kuboard安装参考本人前面发布的Kubernetes1.23.5集群部署、Kuboard+Harbor+Dockerfile实战项目)
三、部署步骤
1.Harbor启用Helm Charts模块
(提示:默认Harbor这个模块是关闭的所以需要安装时候添加相应模块参数开启即可。)
#如果已经安装了不要着急,关闭服务加上模块在开启即可
docker-compose stop //进入到harbor安装目录执行关闭
./install.sh --with-chartmuseum //安装加入charts仓库模块
docker-compose start //启动
如下图可以看到我们harbor仓库里面已经有Helm Charts这个模块啦!
2.Helm安装和基本使用
2.1.安装
tar -xvf helm-v3.8.1-linux-amd64.tar.gz //解压到当前目录
cd linux-amd64/ //进入解压目录
cp linux-amd64/helm /usr/local/bin/helm //拷贝到系统执行目录下
helm version //查看helm版本
2.2.添加Charts源
#添加harbor私有charts源
helm repo add course http://10.111.13.4:8080/chartrepo/myrepo --username=admin --password=xxxxxx
helm repo list //查看当前已添加charts源
helm repo update //更新charts源(有关源仓库变更都需要执行一次)
2.3.安装helm-push插件
#1、oci注册只支持https协议
#2、原生自带的helm push命令只能对支持oci注册机制的仓库使用,Harbor已经弃用这种注册机制。
#3、所以我们使用helm cm-push命令上传而不是helm push
helm env //查看helm的环境变量(可以查看到插件目录存放路径:/root/.local/share/helm/plugins)
mkdir /root/.local/share/helm/plugins/helm-push //创建插件目录(压缩包不带目录)
tar -xvf helm-push_0.10.3_linux_amd64.tar.gz -C /root/.local/share/helm/plugins/helm-push //解压到插件目录
helm plugin list //查看已安装插件
2.4.Chart上传至Harbor仓库
helm cm-push awx-operator-1.0.0.tgz course //上传,course是<repo name>
helm repo update //更新charts源(有关源仓库变更都需要执行一次)
helm search repo awx //搜索awx Chart包测试
3.AWX安装
-
Helm Install on existing cluster【官方互联网安装文档】
(提示:以上方法提供给有互联网的小伙伴!)
3.1.准备工作
#1、使用AWX默认参数模板安装需要打开相关配置,<AWX.enabled>默认为false,我们需要改为true
#2、旧版本看官方文档操作步骤应该不需要打开,到了最新版需要手动启用了。
#3、由于博主是内网环境因此还需要修改拉去镜像地址改为私Harbor仓库地址(image上传harbor不再赘述)。
#4、最后重新打包、上传、更新仓库
tar -xvf awx-operator-1.0.0.tgz //解压
cd awx-operator //进入解压目录
vim values.yaml //修改默认配置文件
AWX:
# enable use of awx-deploy template
enabled: true //改为true
name: awx
spec:
admin_user: admin
...
:qw //退出并保存
vim templates/deployment-awx-operator-controller-manager.yaml //修改拉取镜像地址
...
spec:
containers:
- args:
- --secure-listen-address=0.0.0.0:8443
- --upstream=http://127.0.0.1:8080/
- --logtostderr=true
- --v=0
image: 10.111.13.4:8080/jsjb/brancz/kube-rbac-proxy:v0.13.0 //harbor地址
...
env:
- name: ANSIBLE_GATHERING
value: explicit
- name: ANSIBLE_DEBUG_LOGS
value: "false"
- name: WATCH_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
image: 10.111.13.4:8080/jsjb/ansible/awx-operator:1.0.0 //harbor地址
...
:wq //保存并退出
rm -rf awx-operator-1.0.0.tgz //删除初始包
tar -zcvf awx-operator-1.0.0.tgz awx-operator //打包
helm cm-push awx-operator-1.0.0.tgz course //上传harbor
helm repo update //更新charts
3.2.安装
#1、helm install -n 空间名称 执行创建操作 安装软件名称 用户名 密码 版本 <repo name>/<chart name>
helm install -n awx --create-namespace my-awx-operator --username=admin --password=xxxxxxx --version 1.0.0 course/awx-operator
kubectl get pods -n awx //查看pod状态
kubectl get svc //查看服务状态
通过kuboard观察日志可以看到我们没有提前创建对应的pvc
#没有安装kuboard的可以用命令也一样的
kubectl describe pods awx-demo-postgres-13-0 | grep -i -A 10 event //查看事件
kubectl get pvc //查看pvc
kubectl describe pvc postgres-13-awx-postgres-13-0 | grep -i -A 10 event //查看具体pvc事件
Pending的原因是没有默认SC
这里采用本地存储
#对于有状态应用来讲,在生成statefulsets之前需要创建好默认的SC(动态卷供应),由SC来动态处理PV和PVC的创建。
#生成PV用于PG的数据存储,所以我们这里需要创建一个SC,创建之前我们需要一个分配器,不同的分配器指定了动态创建pv时使用什么后端存储。
mkdir -p /srv/program/postgres-pv/local-path-postgres-pv-0 //目录创建到所选节点
chmod -R +777 /srv/program/postgres-pv/local-path-postgres-pv-0 //赋予权限
#回到之前机器操作
vim sc.yaml //编写sc配置
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-path
provisioner: kubernetes.io/no-provisioner #需要指定no-provisioner,相当于告诉k8s不要去动态创建PV。
volumeBindingMode: WaitForFirstConsumer #需指定WaitForFirstConsumer,表示延迟绑定。
reclaimPolicy: Delete
kubectl apply -f sc.yaml //创建sc
vim pv.yaml //编写pv配置
apiVersion: v1
kind: PersistentVolume
metadata:
name: postgres-13-awx-postgres-13-0
namespace: awx # 空间名称
labels:
name: postgres-13-awx-postgres-13-0
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-path #sc名字
local:
path: /srv/program/postgres-pv/local-path-postgres-pv-0 #存储卷的实际位置,与nfs暴露的文件地址相同
nodeAffinity: #限制该PV只能在node-6上被使用
required:
nodeSelectorTerms: # 节点选择
- matchExpressions: #拓扑的key用kubernetes.io/hostname来做标记,也就是只能在node-6访问
- key: kubernetes.io/hostname
operator: In
values:
- node-6 # 根据自己节点名称
kubectl apply -f pv.yaml //创建pv
#将local-path设置为默认sc
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
#删除pod等待pgsql会自动重建
kubectl delete -f postgres-13-awx-postgres-13-0.yaml
kubectl get pv |grep local-path //查看pv情况,bound为绑定成功
kubectl get pvc //查看pvc情况,bound为绑定成功
从kuboard看到拉取镜像失败(因为我内网,需要找有网的机器自己导入harbor修改地址拉去即可)
kubectl describe pod awx-postgres-13-0 | grep -i -A 10 event //没有kuboard可以这条命令查看事件
目前通过kuboard更改拉取镜像地址是不行的,因为要求必须https我搭建的harbor没开启https所以需要去所在节点亲自从harbor拉取pgsql(awx安装要求拉取地址必须https)
kubectl get pods -n awx -o wide //查看pgsql在那个节点上
docker pull 10.111.13.4:8080/myrepo/postgres:13 //到相应节点拉取
docker tag 10.111.13.4:8080/myrepo/postgres:13 postgres:13 //更改标签使Pod识别
(图1可以看到已经成功创建pgsql)
#通过事件看到awx的pod也存在拉取镜像问题,解决方案同上
kubectl describe pod awx-6fcdc869d4-cjddn | grep -i -A 10 event
kubectl get pods -n awx -o wide //查看awx在那个节点上
从kuboard可以看出这次需要拉取3个image(有俩重复)
#从有互联网的机器分别拉取:
#1、docker.io/redis:7
#2、quay.io/ansible/awx:21.8.0
#3、quay.io/ansible/awx-ee:latest
#4、推送到harbor上
#5、登录node-10节点、拉取镜像、并修改成相应的tag使pod匹配到即可
docker pull docker.io/redis:7
docker pull quay.io/ansible/awx:21.8.0
docker pull quay.io/ansible/awx-ee:latest
docker save -o redis7.tar.gz docker.io/redis:7
docker save -o awx-ee.tar.gz quay.io/ansible/awx-ee:latest
docker save -o awx21.tar.gz quay.io/ansible/awx:21.8.0
docker load < redis7.tar.gz
docker load < awx-ee.tar.gz
docker load < awx21.tar.gz
docker tag docker.io/redis:7 10.111.13.4:8080/myrepo/redis:7
docker tag quay.io/ansible/awx-ee:latest 10.111.13.4:8080/myrepo/awx-ee:latest
docker tag quay.io/ansible/awx:21.8.0 10.111.13.4:8080/myrepo/awx:21.8.0
docker push 10.111.13.4:8080/myrepo/redis:7
docker push 10.111.13.4:8080/myrepo/awx-ee:latest
docker push 10.111.13.4:8080/myrepo/awx:21.8.0
如图已经如数上传到私有镜像库了:
接下来去相应节点也就是node-10拉取下来并改回原标签
docker pull 10.111.13.4:8080/myrepo/redis:7
docker pull 10.111.13.4:8080/myrepo/awx-ee:latest
docker pull 10.111.13.4:8080/myrepo/awx:21.8.0
docker tag 10.111.13.4:8080/myrepo/redis:7 docker.io/redis:7
docker tag 10.111.13.4:8080/myrepo/awx-ee:latest quay.io/ansible/awx-ee:latest
docker tag 10.111.13.4:8080/myrepo/awx:21.8.0 quay.io/ansible/awx:21.8.0
#回到主节点上查看
kubectl get pods -n awx //查看awx空间的pod情况
4.AWX访问测试
4.1.curl本地访问测试
kubectl get svc //查看services
curl 10.254.181.37 //访问测试
4.2.获取密码
kubectl get secrets
echo $(kubectl get secret awx-admin-password -o jsonpath="{.data.password}" | base64 --decode)
4.3.访问测试
#1、awx1.0.0最新版本默认服务没有发布,所以我们通过Kuboard代理直接访问即可。
#2、或者大家可以将awx以NodePort方式发布出来。
#以下命令可以查看awx所有涉及到的资源信息
kubectl api-resources -o name --verbs=list --namespaced | xargs -n 1 kubectl get --show-kind --ignore-not-found -n awx
方法一:
【kuboard代理访问】
方法二:
【发布服务】
AWX平台地址:http://任意节点子网IP:31770/#/login
用户:admin
密码:suYNigpQ0e67FvbSls6Suz9Nzi1et5io
四、结束语
本次离线安装awx就结束了,感谢认真读完,如果觉得还可以,那么给作者点赞、收藏、关注吧!文章来源:https://www.toymoban.com/news/detail-807581.html
阿坤成立公众号啦!可以微信搜一搜「 csdn阿坤 」第一时间阅读,关注后回复【AWX】可获得AWX1.0.0离线镜像包网盘下载链接,不用再为了awx镜像下载发愁,本人 GitHub https://github.com/csdnak/shell已经收录各种 运维脚本,欢迎Star。文章来源地址https://www.toymoban.com/news/detail-807581.html
到了这里,关于【Harbor作为Chart仓库】Helm离线部署AWX1.0.0的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!