3 min read

Kubernetes CD工具 -Argo CD 安裝

Argo CD遵循 GitOps 的原則,允許您使用 Git 存儲庫來管理和聲明 Kubernetes 集群的狀態 ,以下將紀錄安裝Argo 過程
Kubernetes CD工具 -Argo CD 安裝

Argo CD遵循 GitOps 的原則,允許您使用 Git 存儲庫來管理和聲明 Kubernetes 集群的狀態 ,以下將紀錄安裝Argo 過程

data : 2024/05/03

安裝環境 k8s V1.30

Argo 中文文檔

將依序分為

  1. 創建Argocd
    1. 關閉應用層強制HTTPS (可選)
  2. 訪問控制(二擇一)
    1. service 訪問
    2. ingress訪問
  3. 獲取密碼 並訪問argocd

1.創建argocd

以下指令將會創建一個 ns 以及安裝 argocd

# 創建ns
kubectl create namespace argocd 
# 創建secret 給 redis 使用
kubectl create secret generic argocd-redis --from-literal=auth=$(openssl rand -base64 32) -n argocd

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

若想直接先訪問看看 可以透過節點訪問

kubectl port-forward --address 0.0.0.0 service/argocd-server 8080:443 -n argocd

關閉應用層強制HTTPS (可選)

設置 server.insecure 參數允許http訪問

kubectl patch configmap argocd-cmd-params-cm -n argocd --patch '{"data":{"server.insecure":"true"}}'

重啟ArgoCD讓配置生效

kubectl rollout restart deployment argocd-server -n argocd

訪問控制

a. 透過service 訪問

安裝完成後 可以查詢是否有ip可以訪問 , 若無 EXTERNAL-IP 則需要編輯svc 綁定node ip

kubectl get svc argocd-server -n argocd -o wide
# 因為是argoCD 是安裝在master 節點上 所以需要指定master ip 才可訪問 
# externalIPs: 
#  - 10.211.55.52 
 
 
kubectl edit svc argocd-server -n argocd

b. 透過clb SSL訪問


apiVersion: networking.k8s.io/v1 
kind: Ingress 
metadata: 
  name: ingress-argocd 
  namespace: argocd
  annotations:
    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
  ingressClassName: nginx 
  rules: 
  - host: xxx.test.com
    http: 
      paths: 
      - path: / 
        pathType: Prefix
        backend: 
          service: 
            name: argocd-server 
            port: 
              name: https

c. 透過ingress 訪問 (如果有ssl憑證,設置在k8s內)

# 創建憑證 
 
kubectl create secret tls {urlTls} \ 
  --cert=/{path}/tls.crt \ 
  --key=/{path}/tls.key \ 
  --namespace argocd
apiVersion: networking.k8s.io/v1 
kind: Ingress 
metadata: 
  name: ingress-argocd 
  namespace: argocd 
spec:
  ingressClassName: nginx 
  rules: 
  - host: argo.150.5.143.196.nip.io
    http: 
      paths: 
      - path: / 
        pathType: Prefix 
        backend: 
          service: 
            name: argocd-server 
            port: 
              number: 80  # 使用 HTTP 端口
  # tls: 
  # - hosts: 
  #   - argo.150.5.143.196.nip.io 
  #   secretName: argocd-server-tls

獲取密碼 並訪問argocd

# 獲取Argoe CD 預設密碼 
# 預設帳號 admin 
 
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo