[Gitops--2]Argocd和Gitlab-runner安装配置

ArgoCd
Argo是一组k8s原生工具集,用于运行和管理k8s上的作业和应用程序.Argo提供了一种在k8s上创建工作和应用的三种计算模式:服务模式,工作流模式和基于事件模式.所有的Argo工具都实现为了创建控制器和自定义资源.

为什么选ArgoCD

应用程序的定义,配置和环境都应该是声明性的,并授权版本控制.应用程序部署和生命周期管理应该是自动化的,可审计的,易于理解的.

1. 安装ArgoCd
1.1 创建命名空间

kubectl create ns argocd

1.2 修改安装文件

wget https://raw.githubusercontent.com/argoproj/argo-cd/v2.4.11/manifests/install.yaml
vi install.yaml
## 略
      containers:
      - command:
        - argocd-server
        ## 追加这行
        - --insecure
        env:
        - name: ARGOCD_SERVER_INSECURE

创建资源

kubectl apply -f install.yaml -n argocd

确认服务正常

root@master-01:/opt/argocd# kubectl get pods,svc -n argocd
NAME                                                    READY   STATUS    RESTARTS   AGE
pod/argocd-application-controller-0                     1/1     Running   0          2m3s
pod/argocd-applicationset-controller-78b8b554f9-7d6xn   1/1     Running   0          2m3s
pod/argocd-dex-server-86947f7b-t8447                    1/1     Running   1          2m3s
pod/argocd-notifications-controller-775d9954cb-922wb    1/1     Running   0          2m3s
pod/argocd-redis-599b855497-tmqn8                       1/1     Running   0          2m3s
pod/argocd-repo-server-54785f99fd-k956p                 1/1     Running   0          2m3s
pod/argocd-server-d7b97c76d-cwgrb                       1/1     Running   0          2m3s

NAME                                              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
service/argocd-applicationset-controller          ClusterIP   10.200.31.42     <none>        7000/TCP,8080/TCP            2m3s
service/argocd-dex-server                         ClusterIP   10.200.102.68    <none>        5556/TCP,5557/TCP,5558/TCP   2m3s
service/argocd-metrics                            ClusterIP   10.200.191.92    <none>        8082/TCP                     2m3s
service/argocd-notifications-controller-metrics   ClusterIP   10.200.149.16    <none>        9001/TCP                     2m3s
service/argocd-redis                              ClusterIP   10.200.150.231   <none>        6379/TCP                     2m3s
service/argocd-repo-server                        ClusterIP   10.200.122.178   <none>        8081/TCP,8084/TCP            2m3s
service/argocd-server                             ClusterIP   10.200.164.173   <none>        80/TCP,443/TCP               2m3s
service/argocd-server-metrics                     ClusterIP   10.200.133.227   <none>        8083/TCP                     2m3s

1.3 创建ingress

ingress-argocd.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: argocd-ingress
  namespace: argocd
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: argocd.intra.com
    http:
      paths:
      - path: "/"
        pathType: Prefix
        backend:
          service:
            name: argocd-server
            port:
              number: 80

创建ingress

kubectl apply -f ingress-argocd.yaml -n argocd

当ingress正常后,添加hosts进行解析或者配置dns

# kubectl get ingress -n argocd
NAME             CLASS    HOSTS              ADDRESS         PORTS   AGE
argocd-ingress   <none>   argocd.intra.com   192.168.31.52   80      103s
# kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.200.77.80   192.168.31.230   80:30363/TCP,443:30914/TCP   5h14m
ingress-nginx-controller-admission   ClusterIP      10.200.42.99   <none>           443/TCP                      105d

hosts中追加

192.168.31.230 argocd.intra.com

1.4 获取登录密码

kubectl get secret -n argocd argocd-initial-admin-secret -o yaml

获取到password为:

MG5vdnVtY05MR1V4d2xxVw==

解密

echo MG5vdnVtY05MR1V4d2xxVw==|base64 -d

结果为

0novumcNLGUxwlqW

默认用户名为admin,密码就是刚才解密出来的

2. 下载argocd客户端

wget https://github.com/argoproj/argo-cd/releases/download/v2.4.11/argocd-linux-amd64
chmod +x argocd-linux-amd64
mv argocd-linux-amd64 /usr/local/bin/argocd

查看版本

argocd version
argocd: v2.4.11+3d9e9f2
  BuildDate: 2022-08-22T09:35:38Z
  GitCommit: 3d9e9f2f95b7801b90377ecfc4073e5f0f07205b
  GitTreeState: clean
  GoVersion: go1.18.5
  Compiler: gc
  Platform: linux/amd64
