背景介绍

由于Datakit DaemonSet 配置管理非常复杂,此篇文章将介绍配置管理最佳实践。
本篇将描述2种不同部署的方式的配置方法,Helm 部署配置最佳实践启用git 部署配置最佳实践

Helm 部署配置最佳实践

前提条件

  • Kubernetes >= 1.14
  • Helm >= 2.17.0

配置监控Mysql和Pipeline 文件

添加helm 仓库

  1. helm add repo dataflux https://pubrepo.guance.com/chartrepo/datakit

查看datakit 版本

  1. helm search repo datakit
  2. NAME CHART VERSION APP VERSION DESCRIPTION
  3. dataflux/datakit 1.2.10 1.2.10 Chart for the DaemonSet datakit

下载helm 包

  1. helm repo update
  2. helm pull dataflux/datakit --untar

image.png

修改value配置

修改 datakit/values.yaml 的
注意yaml 格式,dataway_url 和dkconfig 都要改
values.yaml 可以用于下次升级使用

  1. dataway_url: https://openway.guance.com?token=<your-token>
  2. ...
  3. dkconfig:
  4. - path: "/usr/local/datakit/conf.d/db/mysql.conf"
  5. name: mysql.conf
  6. value: |
  7. # {"version": "1.1.9-rc7.1", "desc": "do NOT edit this line"}
  8. [[inputs.mysql]]
  9. host = "192.168.0.3"
  10. user = "root"
  11. pass = "S6QgMvrer2!8xvMD"
  12. port = 3306
  13. interval = "10s"
  14. innodb = true
  15. tables = []
  16. users = []
  17. [inputs.mysql.dbm_metric]
  18. enabled = true
  19. ## 监控采样配置
  20. [inputs.mysql.dbm_sample]
  21. enabled = true
  22. [inputs.mysql.tags]
  23. # some_tag = "some_value"
  24. # more_tag = "some_other_value"
  25. - path: "/usr/local/datakit/pipeline/java.p"
  26. name: java.p
  27. value: |
  28. json(_, recorder, 'recorder')
  29. if recorder == "gunicorn" {
  30. drop_key(func_name)
  31. json(_, func_name, 'func_name')
  32. json(_, remote_addr, 'remote_addr')
  33. json(_, time_local, 'time_local')
  34. json(_, time_unix, 'time_unix')
  35. json(_, level, 'level')
  36. json(_, method, 'method')
  37. json(_, path, 'path')
  38. json(_, cost_time, 'cost_time')
  39. json(_, res_status, 'res_status')
  40. json(_, res_length, 'res_length')
  41. json(_, trace_id, 'trace_id')
  42. add_key(__type, "gunicorn")
  43. }
  44. if recorder == "Forethought" {
  45. json(_, source, 'resource')
  46. json(_, app, 'app')
  47. json(_, level, 'level')
  48. json(_, cc_timestamp, 'cc_timestamp')
  49. json(_, name, 'name')
  50. json(_, log_time, 'log_time')
  51. json(_, message, 'remessage')
  52. json(_, trace_id, 'trace_id')
  53. add_key(__type, "Forethought")
  54. }
  55. lowercase(level)
  56. group_in(level, ["error", "panic", "dpanic", "fatal"], "error", status)
  57. group_in(level, ["info", "debug"], "info", status)
  58. group_in(level, ["warn", "warning"], "warning", status)

安装或升级DataKit

  1. cd datakit
  2. helm repo update
  3. helm install my-datakit dataflux/datakit -f values.yaml -n datakit --create-namespace \
  4. --set image.tag=1.2.11
  1. helm repo update
  2. helm upgrade my-datakit . -n datakit -f values.yaml --set image.tag=1.2.11
  3. Release "datakit" has been upgraded. Happy Helming!
  4. NAME: datakit
  5. LAST DEPLOYED: Sat Apr 2 15:33:55 2022
  6. NAMESPACE: datakit
  7. STATUS: deployed
  8. REVISION: 10
  9. NOTES:
  10. 1. Get the application URL by running these commands:
  11. export POD_NAME=$(kubectl get pods --namespace datakit -l "app.kubernetes.io/name=datakit,app.kubernetes.io/instance=datakit" -o jsonpath="{.items[0].metadata.name}")
  12. export CONTAINER_PORT=$(kubectl get pod --namespace datakit $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
  13. echo "Visit http://127.0.0.1:8080 to use your application"
  14. kubectl --namespace datakit port-forward $POD_NAME 8080:$CONTAINER_PORT

查看是否部署成功

  1. helm list -n datakit
  2. kubectl get pods -n datakit


启用git 部署配置最佳实践

Datakit启用git管理

前提条件

  • 已经准备git 仓库
  • 目录结构为:
    1. ├── README.md
    2. ├── conf.d
    3. ├── container.conf
    4. └── net_ebpf.conf
    5. └── pipeline
    6. ├── corestone.p
    7. ├── kodo.p
    8. ├── nsqd.p
    9. ├── py-forethought-core.p
    10. └── py.p
    image.png

helm 启用git 部署

注意:启用git 管理配置,则configmap 将失效,default_enabled_inputs不会影响

  • 使用密码管理git

需要修改dataway_url,git_repos.git_url,

  1. helm add repo dataflux https://pubrepo.guance.com/chartrepo/datakit
  2. helm repo update
  3. helm install my-datakit dataflux/datakit -n datakit --set dataway_url="https://openway.guance.com?token=<your-token>" \
  4. --set git_repos.git_url="http://username:password@github.com/path/to/repository.git" \
  5. --create-namespace
  • 使用git key管理git

需要修改dataway_url,git_repos.git_url,git_repos.git_key_path(绝对路径)

  1. helm add repo dataflux https://pubrepo.guance.com/chartrepo/datakit
  2. helm repo update
  3. helm install my-datakit dataflux/datakit -n datakit --set dataway_url="https://openway.guance.com?token=<your-token>" \
  4. --set git_repos.git_url="git@github.com:path/to/repository.git" \
  5. --set-file git_repos.git_key_path="/Users/buleleaf/.ssh/id_rsa" \
  6. --create-namespace

yaml 启用git 部署

先下载 datakit.yaml。

  • 使用密码管理git

修改datakit.yaml,添加env

  1. - name: DK_GIT_URL
  2. value: "http://username:password@github.com/path/to/repository.git"
  3. - name: DK_GIT_BRANCH
  4. value: "master"
  5. - name: DK_GIT_INTERVAL
  6. value: "1m"
  • 使用git key管理git

添加configmap

  1. apiVersion: v1
  2. data:
  3. id-rsa: |-
  4. -----BEGIN OPENSSH PRIVATE KEY-----
  5. b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
  6. NhAAAAAwEAAQAAAYEA4EX/WLRUBc0xEAolHi39H9gxqhRAJ4HLBXpQjiHdB+J1DHQq6K0r
  7. vTvYGyEzWhIFEO/2Pd7p7uEzJo+BEIri2yvmCVmzMfD6HOKfJCYF//4jzrpJW5e/udu8xe
  8. wJyidmyPPnG2wewurM65arNgqqLTuRXbZ85lztRaDmUEpP2DlOB8P0ZP+fc4c
  9. wvHkY1ku1I9jRpaQh6dZuRMBsqWdT9qsd8GwAaxuVyonqN66BJyaew5/3ICJQIaeiXQfU/
  10. rNpNH/QDEcijYr357jJ7/nRoyMGmkrXpi2Pet7aTKnLcvSt7XREqeY22YBrRSphCNt9yWC
  11. L0gtFHIo3QPWmOgXAMofvJvI724tQTraR
  12. 9B4EAxFQkZMAPv4GLyyZ2Eqtb9G5EAMzPLIiZwgVwHTY+IbWh/Pu7bd4pZDVe0LS5AUS7b
  13. M+jBbOZ2SSLEyLVHA7zBfYxVrtzs5d0SW6fCsJm9AAAFkOTQRI7k0ESOAAAAB3NzaC1yc2
  14. EAAAGBAOBF/1i0VAXNMRAKJR4t/R/YMaoUQCeBywV6UI4h3QfidQx0KuitK7072BshM1oS
  15. BRDv9j3e6e7hMyaPgRCK4weweww+hzinyQmBf/+I866SVuXv7nbvMXsCconZsjz5x
  16. toFd3KY10wQzLrqzOuWqzYKqi07kV22fOZc7UWg5lBKT9g5TgfD9GT/n3OHMLx5GNZLtSP
  17. Y0aWkIenWbkTAbKlnU/arHfBsAGsblcqJ6jeugScmnsOf9yAiUCGnol0H1P6zaTR/0AxHI
  18. o2K9+e4ye/50aMjBppK16Ytj3re2kypy3L0re10RKnmNtmAa0UqYQjbfclgi9ILRRyKHCt
  19. fhWuJZuPpYBu17E/A46ornVEsHH+/95hRKN0D1pjoFwDKH7ybyO9uLUE62kfQeBAMRUJGT
  20. AD7+Bi8smdhKrW/RuRADMzyyImcIFcB02PiG1ofz7u23eKWQ1XtC0uQFEu2zPowWzmdkki
  21. xMi1RwO8wX2MVa7c7OXdElunwrCZvQAAAAMBAAEAAAGBALPMylsWLyp7h7MBPyLD4ePu0l
  22. o1Y/2IW/hnSD+6vFY+4nH6jBAADUnnuWh+pIm4WqFqj/KoTMm7d+OZNvLJNfhaaFDkvfny
  23. 5MHVmZpEdZj26UQqKveoYAgkN2JBytNr5UaD66sYNjeaszCZqbYgJCAJzx41K3YXn9LG5x
  24. MZ2h67DwQFrojmKL5mgKsXx/aaEIrlnKFddWLqFcAYo4Rt0UvEBh9wEP9dI9nayT1+PPPa
  25. kvMapO1fk6XGSRHBZsf5Y42n3jvcwC8HACBB4Dvwx4sZLWTt38QfZP46yQogKUSwEkkKkH
  26. lCfHqHWjKEKRDmhq2p79lC7tpnyCWpgAU1rb5pDVfIUR2vRLryCMBGd1+se45b5+Kz0Lyu
  27. terBnWPESk6lW3EWE3nqZfAZuawAzpKob4HnuAHNAsaHFwlyvlhv183QaoiWfmUyiqm+mQ
  28. xRE0aJvmhzzU+D3gPFFK0ZdVkHsCPVkpcW0eWC8EN2SfB5+xQEPiZtwjlhtYpK+XTzwQAA
  29. AMAcclw5hpAnbfZ5bcRZV6rRPuDMwmcqN8gWCDLZo+L2CDz5vJ/gW/26UPei4UBeX2mEvB
  30. ZuCgKaT8fRnDbY2f/5QRIoF/yaQxp4/zQxC6y7gimiv9PBYw8U+gvmcuAj8a055HB3opGi
  31. qPc+7QgAmCPNJOh1/7imAOuuosMcUuqy1XAbmBcwCGUopXOK/NA+lWAl7Il4vXPU9vSHQU
  32. 4tjJtWcw9Y4Ly7eYtco0Ayio1iZY08MnNkaQfe2odBJC17MSsAAADBAP1oUYZFruDVYFfx
  33. TvHp3BF74uLtykxjqBOJt7SAbvxJgbWb6MceFviezGANb36r7fY1HYYgjcbXQhGu88IaIK
  34. Lbcz9+Dnx8Lonl50HIhazlkC1Uve9yVQSg7H/3OjqkVD+g3qm6Hww8AO2wki76uVnhIdDj
  35. 6TVFd1wD3gC/mVUltVAb/6t+zPA6caU3fT5ddt6tZ9jKcwVOjtNCs5SkcOphvVu3sd8bHf
  36. hgkP5fT7OE9IzezWfBmbusWo7Eh1fsEQAAAMEA4pFgQ45TdiUJUuBigXJQYXlhlGAxhOjs
  37. 7PerzzJzbN+cd8azPAQn+gbw2SQZ0Gs0c3N3EHqH/fOLHnPyZBDyjhm04jvqhQJjzIRA4c
  38. DbFIc8TPBhN6NU4nnBT8jmRKC+AhCgdjS4G4grbVkQ7VeCoIV5A8jqJBsJ1VYkedj8C8/F
  39. SiITxqh4k4LcIg9opRvIxpZ3SB4YM4yowp7Uh3SAREt559pXCI6ToBnwwQ+bW6Okqj73pI
  40. GFHGba/Rtr4C7tAAAAFmxpd2VuamluQGppYWdvdXl1bi5jb20BAgME
  41. -----END OPENSSH PRIVATE KEY-----
  42. kind: ConfigMap
  43. metadata:
  44. name: id-rsa
  45. namespace: datakit

添加env

  1. - name: DK_GIT_URL
  2. value: "git@github.com:path/to/repository.git"
  3. - name: DK_GIT_KEY_PATH
  4. value: "/usr/local/datakit/id_rsa"
  5. - name: DK_GIT_BRANCH
  6. value: "master"
  7. - name: DK_GIT_INTERVAL
  8. value: "1m"

添加volume

  1. volumeMounts:
  2. - mountPath: /usr/local/datakit/id_rsa
  3. name: id-rsa
  4. volumes:
  5. - configMap:
  6. defaultMode: 420
  7. name: id-rsa
  8. name: id-rsa