草庐IT

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

cs阿坤dn 2023-07-24 原文

目录

一、知识点分析

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。

有关【Harbor作为Chart仓库】Helm离线部署AWX1.0.0的更多相关文章

  1. ruby - 完全离线安装RVM - 2

    我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

  2. ruby - RSpec - 使用测试替身作为 block 参数 - 2

    我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere

  3. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  4. ruby - 字符串文字中的转义状态作为 `String#tr` 的参数 - 2

    对于作为String#tr参数的单引号字符串文字中反斜杠的转义状态,我觉得有些神秘。你能解释一下下面三个例子之间的对比吗?我特别不明白第二个。为了避免复杂化,我在这里使用了'd',在双引号中转义时不会改变含义("\d"="d")。'\\'.tr('\\','x')#=>"x"'\\'.tr('\\d','x')#=>"\\"'\\'.tr('\\\d','x')#=>"x" 最佳答案 在tr中转义tr的第一个参数非常类似于正则表达式中的括号字符分组。您可以在表达式的开头使用^来否定匹配(替换任何不匹配的内容)并使用例如a-f来匹配一

  5. ruby-on-rails - Ruby on Rails 可以部署在 Azure 网站上吗? - 2

    我可以在Azure网站上部署RubyonRails吗? 最佳答案 还没有。目前仅支持.NET和PHP。 关于ruby-on-rails-RubyonRails可以部署在Azure网站上吗?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/12964010/

  6. jenkins部署1--jenkins+gitee持续集成 - 2

    前置步骤我们都操作完了,这篇开始介绍jenkins的集成。话不多说,看操作1、登录进入jenkins后会让你选择安装插件,选择第一个默认的就行。安装完成后设置账号密码,重新登录。2、配置JDK和Git都需要执行路径,所以需要先把执行路径找到,先进入服务器的docker容器,2.1JDK的路径root@69eef9ee86cf:/usr/bin#echo$JAVA_HOME/usr/local/openjdk-82.2Git的路径root@69eef9ee86cf:/#whichgit/usr/bin/git3、先配置JDK和Git。点击:ManageJenkins>>GlobalToolCon

  7. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  8. ruby-on-rails - 应用程序的名称是否可以作为变量使用? - 2

    当我创建一个Rails应用程序时,控制台:railsnewfoo我的代码可以使用字符串“foo”吗?puts"Yourapp'snameis"+app_name_bar 最佳答案 Rails.application.class将为您提供应用程序的全名(例如YourAppName::Application)。从那里您可以使用Rails.application.class.parent获取模块名称。 关于ruby-on-rails-应用程序的名称是否可以作为变量使用?,我们在StackOve

  9. ruby-on-rails - 使用作为方法的值在 ruby​​ 中搜索哈希 - 2

    我在搜索我的值是方法的散列时遇到问题。我只是不想运行plan_type与键匹配的方法。defmethod(plan_type,plan,user){foo:plan_is_foo(plan,user),bar:plan_is_bar(plan,user),waa:plan_is_waa(plan,user),har:plan_is_har(user)}[plan_type]end目前如果我传入“bar”作为plan_type,所有方法都会运行,我怎么能只运行plan_is_bar方法呢? 最佳答案 这个变体怎么样?defmethod

  10. ruby - 无法在 Ruby 中将 ffmpeg 作为子进程运行 - 2

    我正在尝试使用以下代码通过将ffmpeg实用程序作为子进程运行并获取其输出并解析它来确定视频分辨率:IO.popen'ffmpeg-i'+path_to_filedo|ffmpegIO|#myparsegoeshereend...但是ffmpeg输出仍然连接到标准输出并且ffmepgIO.readlines是空的。ffmpeg实用程序是否需要一些特殊处理?或者还有其他方法可以获得ffmpeg输出吗?我在WinXP和FedoraLinux下测试了这段代码-结果是一样的。 最佳答案 要跟进mouviciel的评论,您需要使用类似pope

随机推荐