zoukankan      html  css  js  c++  java
  • Linkerd 2.10(Step by Step)—将 GitOps 与 Linkerd 和 Argo CD 结合使用

    Linkerd 2.10 系列

    Linkerd 2.10 中文手册持续修正更新中:

    GitOps 是一种使用 Git 作为单一事实来源自动管理和交付 Kubernetes 基础设施和应用程序的方法。
    它通常利用一些软件代理来检测和协调 Git 中受版本控制的工件与集群中运行的工件之间的任何差异。

    本指南将向您展示如何设置
    Argo CD
    以使用 GitOps 工作流程管理 Linkerd 的安装和升级。

    具体来说,本指南提供了有关如何使用
    Sealed Secrets
    cert-manager
    安全地生成和管理 Linkerd 的 mTLS 私钥和证书的说明。
    它还将向您展示如何将 auto proxy injection
    功能集成到您的工作流程中。
    最后,本指南总结了遵循 GitOps 工作流程将 Linkerd 升级到更新版本的步骤。

    本指南中使用的软件和工具仅用于演示目的。随意选择最适合您要求的其他产品。

    您需要按照下一部分中定义的步骤将这个
    example repository
    克隆到您的本地机器并复制到您的 Kubernetes 集群中。

    设置存储库

    将示例存储库克隆到本地计算机:

    git clone https://github.com/linkerd/linkerd-examples.git
    

    这个存储库将用于演示 Git 操作,如本指南后面的 addcommitpush

    向存储库添加一个新的远程端点以指向集群内 Git 服务器,这将在下一节中设置:

    cd linkerd-examples
    
    git remote add git-server git://localhost/linkerd-examples.git
    

    为了简化本指南中的步骤,我们将通过端口转发与集群内 Git 服务器进行交互。
    因此,我们刚刚创建的远程端点以您的 localhost 为目标。

    将 Git 服务器部署到集群中的 scm 命名空间:

    kubectl apply -f gitops/resources/git-server.yaml
    

    在本指南的后面,Argo CD 将被配置为监视此 Git 服务器托管的存储库。

    该 Git 服务器被配置为通过 git 协议作为
    daemon
    运行,对 Git 数据进行未经身份验证的访问。不建议将此设置用于生产用途。

    确认 Git 服务器健康:

    kubectl -n scm rollout status deploy/git-server
    

    将示例存储库克隆到集群内 Git 服务器:

    git_server=`kubectl -n scm get po -l app=git-server -oname | awk -F/ '{ print $2 }'`
    
    kubectl -n scm exec "${git_server}" -- 
      git clone --bare https://github.com/linkerd/linkerd-examples.git
    

    确认远程仓库克隆成功:

    kubectl -n scm exec "${git_server}" -- ls -al /git/linkerd-examples.git
    

    确认您可以通过端口转发从本地存储库推送到远程存储库:

    kubectl -n scm port-forward "${git_server}" 9418  &
    
    git push git-server master
    

    部署 Argo CD

    安装 Argo CD:

    kubectl create ns argocd
    
    kubectl -n argocd apply -f 
      https://raw.githubusercontent.com/argoproj/argo-cd/v1.6.1/manifests/install.yaml
    

    确认所有 Pod 都准备好了:

    for deploy in "application-controller" "dex-server" "redis" "repo-server" "server"; 
      do kubectl -n argocd rollout status deploy/argocd-${deploy}; 
    done
    

    使用 port-forward 访问 Argo CD 仪表板:

    kubectl -n argocd port-forward svc/argocd-server 8080:443  
      > /dev/null 2>&1 &
    

    现在可以通过
    https://localhost:8080
    使用默认的 admin 用户名和
    password
    访问 Argo CD 仪表板。

    默认管理员密码是自动生成的 Argo CD API 服务器 pod 名称。
    您可以使用 argocd account update-password 命令来更改它。

    验证 Argo CD CLI:

    argocd_server=`kubectl -n argocd get pods -l app.kubernetes.io/name=argocd-server -o name | cut -d'/' -f 2`
    
    argocd login 127.0.0.1:8080 
      --username=admin 
      --password="${argocd_server}" 
      --insecure
    

    配置项目访问和权限

    设置 demo
    project
    以对我们的
    applications
    进行分组:

    kubectl apply -f gitops/project.yaml
    

    该项目定义了我们的应用程序可以使用的允许资源种类和目标集群的列表。

    确认项目部署正确:

    argocd proj get demo
    

    在仪表板上:

    部署应用程序

    部署作为所有其他应用程序的 "parent" 应用程序的 main 应用程序:

    kubectl apply -f gitops/main.yaml
    

    "app of apps" 模式通常用于 Argo CD 工作流程来引导应用程序。
    有关更多
    信息
    请参阅 Argo CD 文档。

    确认 main 应用程序部署成功:

    argocd app get main
    

    同步 main 应用程序:

    argocd app sync main
    

    请注意,只有 main 应用程序是同步的。

    接下来,我们将单独同步其余的应用程序。

    部署 cert-manager

    同步 cert-manager 应用程序:

    argocd app sync cert-manager
    

    由于 cert-manager 0.16.0 和 kubectl <1.19 以及 Argo CD 使用的 Helm 3.2 存在问题,
    本指南使用 cert-manager 0.15.0。
    请参阅
    此处
    的升级说明。

    确认 cert-manager 正在运行:

    for deploy in "cert-manager" "cert-manager-cainjector" "cert-manager-webhook"; 
      do kubectl -n cert-manager rollout status deploy/${deploy}; 
    done
    

    部署 Sealed Secrets

    同步 sealed-secrets 应用程序:

    argocd app sync sealed-secrets
    

    确认 sealed-secrets 正在运行:

    kubectl -n kube-system rollout status deploy/sealed-secrets
    

    创建 mTLS trust anchor

    在继续部署 Linkerd 之前,我们需要创建 mTLS 信任锚。
    然后我们还将设置 linkerd-bootstrap 应用程序来管理信任锚证书。

    创建新的 mTLS 信任锚私钥和证书:

    step certificate create root.linkerd.cluster.local sample-trust.crt sample-trust.key 
      --profile root-ca 
      --no-password 
      --not-after 43800h 
      --insecure
    

    确认新信任锚的详细信息(加密算法、到期日期、SAN 等):

    step certificate inspect sample-trust.crt
    

    创建一个 SealedSecret 资源来存储加密的信任锚:

    kubectl -n linkerd create secret tls linkerd-trust-anchor 
      --cert sample-trust.crt 
      --key sample-trust.key 
      --dry-run=client -oyaml | 
    kubeseal --controller-name=sealed-secrets -oyaml - | 
    kubectl patch -f - 
      -p '{"spec": {"template": {"type":"kubernetes.io/tls", "metadata": {"labels": {"linkerd.io/control-plane-component":"identity", "linkerd.io/control-plane-ns":"linkerd"}, "annotations": {"linkerd.io/created-by":"linkerd/cli stable-2.8.1", "linkerd.io/identity-issuer-expiry":"2021-07-19T20:51:01Z"}}}}}' 
      --dry-run=client 
      --type=merge 
      --local -oyaml > gitops/resources/linkerd/trust-anchor.yaml
    

    这将覆盖本地 gitops/resources/linkerd/trust-anchor.yaml 文件中
    现有的 SealedSecret 资源。我们会将此更改推送到集群内 Git 服务器。

    确认只更改了 spec.encryptedData

    git diff gitops/resources/linkerd/trust-anchor.yaml
    

    提交并将新的信任锚 secret 推送到您的集群内 Git 服务器:

    git add gitops/resources/linkerd/trust-anchor.yaml
    
    git commit -m "update encrypted trust anchor"
    
    git push git-server master
    

    确认提交成功推送:

    kubectl -n scm exec "${git_server}" -- git --git-dir linkerd-examples.git log -1
    

    部署 linkerd-bootstrap

    同步 linkerd-bootstrap 应用程序:

    argocd app sync linkerd-bootstrap
    

    如果颁发者和证书资源出现降级状态,则 SealedSecrets 控制器可能无法解密 sealed 的
    linkerd-trust-anchor secret。
    检查 SealedSecrets 控制器以获取错误日志。

    出于调试目的,可以使用
    kubectl -n linkerd get sealedsecrets linkerd-trust-anchor -oyaml 命令
    检索 sealed resource。
    确保此资源与您之前推送到集群内 Git 服务器
    gitops/resources/linkerd/trust-anchor.yaml 文件匹配。

    SealedSecrets 应该已经创建了一个包含解密信任锚的 secret。从 secret 中检索解密的信任锚:

    trust_anchor=`kubectl -n linkerd get secret linkerd-trust-anchor -ojsonpath="{.data['tls.crt']}" | base64 -d -w 0 -`
    

    确认它与您之前在本地 sample-trust.crt 文件中创建的解密信任锚证书匹配:

    diff -b 
      <(echo "${trust_anchor}" | step certificate inspect -) 
      <(step certificate inspect sample-trust.crt)
    

    部署 Linkerd

    现在我们准备安装 Linkerd。我们刚刚检索到的解密信任锚
    将使用 identityTrustAnchorsPEM 参数传递给安装过程。

    在安装 Linkerd 之前,请注意 gloval.identityTrustAnchorsPEM 参数设置
    为 "empty" 证书字符串:

    argocd app get linkerd -ojson | 
      jq -r '.spec.source.helm.parameters[] | select(.name == "identityTrustAnchorsPEM") | .value'
    

    我们将在 linkerd 应用程序中使用 ${trust_anchor} 的值覆盖此参数。

    在你的本地 gitops/argo-apps/linkerd.yaml 文件中找到 identityTrustAnchorsPEM 变量,
    并将其 value 设置为 ${trust_anchor} 的值。

    确保多行字符串缩进正确。例如。,

      source:
        chart: linkerd2
        repoURL: https://helm.linkerd.io/stable
        targetRevision: 2.8.0
        helm:
          parameters:
          - name: identityTrustAnchorsPEM
            value: |
              -----BEGIN CERTIFICATE-----
              MIIBlTCCATygAwIBAgIRAKQr9ASqULvXDeyWpY1LJUQwCgYIKoZIzj0EAwIwKTEn
              MCUGA1UEAxMeaWRlbnRpdHkubGlua2VyZC5jbHVzdGVyLmxvY2FsMB4XDTIwMDkx
              ODIwMTAxMFoXDTI1MDkxNzIwMTAxMFowKTEnMCUGA1UEAxMeaWRlbnRpdHkubGlu
              a2VyZC5jbHVzdGVyLmxvY2FsMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+PUp
              IR74PsU+geheoyseycyquYyes5eeksIb5FDm8ptOXQ2xPcBpvesZkj6uIyS3k4qV
              E0S9VtMmHNeycL7446NFMEMwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYB
              Af8CAQEwHQYDVR0OBBYEFHypCh7hiSLNxsKhMylQgqD9t7NNMAoGCCqGSM49BAMC
              A0cAMEQCIEWhI86bXWEd4wKTnG07hBfBuVCT0bxopaYnn3wRFx7UAiAwXyh5uaVg
              MwCC5xL+PM+bm3PRqtrmI6TocWH07GbMxg==
              -----END CERTIFICATE-----
    

    确认只更改了一个 spec.source.helm.parameters.value 字段:

    git diff gitops/argo-apps/linkerd.yaml
    

    提交并将更改推送到 Git 服务器:

    git add gitops/argo-apps/linkerd.yaml
    
    git commit -m "set identityTrustAnchorsPEM parameter"
    
    git push git-server master
    

    同步 main 应用程序:

    argocd app sync main
    

    确认新的信任锚被 linkerd 应用程序选中:

    argocd app get linkerd -ojson | 
      jq -r '.spec.source.helm.parameters[] | select(.name == "identityTrustAnchorsPEM") | .value'
    

    同步 linkerd 应用程序:

    argocd app sync linkerd
    

    检查 Linkerd 是否准备就绪:

    linkerd check
    

    用 emojivoto 测试

    部署 emojivoto 来测试自动代理注入:

    argocd app sync emojivoto
    

    检查应用程序是否健康:

    for deploy in "emoji" "vote-bot" "voting" "web" ; 
      do kubectl -n emojivoto rollout status deploy/${deploy}; 
    done
    

    将 Linkerd 升级到 2.8.1

    使用您的编辑器将 gitops/argo-apps/linkerd.yaml 文件中
    spec.source.targetRevision 字段更改为 2.8.1

    确认只更改了 targetRevision 字段:

    git diff gitops/argo-apps/linkerd.yaml
    

    提交并将此更改推送到 Git 服务器:

    git add gitops/argo-apps/linkerd.yaml
    
    git commit -m "upgrade Linkerd to 2.8.1"
    
    git push git-server master
    

    同步 main 应用程序:

    argocd app sync main
    

    同步 linkerd 应用程序:

    argocd app sync linkerd
    

    确认升级成功完成:

    linkerd check
    

    确认控制平面的新版本:

    linkerd version
    

    清理

    所有应用程序都可以通过删除 main 应用程序来删除:

    argocd app delete main --cascade=true
    
  • 相关阅读:
    Windows配置深度学习环境详细教程(二):conda工具的使用
    Windows配置深度学习环境详细教程(一):安装Pycharm和Miniconda
    性能基准DevOps之如何提升脚本执行效率
    【Go语言绘图】图片添加文字(二)
    Cesium中用到的图形技术——Computing the horizon occlusion point
    Cesium中用到的图形技术——Horizon Culling
    Unity3D学习笔记3——Unity Shader的初步使用
    C++:异常处理
    mysql数据库备份
    编程小工具
  • 原文地址:https://www.cnblogs.com/hacker-linner/p/14917253.html
Copyright © 2011-2022 走看看