FATA[0000] Argo CD server address unspecified

3. 登录Argocd

3.1 域名解析

192.168.31.230 argocd.intra.com
argocd login argocd.intra.com

3.2 更新密码

argocd account update-password

4. Kustomize安装
当开发者push代码以后,gitlab-runner会在gitlab-ce服务器执行流水线里定义具体的操作,流水线步骤里定义了gitlab-runner通过kustomize客户端工具修改应用部署资源清单文件里的容器镜像版本,并重新push代码到代码仓库,所以需要在gitlab-ce服务器中安装Kustomize
 

wget https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2Fv4.5.7/kustomize_v4.5.7_linux_amd64.tar.gz
tar xf kustomize_v4.5.7_linux_amd64.tar.gz
mv kustomize /usr/bin/

确认版本

# kustomize version
{Version:kustomize/v4.5.7 GitCommit:56d82a8378dfc8dc3b3b1085e5a6e67b82966bd7 BuildDate:2022-08-02T16:35:54Z GoOs:linux GoArch:amd64}

5. Gitlab runner安装

Gitlab Runner是一个开源项目,用于运行作业并将结果发送给Gitlab,他与Gitlab CI一起使用,Gitlab CI是Gitlab的持续集成服务,用于协调作业.相当于流水线工人.

5.1 创建组

选择创建组

5.2 创建项目

5.3 安装runnner

在gitlab服务器上操作

wget https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64 -O /usr/bin/gitlab-runner
chmod +x /usr/bin/gitlan-runner

5.4 配置gitlab-runner

创建gitlab-runner用户

useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash

配置工作目录

gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner

启动gitlab-runner

gitlab-runner start

查看gitlab-runner状态

root@gitlab-ce:~# ps -aux |grep gitlab-runner
root     102988  0.0  1.0 765700 42680 ?        Ssl  04:32   0:00 /usr/bin/gitlab-runner run --working-directory /home/gitlab-runner --config /etc/gitlab-runner/config.toml --service gitlab-runner --user gitlab-runner
root     103030  0.0  0.0  13140  1060 pts/2    S+   04:33   0:00 grep --color=auto gitlab-runner

5.4 添加gitlab-runner实例

gitlab-runner register

依次填入
- url(来自上图)
- token(上图)
- 项目名称
- 执行方式

调整配置文件

cat /etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "apidemo"
  url = "http://192.168.31.14/"
  id = 1
  token = "EZwQzJkSVhCcBEXUU4Ds"
  token_obtained_at = 2023-03-29T04:37:36Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "shell"
  [runners.custom_build_dir]
  ## 添加这行来固定日志文件位置
    enabled=true
  [runners.cache]
    MaxUploadedArchiveSize = 0

5.5 启动gitlab-runner

gitlab-runner run &
  • 1

输出

arch=amd64 os=linux pid=103251 revision=456e3482 version=15.10.0
Starting multi-runner from /etc/gitlab-runner/config.toml...  builds=0
Running in system-mode.

Configuration loaded                                builds=0
listen_address not defined, metrics & debug endpoints disabled  builds=0
[session_server].listen_address not defined, session endpoints disabled  builds=0
Initializing executor providers                     builds=0

5.6 gitlab-runner Docker配置

授权gitlab-runner用户使用docker

usermod -G docker gitlab-runner
# id gitlab-runner
uid=1001(gitlab-runner) gid=1001(gitlab-runner) groups=1001(gitlab-runner),994(docker)

5.7 项目配置gitlab-runner

去掉 □ Lock to current projects的选中

至此argocd和gitlab-runner安装配置完毕

