目录
一、实验
1. 环境
2. K8S master节点部署Argo CD
3.基于ArgoCD 实现GitOps (同步部署文件)
4.基于ArgoCD 实现GitOps (同步HELM文件)
二、问题
1. ArgoCD 连接K8S集群状态为 Unknown
2.ArgoCD 创建application失败
3. curl命令
一、实验
1. 环境
(1)主机
表1 主机
主机 | 架构 | 版本 | IP | 备注 |
master1 | K8S master节点 | 1.20.6 | 192.168.204.180 | jenkins slave (从节点) |
argocd | 2.9.3 | 192.168.204.180:31767 | ||
helm | 3.6.0 | |||
git | 1.8.3.1 | |||
node1 | K8S node节点 | 1.20.6 | 192.168.204.181 | |
node2 | K8S node节点 | 1.20.6 | 192.168.204.182 | |
jenkins | jenkins主节点 | 2.414.2 | 192.168.204.15:8080 | gitlabrunner (从节点) |
harbor私有仓库 | 1.2.2 | 192.168.204.15 | ||
gitlab | gitlab 主节点 | 12.10.14 | 192.168.204.8:82 | jenkins slave (从节点) |
sonarqube | 9.6 | 192.168.204.8:9000 |
2. K8S master节点部署Argo CD
(1)查看K8S集群状态
# kubectl get node
(2) master节点部署Argo CD
1)创建命名空间,生成资源# kubectl create namespace argocd# kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml2)查看部署状态# kubectl -n argocd get deployment# kubectl get pod -n argocd3)使用nodePort# kubectl patch svc argocd-server -p '{"spec": {"type": "NodePort"}}' -n argocd4)默认情况下 admin 帐号的初始密码是自动生成的,会以明文的形式存储在 Argo CD 安装的命名空间中名为 password 的 Secret 对象下的 argocd-initial-admin-secret 字段下,我们可以用下面的命令来获取# kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo
① 创建命名空间,生成资源
② 查看部署状态
③ 使用nodePort
④ 查看初始密码
(3)Argo CD 连接K8S集群
1)下载客户端工具curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64chmod +x /usr/local/bin/argocd2)查看service# kubectl -n argocd get service3) 添加集群# argocd login 192.168.204.180:317674)列出当前 kubeconfig 中的所有集群上下文# kubectl config get-contexts 5)注册集群# argocd cluster add kubernetes-admin@kubernetes --kubeconfig ~/.kube/config --name k8s
① 下载客户端工具(这里直接本地上传,修改文件名)
② 查看service (外部访问端口为31767)
③列出当前 kubeconfig 中的所有集群上下文
④注册集群
(4)登录ArgoCD
① 继续访问
② 显示登录界面
③ 输入账户密码(账号为admin,密码为之前命令获取的初始密码)
④ 登录成功
⑤ 查看设置(有仓库、集群、项目等设置)
查看集群
(5)K8S master节点另开一个终端用watch命令观察pod变化
# watch -n 1 "kubectl get pod -n devops03"
(6)删除命名空间devops03
(7)观察pod变化
3.基于ArgoCD 实现GitOps (同步部署文件)
(1) 查看GitLab项目,复制项目地址
(2)ArgoCD 准备添加REPO(仓库)
(3)添加
(4)成功
(5)ArgoCD 创建application (手动策略、自动创建命名空间、指定仓库与集群)
(6)成功
(7)进入应用
(8)点击 SYNCHRONIZE (同步)
(9)观察pod变化
(10)pod创建完成
(11)查看node节点状态
(12)查看健康状态
(13)查看service状态
(14)项目整体情况
(13)外部测试访问(当前版本为1.1.6)
# curl http://devops03-devops-ui.devops.com:31291
(14)修改GitLab项目文件,副本数调整为5
修改前:
修改后:
(15)Argo CD 点击 SYNCHRONIZE (同步)
(16)观察pod变化
(17)ArgoCD 查看
(18)点击HISTORY AND ROLLBACK进行回滚操作
(19)查看
(20)回滚指定版本
(21)OK
(22)观察pod变化
(23)ArgoCD 查看
4.基于ArgoCD 实现GitOps (同步HELM文件)
(1)查看GitLab项目,复制项目地址
(2)ArgoCD 添加REPO(仓库)
(3)成功
(4)K8S集群删除命名空间devops03
# kubectl delete ns devops03
(5)ArgoCD 选择Create applicatin 创建应用程序
(6)ArgoCD 创建application (手动策略、自动创建命名空间、指定仓库与集群)
(7)完成创建
(8)点击 SYNCHRONIZE (同步)
(9) 观察pod变化
(10)外部测试访问(当前版本为1.1.7)
# curl http://devops03-devops-ui.devops.com:31291
(11)修改GitLab项目文件,镜像tag标签修改为RELEASE-1.1.6
修改前:
修改后:
(12) ArgoCD 点击 SYNCHRONIZE (同步)
(13) 观察pod变化
(14) ArgoCD 观察变化
(15)外部测试访问(当前版本为1.1.6)
# curl http://devops03-devops-ui.devops.com:31291
二、问题
1. ArgoCD 连接K8S集群状态为 Unknown
(1)报错
1)列出当前 kubeconfig 中的所有集群上下文:# kubectl config get-contexts -o name2)注册集群# argocd cluster addkubernetes-admin@kubernetes3)查看集群# argocd cluster list
(2)原因分析
未添加K8S集群认证配置文件
(3)解决方法
重新命令添加,如果添加失败,需要先删除已关联的集群。
ArgoCD删除集群。
重新命令添加成功。
# argocd cluster add kubernetes-admin@kubernetes --kubeconfig ~/.kube/config --name k8s
查看
2.ArgoCD 创建application失败
(1)报错
(2)原因分析
Project Name 有误
(3)解决方法
修改Project Name
修改前:
修改后:
成功:
3. curl命令
(1)概念
在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具。它支持文件的上传和下载,是综合传输工具,但按传统,习惯称url为下载工具。
(2)语法
# curl [option] [url]
(3)常见参数
1)常见参数-A/--user-agent 设置用户代理发送给服务器-b/--cookie cookie字符串或文件读取位置-c/--cookie-jar 操作结束后把cookie写入到这个文件中-C/--continue-at 断点续转-D/--dump-header 把header信息写入到该文件中-e/--referer来源网址-f/--fail连接失败时不显示http错误-o/--output把输出写到该文件中-O/--remote-name把输出写到该文件中,保留远程文件的文件名-r/--range 检索来自HTTP/1.1或FTP服务器字节范围-s/--silent静音模式。不输出任何东西-T/--upload-file 上传文件-u/--user 设置服务器的用户和密码-w/--write-out [format]什么输出完成后-x/--proxy 在给定的端口上使用HTTP代理-#/--progress-bar进度条显示当前的传送状态
(4)其他参数
1)其他参数-a/--append上传文件时,附加到目标文件--anyauth可以使用“任何”身份验证方法--basic使用HTTP基本验证-B/--use-ascii使用ASCII文本传输-d/--data HTTP POST方式传送数据--data-ascii 以ascii的方式post数据--data-binary 以二进制的方式post数据--negotiate使用HTTP身份验证--digest使用数字身份验证--disable-eprt禁止使用EPRT或LPRT--disable-epsv禁止使用EPSV--egd-file 为随机数据(SSL)设置EGD socket路径--tcp-nodelay使用TCP_NODELAY选项-E/--cert 客户端证书文件和密码 (SSL)--cert-type 证书文件类型 (DER/PEM/ENG) (SSL)--key 私钥文件名 (SSL)--key-type 私钥文件类型 (DER/PEM/ENG) (SSL)--pass私钥密码 (SSL)--engine 加密引擎使用 (SSL). "--engine list" for list--cacert CA证书 (SSL)--capath CA目 (made using c_rehash) to verify peer against (SSL)--ciphers SSL密码--compressed要求返回是压缩的形势 (using deflate or gzip)--connect-timeout 设置最大请求时间--create-dirs建立本地目录的目录层次结构--crlf上传是把LF转变成CRLF--ftp-create-dirs如果远程目录不存在,创建远程目录--ftp-method [multicwd/nocwd/singlecwd]控制CWD的使用--ftp-pasv使用 PASV/EPSV 代替端口--ftp-skip-pasv-ip使用PASV的时候,忽略该IP地址--ftp-ssl尝试用 SSL/TLS 来进行ftp数据传输--ftp-ssl-reqd要求用 SSL/TLS 来进行ftp数据传输-F/--form 模拟http表单提交数据-form-string 模拟http表单提交数据-g/--globoff禁用网址序列和范围使用{}和[]-G/--get以get的方式来发送数据-h/--help帮助-H/--header 自定义头信息传递给服务器--ignore-content-length忽略的HTTP头信息的长度-i/--include输出时包括protocol头信息-I/--head只显示文档信息-j/--junk-session-cookies读取文件时忽略session cookie--interface 使用指定网络接口/地址--krb4 使用指定安全级别的krb4-k/--insecure允许不使用证书到SSL站点-K/--config指定的配置文件读取-l/--list-only列出ftp目录下的文件名称--limit-rate 设置传输速度--local-port强制使用本地端口号-m/--max-time 设置最大传输时间--max-redirs 设置最大读取的目录数--max-filesize 设置最大下载的文件总量-M/--manual显示全手动-n/--netrc从netrc文件中读取用户名和密码--netrc-optional使用 .netrc 或者 URL来覆盖-n--ntlm使用 HTTP NTLM 身份验证-N/--no-buffer禁用缓冲输出-p/--proxytunnel使用HTTP代理--proxy-anyauth选择任一代理身份验证方法--proxy-basic在代理上使用基本身份验证--proxy-digest在代理上使用数字身份验证--proxy-ntlm在代理上使用ntlm身份验证-P/--ftp-port 使用端口地址,而不是使用PASV-Q/--quote 文件传输前,发送命令到服务器--range-file读取(SSL)的随机文件-R/--remote-time在本地生成文件时,保留远程文件时间--retry 传输出现问题时,重试的次数--retry-delay 传输出现问题时,设置重试间隔时间--retry-max-time 传输出现问题时,设置最大重试时间-S/--show-error显示错误--socks4 用socks4代理给定主机和端口--socks5 用socks5代理给定主机和端口-t/--telnet-option Telnet选项设置--trace 对指定文件进行debug--trace-ascii Like --跟踪但没有hex输出--trace-time跟踪/详细输出时,添加时间戳--url Spet URL to work with-U/--proxy-user 设置代理用户名和密码-V/--version显示版本信息-X/--request 指定什么命令-y/--speed-time放弃限速所要的时间。默认为30-Y/--speed-limit停止传输速度的限制,速度时间'秒-z/--time-cond传送时间设置-0/--http1.0使用HTTP 1.0-1/--tlsv1使用TLSv1(SSL)-2/--sslv2使用SSLv2的(SSL)-3/--sslv3使用的SSLv3(SSL)--3p-quotelike -Q for the source URL for 3rd party transfer--3p-url使用url,进行第三方传送--3p-user使用用户名和密码,进行第三方传送-4/--ipv4使用IP4-6/--ipv6使用IP6