更多请看官方安装https://argoproj.github.io/argo-cd/getting_started/#port-forwarding
创建argocd命名空间
$ kubectl create namespace argocd
下载argocd
$ wget https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml -O argo-cd.yaml
高可用方案安装
https://raw.githubusercontent.com/argoproj/argo-cd/v1.4.1/manifests/ha/install.yaml
可以的小伙伴可以略过这步,在国内无法下载argocd 需要替换镜像地址。
替换镜像地址
$ sed -i -e 's?image: argoproj?image: dockerhub.azk8s.cn/argoproj?g' -e 's?quay.io?quay.azk8s.cn?g' -e 's?k8s.gcr.io?gcr.azk8s.cn/google-containers?g' argo-cd.yaml
查看是否替换
$ grep image: argo-cd.yaml
$ kubectl apply -n argocd -f argo-cd.yaml
Argo CD既运行gRPC服务器(由CLI使用),又运行HTTP / HTTPS服务器(由UI使用)。argocd-server服务对象在以下端口上公开了这两种协议:
具体看官方:https://argoproj.github.io/argo-cd/operator-manual/ingress/
Argo CD在同一端口(443)上提供多种协议(gRPC / HTTPS),这在尝试为argocd-service定义单个nginx入口对象和规则时提出了挑战,因为nginx.ingress.kubernetes.io/backend-protocol
注释 仅接受后端的单个值协议(例如HTTP,HTTPS,GRPC,GRPCS)。
带证书管理器的SSL传递的加密
cat > argocd-ingress.yaml <<-EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: argocd-server-ingress
namespace: argocd
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
# If you encounter a redirect loop or are getting a 307 response code
# then you need to force the nginx ingress to connect to the backend using HTTPS.
#
# nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
rules:
- host: argocd.example.com
http:
paths:
- backend:
serviceName: argocd-server
servicePort: https
path: /
tls:
- hosts:
- argocd.example.com
secretName: argocd-secret # 请勿更改,这是由Argo CD提供的
EOF
#运行
$ kubectl apply -f argocd-ingress.yaml
在nginx-ingress-controller增加--enable-ssl-passthrough
$ kubectl edit DaemonSet/nginx-ingress-controller -n ingress-nginx
###
containers:
- args:
- /nginx-ingress-controller
- --configmap=$(POD_NAMESPACE)/nginx-configuration
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
- --udp-services-configmap=$(POD_NAMESPACE)/udp-services
- --publish-service=$(POD_NAMESPACE)/ingress-nginx
- --annotations-prefix=nginx.ingress.kubernetes.io
- --enable-ssl-passthrough #在args追加
env:
...
然后直接访问https://argocd.example.com
由于ingress-nginx Ingress每个Ingress对象仅支持单个协议,因此另一种方法是定义两个Ingress对象。一个用于HTTP / HTTPS,另一个用于gRPC:
HTTP / HTTPS入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: argocd-server-http-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
rules:
- http:
paths:
- backend:
serviceName: argocd-server
servicePort: http
host: argocd.example.com
tls:
- hosts:
- argocd.example.com
secretName: argocd-secret # do not change, this is provided by Argo CD
gRPC入口:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: argocd-server-grpc-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
spec:
rules:
- http:
paths:
- backend:
serviceName: argocd-server
servicePort: https
host: grpc.argocd.example.com
tls:
- hosts:
- grpc.argocd.example.com
secretName: argocd-secret # do not change, this is provided by Argo CD
编辑argocd-server
deployment以将--insecure
标志添加 到argocd-server命令:
spec:
template:
spec:
name: argocd-server
containers:
- command:
- /argocd-server
- --staticassets
- /shared/app
- --repo-server
- argocd-repo-server:8081
- --insecure #追加
更多暴露方式查看官方
以上两种暴露方式都可以
https://argocd.example.com
用户名是admin
密码是árgocd-server的pod name
$ kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
argocd-server-7df76c4c8c-msgpm
从 https://github.com/argoproj/argo-cd/releases/latest下载Argo CD工具
$ VERSION=$(curl --silent "https://api.github.com/repos/argoproj/argo-cd/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
将VERSION
下面的命令替换为您要下载的Argo CD的版本:
$curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/$VERSION/argocd-linux-amd64
使argocd
CLI可执行:
$ chmod +x /usr/local/bin/argocd
现在,您应该可以运行argocd
命令了。
$ brew tap argoproj/tap
$ brew install argoproj/tap/argocd
可以参考:https://argoproj.github.io/argo-cd/cli_installation/
默认情况下,Argo CD API服务器未使用外部IP公开。要访问API服务器,请选择以下技术之一以公开Argo CD API服务器:
将argocd-server服务类型更改为LoadBalancer
:
$ kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
or
端口转发
Kubectl端口转发也可以用于连接到API服务器而无需公开服务。
$ kubectl port-forward svc/argocd-server -n argocd --address 0.0.0.0 8080:443
注意:我们上面已经配置ingress 方式暴露Argocd ,我们可以不用这个端口转发的方式用上面配置的ingress也是可以的。
初始密码将自动生成为Argo CD API服务器的容器名称。可以使用以下命令进行检索:
$ kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2
argocd-server-7df76c4c8c-msgpm
使用上面的用户名admin
和密码,登录到Argo CD的IP或主机名:
argocd login
使用以下命令更改密码:
argocd account update-password
这里我们直接在端口转发的方式在master节点进行登录
# 端口转发方式登录
$ argocd login localhost:8080
WARNING: server certificate had error: x509: certificate signed by unknown authority. Proceed insecurely (y/n)? y
Username: admin
Password:
'admin' logged in successfully
Context 'localhost:8080' updated
# 修改密码
$ argocd account update-password
*** Enter current password:
*** Enter new password:
*** Confirm new password:
Password updated
Context 'localhost:8080' updated
OR
Ingress 的IP登录
$ argocd login 'Ingress地址'
Argocd可以实现多集群部署管理
如果要在Argo CD群集外部的群集上部署应用程序,则需要使用Argo CD注册应用程序群集的凭据。
此步骤将群集的凭据注册到Argo CD,仅在部署到外部群集时才需要。在内部进行部署(到与Argo CD运行所在的群集)时,应将https://kubernetes.default.svc用作应用程序的K8s API服务器地址。
首先列出当前kubconfig中的所有集群上下文:
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
* docker-for-desktop kubernetes kubernetes-admin
列表中选择一个上下文名称,并将其提供给argocd cluster add CONTEXTNAME
。例如,对于docker-for-desktop上下文,运行:
$ argocd cluster add docker-for-desktop
上面的命令将ServiceAccount(argocd-manager
)安装到该kubectl上下文的kube-system命名空间中,并将该服务帐户绑定到管理员级别的ClusterRole。Argo CD使用此服务帐户令牌执行其管理任务(即,部署/监视)。
该规则的
argocd-manager-role
作用可以被修改,使得它只有create
,update
,patch
,delete
特权一组有限的名称空间,组,种。但是get
,在群集作用域中list
,watch
特权需要Argo CD才能运行。
如果有兴趣了解ArgoCD,请继续关注ArgoCD 剩余连载文章,谢谢。
请看下篇Argocd部署应用