<think>嗯,用户问的是关于GitLab RunnerArgoCD的环境搭建,以及如何发布一个Deployment的Pod到Kubernetes集群里。我得先理清楚这两个工具的作用他们之间的关系。GitLab Runner主要是用来执行CI/CD管道的,比如构建、测试应用,而ArgoCD则是用于持续部署,把应用同步到K8s集群中。所以用户可能想了解如何将这两者结合起来,实现从代码提交到自动部署的完整流程。 首先,用户的第一个要求是安装及登录使用GitLab Runner。我需要回忆下安装步骤,通常是在K8s集群里通过Helm或者直接运行一个Docker容器来安装。可能得提到注册RunnerGitLab的步骤,需要URLtoken这些信息。然后是安装ArgoCD,通常可以用kubectl apply或者Helm来安装安装后如何暴露服务,比如用port-forward或者Ingress,然后获取初始密码登录。 第二个部分是安装ArgoCD,这里需要确保用户已经有一个运行中的K8s集群,并且kubectl配置正确。可能还要提到如何验证ArgoCD是否安装成功,比如检查Pod状态。安装完成后,访问UI的方法,可能需要port-forward到本地端口,然后使用admin账户初始密码登录,或者修改密码。 第三个部分,发布一个Deployment的Pod。这里需要用户编写一个简单的Deployment YAML文件,然后通过ArgoCD来同步。或者可能用户希望从GitLab CI/CD流程中触发ArgoCD的部署,这时候可能需要说明如何配置GitLab Runner的CI文件,在构建镜像后,更新K8s的manifest仓库,ArgoCD检测到变更后自动部署。 必须完成的是在K8s内发布Pod,所以重点要放在如何通过ArgoCD正确部署应用。可能需要分步骤,比如创建应用仓库,配置ArgoCD应用,同步,检查状态。也可能需要示例YAML文件,比如一个简单的nginx DeploymentService。 还要注意用户可能的背景,可能已经熟悉K8s基础,但需要具体的操作步骤。可能需要强调权限问题,比如ArgoCD需要有足够的权限来部署资源,可能需要设置RBAC。另外,GitLab Runner的注册过程可能需要指定executor,比如docker或kubernetes,根据环境选择合适的选项。 用户的需求是明确的,但可能需要更详细的步骤,比如具体的命令,如何获取ArgoCD的初始密码,如何通过CLI或者UI创建应用。另外,可能要考虑版本兼容性,比如不同版本的ArgoCDGitLab Runner的差异,但用户没有指定版本,可能需要默认使用最新的稳定版。 最后,确保步骤正确,并且用户能够按照指引完成部署。可能需要检查是否有遗漏的步骤,比如安装前的依赖,或者网络策略的问题,比如ArgoCD需要访问Git仓库,可能需要配置SSH密钥或HTTPS访问权限。</think>以下为 GitLab-RunnerArgoCD 在 Kubernetes 环境中的整合使用指南,分为三部分完成: --- ### **1. GitLab-Runner 安装与使用** #### **安装** ```bash # 使用 Helm 快速安装(需提前配置 Helm) helm repo add gitlab https://charts.gitlab.io helm install gitlab-runner gitlab/gitlab-runner \ --set gitlabUrl=https://gitlab.com/ \ --set runnerRegistrationToken=YOUR_REGISTRATION_TOKEN \ --set rbac.create=true ``` #### **登录验证** -GitLab 项目页面的 `Settings -> CI/CD -> Runners` 中查看 Runner 是否在线。 --- ### **2. ArgoCD 安装配置** #### **安装** ```bash kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml ``` #### **访问 ArgoCD** ```bash # 端口转发临时访问 kubectl port-forward svc/argocd-server -n argocd 8080:443 # 获取初始管理员密码 kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d ``` - 浏览器访问 `https://localhost:8080`,用户名 `admin`,密码为上述命令输出。 --- ### **3. 发布 Deployment Pod** #### **示例应用仓库** 创建 Git 仓库(如 GitLab 仓库),包含以下文件 `myapp.yaml`: ```yaml # myapp.yaml apiVersion: apps/v1 kind: Deployment metadata: name: myapp spec: replicas: 1 selector: matchLabels: app: myapp template: metadata: labels: app: myapp spec: containers: - name: nginx image: nginx:alpine ports: - containerPort: 80 ``` #### **通过 ArgoCD 部署** 1. **在 ArgoCD 中创建应用** ```bash argocd app create myapp \ --repo https://gitlab.com/your-username/your-repo.git \ --path . \ --dest-server https://kubernetes.default.svc \ --dest-namespace default ``` 2. **手动触发同步** ```bash argocd app sync myapp ``` 3. **验证发布结果** ```bash kubectl get pods -l app=myapp ``` --- ### **整合 GitLab CI/CD 流程** 在 GitLab 项目的 `.gitlab-ci.yml` 中添加自动化流程: ```yaml stages: - deploy deploy_to_k8s: stage: deploy script: - echo "更新 Kubernetes 配置仓库(触发 ArgoCD 自动同步)" - git clone https://gitlab.com/your-username/your-repo.git - cd your-repo - sed -i "s/image: nginx:alpine/image: nginx:latest/" myapp.yaml - git commit -am "Update image to latest" - git push origin main only: - main ``` --- ### **关键点总结** 1. **GitLab-Runner**:负责 CI 阶段(构建、测试、推送镜像)。 2. **ArgoCD**:监听 Git 仓库变化,自动同步应用到 Kubernetes。 3. **K8s 发布**:通过声明式 YAML + GitOps 实现版本可控的部署。 遇到具体问题可进一步提供环境细节(如集群类型、版本)以针对性调试。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值