zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【Harbor作为Chart仓库】Helm离线部署AWX1.0.0

2023-04-18 16:47:00 时间

一、知识点分析

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.安装包

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安装

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就结束了,感谢认真读完,如果觉得还可以,那么给作者点赞、收藏、关注吧!


阿坤成立公众号啦!可以微信搜一搜「 csdn阿坤 」第一时间阅读,关注后回复【AWX】可获得AWX1.0.0离线镜像包网盘下载链接,不用再为了awx镜像下载发愁,本人 GitHub https://github.com/csdnak/shell已经收录各种 运维脚本,欢迎Star。