部署思路踩坑整理
1、ArgoCD和ArgoCD Image Updater是2个不同的程序。"ArgoCD Image Updater小工具"没有集成在ArgoCD中需要单独部署。
2、单独的ArgoCD能够实现基于git仓库变更作为应用部署的事实来源 [参考子页:argocd根据镜像tag变化实现自动发布的2种方式];
ArgoCD +"ArgoCD Image Updater小工具"能够实现以镜像仓库中镜像tag变更作为应用部署的事实来源。
3、"ArgoCD Image Updater小工具"部署略显繁琐,并不只是apply官方提供的yaml让pod运行就可以了,需要打通和argocd的认证等操作。
4、ArgoCD 或"ArgoCD Image Updater小工具"按照官方提供的install.yaml 部署后,如果修改其中的cm或者参数,不要采取在原yaml修改后再提交的方式,应该 用命令修改。因为yaml太长太复杂了!
5、其它
5.1、argocd 配置gitlab,http用户名密码方式可以实现认证并回写。
5.2、harbor公开仓库配置的时候不需要用户名和密码,可以使用http请求。
6、配置了回写时,ArgoCD Image Updater 并不会直接修改git仓库yaml 文件的tag,而是会创建一个.开头的yaml 文件(此例为".argocd-source-dev-smart-doc.yaml
"),每次更新都会覆盖此文件的images内容。
ArgoCD + ArgoCD Image Updater 部署步骤:
1、安装ArgoCD
略,在线安装离线安装均可,yaml文件很长。可参考本节其它。
登录argocd UI 会强制修改密码。
安装 Argo CD CLI
要与 Argo CD API Server 进行交互,我们需要安装 CLI 命令:
# wget https://github.com/argoproj/argo-cd/releases/download/v1.7.10/argocd-linux-amd64
或者用win访问 https://github.com/argoproj/argo-cd/releases 选择合适的版本下载 argocd-linux-amd64 文件
# cp argocd-linux-amd64 /usr/local/bin/argocd
# chmod +x /usr/local/bin/argocd
2、部署"ArgoCD Image Updater小工具"部署略显繁琐
==================== 2.1、在argocd中创建本地用户并为用户创建访问令牌 ======================
# kubectl -n argocd edit cm argocd-cm
accounts.image-updater: apiKey
##打开后没有data字段,在最后顶格补入以上字段。注意:apiKey中的K为大写!!!
=================== 2.1.1 为用户创建访问令牌,保存备用(下面配置API访问令牌秘钥会用到此处生成的令牌)===============
用argocd命令登录认证argocd(地址为argocd-server SVC暴露的端口),需要交互输入y,忽略tls证书。
# argocd login 10.244.10.55:15471 --username admin --password argocd123
'admin:login' logged in successfully
Context '10.244.10.55:15471' updated
执行下面命令的前提是上面已经用argocd命令登录了argocd
# argocd account generate-token --account image-updater --id image-updater
=================== 2.2、在Argo CD中授予RBAC权限 =====================
# kubectl -n argocd edit cm argocd-rbac-cm
p, role:image-updater, applications, get, */*, allow
p, role:image-updater, applications, update, */*, allow
g, image-updater, role:image-updater
================= 2.3、安装Argo CD Image Update =====================
运行镜像更新程序的最直接方法是将其作为 Kubernetes 工作负载安装到运行 Argo CD 的命名空间中。这样就不需要任何配置,也不会对你的工作负载产生任何影响。
# kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/manifests/install.yaml
或者地址:https://github.com/argoproj-labs/argocd-image-updater/tree/master/manifests
================= 2.4、配置镜像仓库(此例为harbor,之前ecr有过实践) ===============
即使您不打算使用私有镜像仓库,您也需要至少配置一个empty registries.conf:
# kubectl -n argocd edit cm argocd-image-updater-config
data:
registries.conf: ""
##没有此条目argocd-image-updater pod将无法启动。
如果使用私有镜像仓库可参考以下配置,以harbor镜像仓库为例:
data:
argocd.insecure: "true"
log.level: debug
registries.conf: |
registries:
- name: harbor
api_url: http://reg1.ka.zkj.com
prefix: reg1.ka.zkj.com
ping: yes
insecure: yes
##打开后没有data字段,在最后顶格补入以上字段。
##修改保存后,再查看验证多了data字段。
================= 2.5、配置API访问令牌秘钥 ============
根据上面生成的令牌设置变量
#YOUR_TOKEN=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhcmdvY2QiLCJzdWIiOiJpbWFnZS11cGRhdGVyOmFwaUtleSIsIm5iZiI6MTcyODUyNDUyMCwiaWF0IjoxNzI4NTI0NTIwLCJqdGkiOiJpbWFnZS11cGRhdGVyIn0.QecneA-yvcbU7Eoyi8egWwiAxN4zrf9FCWJXPeu0ick
创建并应用于现有资源,特别注意:命令中的命名空间要修改为服务实际部署的NS
# kubectl create secret generic argocd-image-updater-secret \
> --from-literal argocd.token=$YOUR_TOKEN --dry-run -o yaml |
> kubectl -n argocd apply -f -
W1010 09:48:58.532655 3478 helpers.go:703] --dry-run is deprecated and can be replaced with --dry-run=client.
secret/argocd-image-updater-secret configured
更改后必须重启服务
# kubectl -n argocd rollout restart deployment argocd-image-updater
deployment.apps/argocd-image-updater restarted
3、在gitlab仓库中建立编排文件
说明:gitlab仓里有4个文件。
回写文件:
.argocd-source-dev-smart-doc.yaml 是argocd 回写后的文件,这个是argocd image updater 应用建立后才会生成的!
编排文件:
dp-smart-doc.yaml
svc-smart-doc.yaml
Kustomize工具文件:
kustomization.yaml
---------文件内容如下 -------------------
kustomization.yaml
namePrefix: kustomize-
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- dp-smart-doc.yaml
- svc-smart-doc.yaml
------------------------------------
dp-smart-doc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: smart-doc
namespace: wa
labels:
group: service
spec:
replicas: 1
selector:
matchLabels:
app: smart-doc
tier: backend
template:
metadata:
annotations: {}
labels:
app: smart-doc
tier: backend
spec:
nodeSelector:
smart: "true"
dnsPolicy: ClusterFirst
containers:
- image: reg1.ka.zkj.com/dev/smart-doc:v1.241008-68-002
imagePullPolicy: IfNotPresent
name: smart-wealth
ports:
- containerPort: 9800
#command: ["sleep","10000"]
env:
- name: TZ
value: Asia/Shanghai
resources:
limits:
cpu: 1000m
memory: 4Gi
requests:
cpu: 1000m
memory: 4Gi
volumeMounts:
- mountPath: /logs/smart-doc
name: smart-doc
terminationGracePeriodSeconds: 60
volumes:
- hostPath:
path: "/home/zkj/wealth/logs/smart-doc"
type: DirectoryOrCreate
name: "smart-doc"
-----------------------------
svc-smart-doc.yaml
apiVersion: v1
kind: Service
metadata:
name: smart-doc
namespace: wa
spec:
type: NodePort
ports:
- port: 9800
targetPort: 9800
nodePort: 48528
selector:
app: smart-doc
tier: backend
4、登录argocd UI,建立argocd应用。
=======================================================
综合参考:
https://cloudpods.csdn.net/657807ccb8e5f01e1e447b15.html KubeSphere对接ArgoCD
https://kubesphere.io/zh/blogs/kubesphere-argocd/ KubeSphere + Argo CD,实现真正的 GitOps!
标签:argocd,Image,ArgoCD,yaml,Updater,doc,image,smart From: https://www.cnblogs.com/golaris/p/18457953