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


    一、知识点分析

    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
    
    • 1
    • 2

    在这里插入图片描述
    (提示: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				//启动
    
    • 1
    • 2
    • 3
    • 4

    如下图可以看到我们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版本
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    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源(有关源仓库变更都需要执行一次)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    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			//查看已安装插件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    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包测试
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述

    3.AWX安装

    3.1.准备工作
    #1、使用AWX默认参数模板安装需要打开相关配置,默认为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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    3.2.安装
    #1、helm install -n 空间名称 执行创建操作 安装软件名称 用户名 密码 版本 /
    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				    //查看服务状态
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    通过kuboard观察日志可以看到我们没有提前创建对应的pvc
    在这里插入图片描述

    #没有安装kuboard的可以用命令也一样的
    kubectl describe pods awx-demo-postgres-13-0 | grep -i  -A 10 event  //查看事件
    
    • 1
    • 2

    在这里插入图片描述

     kubectl get pvc		//查看pvc
     kubectl describe  pvc postgres-13-awx-postgres-13-0 | grep -i -A 10 event  //查看具体pvc事件
    
    • 1
    • 2

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    在这里插入图片描述

    #将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为绑定成功
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述
    从kuboard看到拉取镜像失败(因为我内网,需要找有网的机器自己导入harbor修改地址拉去即可)
    在这里插入图片描述

    kubectl describe  pod awx-postgres-13-0 | grep -i -A 10 event   //没有kuboard可以这条命令查看事件
    
    • 1

    在这里插入图片描述
    目前通过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
    • 2
    • 3

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    (图1可以看到已经成功创建pgsql)

    #通过事件看到awx的pod也存在拉取镜像问题,解决方案同上
    kubectl describe  pod awx-6fcdc869d4-cjddn | grep -i -A 10 event 
    
    • 1
    • 2

    在这里插入图片描述

    kubectl get pods -n awx -o wide			//查看awx在那个节点上
    
    • 1

    在这里插入图片描述
    从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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这里插入图片描述
    在这里插入图片描述
    如图已经如数上传到私有镜像库了:
    在这里插入图片描述
    接下来去相应节点也就是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情况
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    4.AWX访问测试

    4.1.curl本地访问测试
    kubectl get svc				//查看services
    curl 10.254.181.37			//访问测试
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述

    4.2.获取密码
    kubectl get secrets
    echo $(kubectl get secret awx-admin-password -o jsonpath="{.data.password}" | base64 --decode)
    
    • 1
    • 2

    在这里插入图片描述

    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
    
    • 1
    • 2
    • 3
    • 4

    方法一:
    【kuboard代理访问】
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    方法二:
    【发布服务】
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    AWX平台地址:http://任意节点子网IP:31770/#/login
    用户:admin
    密码:suYNigpQ0e67FvbSls6Suz9Nzi1et5io
    在这里插入图片描述
    在这里插入图片描述

    四、结束语

      本次离线安装awx就结束了,感谢认真读完,如果觉得还可以,那么给作者点赞、收藏、关注吧!


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

  • 相关阅读:
    国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(中)
    java医用物资信息管理系统 ssm
    centos安装NIS
    计算机学院2022级新生邀请赛(一)
    【学习日记】使用Xtion相机/SDK/openni2环境搭建
    numpy教程:The NumPy ndarray
    猿创征文 | 一个大四学长分享自己的web前端学习路线--小程序篇(3/3)
    【开源】串口/蓝牙/TCP/UDP调试工具SerialTest
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java扶贫产品和扶贫物资捐赠系统r32rk
    Xpansiv收购APX以扩大环保商品市场基础设施规模
  • 原文地址:https://blog.csdn.net/qq_43417559/article/details/127818568