feat(playbooks): add comprehensive vhosts roles and ops scripts
This commit is contained in:
parent
3344b1e530
commit
8a57639da8
12
alicloud_dns_record.yml
Normal file
12
alicloud_dns_record.yml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
- name: setup OpenResty server
|
||||||
|
hosts: global-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
alicloud_dns_domain: "svc.plus"
|
||||||
|
alicloud_dns_rr: "www"
|
||||||
|
alicloud_dns_type: "A"
|
||||||
|
alicloud_dns_value: "1.2.3.4"
|
||||||
|
alicloud_access_key: "{{ aliyun_ak }}"
|
||||||
|
alicloud_secret_key: "{{ aliyun_sk }}"
|
||||||
|
roles:
|
||||||
|
- role: vhosts/alicloud_dns_record
|
||||||
16
alicloud_dns_sync.yml
Normal file
16
alicloud_dns_sync.yml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
- hosts: localhost
|
||||||
|
gather_facts: no
|
||||||
|
|
||||||
|
# 动态加载 DNS 配置文件
|
||||||
|
vars_files:
|
||||||
|
- vars/dns_records_svc_plus.yaml # ← 可以切换成不同环境
|
||||||
|
|
||||||
|
# 如果你想在命令行覆盖 AK/SK,则可以使用 --extra-vars
|
||||||
|
vars:
|
||||||
|
alicloud_access_key: "{{ aliyun_ak | default('') }}"
|
||||||
|
alicloud_secret_key: "{{ aliyun_sk | default('') }}"
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: vhosts/alicloud_dns_sync
|
||||||
|
|
||||||
7
apply-branch-protection.yml
Normal file
7
apply-branch-protection.yml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- name: Apply branch protection rules
|
||||||
|
hosts: localhost
|
||||||
|
connection: local
|
||||||
|
gather_facts: false
|
||||||
|
roles:
|
||||||
|
- github
|
||||||
8
common
Normal file
8
common
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- name: Init Linux OS Common setting
|
||||||
|
hosts: all
|
||||||
|
user: ubuntu
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
roles:
|
||||||
|
- vhosts/common
|
||||||
2
deepflow/deepflow-agent-playbook/Readme.md
Normal file
2
deepflow/deepflow-agent-playbook/Readme.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
ansible-playbook -i inventory/js2_hosts.ini playbook.yml -e "ansible_ssh_user=ubuntu area=js2" -D -C
|
||||||
|
ansible-playbook -i inventory/js2_hosts.ini playbook.yml -e "ansible_ssh_user=ubuntu area=js2" -D
|
||||||
8
deepflow/deepflow-agent-playbook/inventory/js2_hosts.ini
Normal file
8
deepflow/deepflow-agent-playbook/inventory/js2_hosts.ini
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
[js2]
|
||||||
|
10.200.11.[1:24]
|
||||||
|
|
||||||
|
[all:vars]
|
||||||
|
ansible_port=22
|
||||||
|
ansible_ssh_user=ubuntu
|
||||||
|
ansible_host_key_checking=False
|
||||||
|
ansible_ssh_private_key_file=~/.ssh/id_rsa
|
||||||
10
deepflow/deepflow-agent-playbook/playbook.yml
Normal file
10
deepflow/deepflow-agent-playbook/playbook.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
- name: DeepFlow Agent Upgrade for 区域节点
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
gather_facts: false
|
||||||
|
vars:
|
||||||
|
area: js2
|
||||||
|
upgrade_zip_path: ./DeepFlow-Agent-Upgrade-20250523.zip
|
||||||
|
roles:
|
||||||
|
- deepflow_upgrade
|
||||||
|
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
- name: Sync upgrade package to remote using rsync
|
||||||
|
synchronize:
|
||||||
|
src: "{{ upgrade_zip_path }}"
|
||||||
|
dest: /tmp/
|
||||||
|
mode: push
|
||||||
|
|
||||||
|
- name: Unzip upgrade package
|
||||||
|
unarchive:
|
||||||
|
src: "/tmp/{{ upgrade_zip_path | basename }}"
|
||||||
|
dest: /tmp/
|
||||||
|
remote_src: yes
|
||||||
|
|
||||||
|
- name: Execute upgrade script
|
||||||
|
command: bash update_agent.sh --area {{ area }}
|
||||||
|
args:
|
||||||
|
chdir: /tmp/DeepFlow-Agent-Upgrade
|
||||||
5
deploy-docker-harbor.yml
Normal file
5
deploy-docker-harbor.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- docker/harbor
|
||||||
5
deploy-docker-keycloak.yml
Normal file
5
deploy-docker-keycloak.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
become: yes
|
||||||
|
roles:
|
||||||
|
- docker/keycloak
|
||||||
5
deploy_OpenObserve_docker.yaml
Normal file
5
deploy_OpenObserve_docker.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
- name: setup OpenObserve
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- docker/OpenObserve/
|
||||||
5
deploy_Tempo_docker.yaml
Normal file
5
deploy_Tempo_docker.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
- name: setup Tempo
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- docker/Tempo/
|
||||||
5
deploy_VictoriaLogs_docker.yaml
Normal file
5
deploy_VictoriaLogs_docker.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
- name: setup VictoriaLogs
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- docker/VictoriaLogs/
|
||||||
5
deploy_VictoriaMetrics_docker.yaml
Normal file
5
deploy_VictoriaMetrics_docker.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
- name: setup VictoriaMetrics
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- docker/VictoriaMetrics/
|
||||||
50
deploy_blackbox_exporters_vhosts.yml
Normal file
50
deploy_blackbox_exporters_vhosts.yml
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
- name: Deploy blackbox exporter
|
||||||
|
hosts: global-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
hosts:
|
||||||
|
- name: "www.svc.plus"
|
||||||
|
path:
|
||||||
|
- "/docs/"
|
||||||
|
- "/download/"
|
||||||
|
- "/login/"
|
||||||
|
- "/logout/"
|
||||||
|
- '/register/'
|
||||||
|
- name: "cn-homepage.svc.plus"
|
||||||
|
path:
|
||||||
|
- "/docs/"
|
||||||
|
- "/download/"
|
||||||
|
- "/login/"
|
||||||
|
- "/logout/"
|
||||||
|
- '/register/'
|
||||||
|
- name: "dl.svc.plus"
|
||||||
|
path:
|
||||||
|
- "/"
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/common/
|
||||||
|
- roles/vhosts/blackbox_exporter/
|
||||||
|
- name: Deploy blackbox exporter
|
||||||
|
hosts: cn-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
hosts:
|
||||||
|
- name: "www.svc.plus"
|
||||||
|
path:
|
||||||
|
- "/docs/"
|
||||||
|
- "/download/"
|
||||||
|
- "/login/"
|
||||||
|
- "/logout/"
|
||||||
|
- '/register/'
|
||||||
|
- name: "cn-homepage.svc.plus"
|
||||||
|
path:
|
||||||
|
- "/docs/"
|
||||||
|
- "/download/"
|
||||||
|
- "/login/"
|
||||||
|
- "/logout/"
|
||||||
|
- '/register/'
|
||||||
|
- name: "dl.svc.plus"
|
||||||
|
path:
|
||||||
|
- "/"
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/common/
|
||||||
|
- roles/vhosts/blackbox_exporter/
|
||||||
7
deploy_deepflow_agent
Normal file
7
deploy_deepflow_agent
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- name: Deploy or Upgrade DeepFlow Agent
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: roles/vhosts/deepflow_agent
|
||||||
15
deploy_exporters_vhosts.yml
Normal file
15
deploy_exporters_vhosts.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
- name: setup otel exporters
|
||||||
|
hosts: cn-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/common/
|
||||||
|
- roles/vhosts/node_exporter/
|
||||||
|
- roles/vhosts/process_exporter/
|
||||||
|
|
||||||
|
- name: setup otel exporters
|
||||||
|
hosts: global-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/common/
|
||||||
|
- roles/vhosts/node_exporter/
|
||||||
|
- roles/vhosts/process_exporter/
|
||||||
11
deploy_grafana_docker.yaml
Normal file
11
deploy_grafana_docker.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
- name: setup grafana (docker)
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
grafana_domain: "{{ domain }}"
|
||||||
|
grafana_workspace: /opt/grafana
|
||||||
|
grafana_admin_user: admin
|
||||||
|
grafana_admin_password: admin
|
||||||
|
roles:
|
||||||
|
- vhosts/docker/
|
||||||
|
- docker/grafana/
|
||||||
72
deploy_monitor_server.yml
Normal file
72
deploy_monitor_server.yml
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
- name: setup otel exporters
|
||||||
|
hosts: otel.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
group: web
|
||||||
|
otlp_endpoint: &otel_endpoint https://otel.svc.plus/api/default/
|
||||||
|
otlp_auth: &otel_auth "Basic cm9vdEBleGFtcGxlLmNvbTpRN01wRjZBTzZFelRjRjdJ"
|
||||||
|
otel_prometheus_node_static_configs: &otel_node_static_configs
|
||||||
|
- targets: ['172.31.2.33:9100']
|
||||||
|
labels:
|
||||||
|
vendor: aws
|
||||||
|
account: prod
|
||||||
|
group: core
|
||||||
|
name: tky-proxy.svc.plus
|
||||||
|
iid: '172.31.2.33'
|
||||||
|
- targets: ['167.179.72.223:9100']
|
||||||
|
labels:
|
||||||
|
vendor: aws
|
||||||
|
account: prod
|
||||||
|
group: web-system
|
||||||
|
name: global-homepage.svc.plus
|
||||||
|
iid: '167.179.72.223'
|
||||||
|
- targets: ['47.120.61.35:9100']
|
||||||
|
labels:
|
||||||
|
vendor: alicloud
|
||||||
|
account: prod
|
||||||
|
group: web-system
|
||||||
|
name: cn-homepage.svc.plus
|
||||||
|
iid: '47.120.61.35'
|
||||||
|
otel_prometheus_process_static_configs: &otel_process_static_configs
|
||||||
|
- targets: ['172.31.2.33:9256']
|
||||||
|
labels:
|
||||||
|
vendor: aws
|
||||||
|
account: prod
|
||||||
|
group: core
|
||||||
|
name: tky-proxy.svc.plus
|
||||||
|
iid: '172.31.2.33'
|
||||||
|
- targets: ['167.179.72.223:9256']
|
||||||
|
labels:
|
||||||
|
vendor: aws
|
||||||
|
account: prod
|
||||||
|
group: web-system
|
||||||
|
name: global-homepage.svc.plus
|
||||||
|
iid: '167.179.72.223'
|
||||||
|
- targets: ['47.120.61.35:9256']
|
||||||
|
labels:
|
||||||
|
vendor: alicloud
|
||||||
|
account: prod
|
||||||
|
group: web-system
|
||||||
|
name: cn-homepage.svc.plus
|
||||||
|
iid: '47.120.61.35'
|
||||||
|
exporters:
|
||||||
|
endpoint: *otel_endpoint
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/otel-collector/
|
||||||
|
|
||||||
|
- name: setup otel exporters
|
||||||
|
hosts: otel.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
group: web
|
||||||
|
otlp_endpoint: *otel_endpoint
|
||||||
|
otlp_auth: *otel_auth
|
||||||
|
otel_prometheus_node_static_configs: *otel_node_static_configs
|
||||||
|
otel_prometheus_process_static_configs: *otel_process_static_configs
|
||||||
|
exporters:
|
||||||
|
endpoint: *otel_endpoint
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/node_exporter/
|
||||||
|
- roles/vhosts/process_exporter/
|
||||||
|
- roles/vhosts/grafana/
|
||||||
|
- roles/vhosts/openobserve/
|
||||||
11
deploy_neurapress_docker.yaml
Normal file
11
deploy_neurapress_docker.yaml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
- name: setup neurapress
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
neurapress_domain: "{{ domain }}"
|
||||||
|
neurapress_workspace: /opt/neurapress
|
||||||
|
neurapress_image: neurapress:prod
|
||||||
|
neurapress_certbot_email: manbuzhe2009@qq.com
|
||||||
|
roles:
|
||||||
|
- vhosts/docker/
|
||||||
|
- docker/neurapress/
|
||||||
23
deploy_nginx_vhosts.yml
Normal file
23
deploy_nginx_vhosts.yml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
- name: Setup Nginx server
|
||||||
|
hosts: localhost
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
vhosts:
|
||||||
|
- name: cn-homepage.svc.plus
|
||||||
|
domain:
|
||||||
|
- www.svc.plus
|
||||||
|
- cn-homepage.svc.plus
|
||||||
|
ssl_certificate: /etc/ssl/svc.plus.pem
|
||||||
|
ssl_certificate_key: /etc/ssl/svc.plus.rsa.key
|
||||||
|
root: /data/update-server/dashboard
|
||||||
|
type: homepage-static
|
||||||
|
- name: cn-artifact.svc.plus
|
||||||
|
domain:
|
||||||
|
- artifact.svc.plus
|
||||||
|
- cn-artifact.svc.plus
|
||||||
|
ssl_certificate: /etc/ssl/svc.plus.pem
|
||||||
|
ssl_certificate_key: /etc/ssl/svc.plus.rsa.key
|
||||||
|
root: /data/update-server
|
||||||
|
type: artifact
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/nginx/
|
||||||
37
deploy_nodejs_vhosts.yml
Normal file
37
deploy_nodejs_vhosts.yml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
- name: Configure Node.js runtime for vhosts
|
||||||
|
hosts: all
|
||||||
|
gather_facts: true
|
||||||
|
become: yes
|
||||||
|
vars:
|
||||||
|
# Choose Node.js version
|
||||||
|
# Examples: "20.x" (LTS), "18.x", "22.x", or specific version like "20.11.0"
|
||||||
|
nodejs_version: "20.x"
|
||||||
|
|
||||||
|
# Install Yarn package manager (default: true)
|
||||||
|
# install_yarn: false
|
||||||
|
|
||||||
|
# Add npm global bin to PATH (default: true)
|
||||||
|
# add_npm_to_path: true
|
||||||
|
|
||||||
|
# Custom npm prefix
|
||||||
|
# npm_config_prefix: "/usr/local/lib/npm"
|
||||||
|
|
||||||
|
# Additional packages to install globally (optional)
|
||||||
|
# global_npm_packages:
|
||||||
|
# - pm2
|
||||||
|
# - typescript
|
||||||
|
# - eslint
|
||||||
|
# - @angular/cli
|
||||||
|
|
||||||
|
roles:
|
||||||
|
- role: vhosts/nodejs
|
||||||
|
|
||||||
|
post_tasks:
|
||||||
|
- name: Install additional global npm packages
|
||||||
|
npm:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: latest
|
||||||
|
global: yes
|
||||||
|
loop: "{{ global_npm_packages | default([]) }}"
|
||||||
|
when: global_npm_packages is defined and global_npm_packages | length > 0
|
||||||
48
deploy_openresty_vhosts.yml
Normal file
48
deploy_openresty_vhosts.yml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
- name: setup OpenResty server
|
||||||
|
hosts: cn-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
vhosts:
|
||||||
|
- name: cn-homepage.svc.plus
|
||||||
|
domain:
|
||||||
|
- www.svc.plus
|
||||||
|
- cn-homepage.svc.plus
|
||||||
|
ssl_certificate: /etc/ssl/svc.plus.pem
|
||||||
|
ssl_certificate_key: /etc/ssl/svc.plus.rsa.key
|
||||||
|
root: /data/update-server/dashboard
|
||||||
|
type: homepage-static
|
||||||
|
- name: cn-artifact.svc.plus
|
||||||
|
domain:
|
||||||
|
- artifact.svc.plus
|
||||||
|
- cn-artifact.svc.plus
|
||||||
|
ssl_certificate: /etc/ssl/svc.plus.pem
|
||||||
|
ssl_certificate_key: /etc/ssl/svc.plus.rsa.key
|
||||||
|
root: /data/update-server
|
||||||
|
type: artifact
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/OpenResty/
|
||||||
|
- name: setup OpenResty server
|
||||||
|
hosts: global-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
vhosts:
|
||||||
|
- name: global-homepage.svc.plus
|
||||||
|
domain:
|
||||||
|
- www.svc.plus
|
||||||
|
- global-homepage.svc.plus
|
||||||
|
ssl_certificate: /etc/ssl/svc.plus.pem
|
||||||
|
ssl_certificate_key: /etc/ssl/svc.plus.rsa.key
|
||||||
|
root: /data/update-server/dashboard
|
||||||
|
type: homepage-static
|
||||||
|
- name: global-artifact.svc.plus
|
||||||
|
domain:
|
||||||
|
- artifact.svc.plus
|
||||||
|
- global-artifact.svc.plus
|
||||||
|
ssl_certificate: /etc/ssl/svc.plus.pem
|
||||||
|
ssl_certificate_key: /etc/ssl/svc.plus.rsa.key
|
||||||
|
root: /data/update-server
|
||||||
|
autoindex_paths:
|
||||||
|
- "/"
|
||||||
|
type: artifact
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/OpenResty/
|
||||||
5
deploy_otel_docker.yaml
Normal file
5
deploy_otel_docker.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
- name: setup otel
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- docker/otel/
|
||||||
162
deploy_postgre_vhosts.yml
Normal file
162
deploy_postgre_vhosts.yml
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
- name: Setup postgres server
|
||||||
|
hosts: cn-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
group: cn-homepage.svc.plus
|
||||||
|
repo_setup: true
|
||||||
|
apt_keyrings: &postgresql_common_keyrings
|
||||||
|
- name: postgresql
|
||||||
|
content: |
|
||||||
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||||
|
Version: Hockeypuck 2.2
|
||||||
|
Comment: Hostname:
|
||||||
|
|
||||||
|
xsFNBE6XR8IBEACVdDKT2HEH1IyHzXkb4nIWAY7echjRxo7MTcj4vbXAyBKOfjja
|
||||||
|
UrBEJWHN6fjKJXOYWXHLIYg0hOGeW9qcSiaa1/rYIbOzjfGfhE4x0Y+NJHS1db0V
|
||||||
|
G6GUj3qXaeyqIJGS2z7m0Thy4Lgr/LpZlZ78Nf1fliSzBlMo1sV7PpP/7zUO+aA4
|
||||||
|
bKa8Rio3weMXQOZgclzgeSdqtwKnyKTQdXY5MkH1QXyFIk1nTfWwyqpJjHlgtwMi
|
||||||
|
c2cxjqG5nnV9rIYlTTjYG6RBglq0SmzF/raBnF4Lwjxq4qRqvRllBXdFu5+2pMfC
|
||||||
|
IZ10HPRdqDCTN60DUix+BTzBUT30NzaLhZbOMT5RvQtvTVgWpeIn20i2NrPWNCUh
|
||||||
|
hj490dKDLpK/v+A5/i8zPvN4c6MkDHi1FZfaoz3863dylUBR3Ip26oM0hHXf4/2U
|
||||||
|
A/oA4pCl2W0hc4aNtozjKHkVjRx5Q8/hVYu+39csFWxo6YSB/KgIEw+0W8DiTII3
|
||||||
|
RQj/OlD68ZDmGLyQPiJvaEtY9fDrcSpI0Esm0i4sjkNbuuh0Cvwwwqo5EF1zfkVj
|
||||||
|
Tqz2REYQGMJGc5LUbIpk5sMHo1HWV038TWxlDRwtOdzw08zQA6BeWe9FOokRPeR2
|
||||||
|
AqhyaJJwOZJodKZ76S+LDwFkTLzEKnYPCzkoRwLrEdNt1M7wQBThnC5z6wARAQAB
|
||||||
|
zRxQb3N0Z3JlU1FMIERlYmlhbiBSZXBvc2l0b3J5wsGOBBMBCAA4AhsDBQsJCAcD
|
||||||
|
BRUKCQgLBRYCAwEAAh4BAheAFiEEuXsK/KoaR/BE8kSgf8x9RqzMTPgFAlhtCD8A
|
||||||
|
CgkQf8x9RqzMTPgECxAAk8uL+dwveTv6eH21tIHcltt8U3Ofajdo+D/ayO53LiYO
|
||||||
|
xi27kdHD0zvFMUWXLGxQtWyeqqDRvDagfWglHucIcaLxoxNwL8+e+9hVFIEskQAY
|
||||||
|
kVToBCKMXTQDLarz8/J030Pmcv3ihbwB+jhnykMuyyNmht4kq0CNgnlcMCdVz0d3
|
||||||
|
z/09puryIHJrD+A8y3TD4RM74snQuwc9u5bsckvRtRJKbP3GX5JaFZAqUyZNRJRJ
|
||||||
|
Tn2OQRBhCpxhlZ2afkAPFIq2aVnEt/Ie6tmeRCzsW3lOxEH2K7MQSfSu/kRz7ELf
|
||||||
|
Cz3NJHj7rMzC+76Rhsas60t9CjmvMuGONEpctijDWONLCuch3Pdj6XpC+MVxpgBy
|
||||||
|
2VUdkunb48YhXNW0jgFGM/BFRj+dMQOUbY8PjJjsmVV0joDruWATQG/M4C7O8iU0
|
||||||
|
B7o6yVv4m8LDEN9CiR6r7H17m4xZseT3f+0QpMe7iQjz6XxTUFRQxXqzmNnloA1T
|
||||||
|
7VjwPqIIzkj/u0V8nICG/ktLzp1OsCFatWXh7LbU+hwYl6gsFH/mFDqVxJ3+DKQi
|
||||||
|
vyf1NatzEwl62foVjGUSpvh3ymtmtUQ4JUkNDsXiRBWczaiGSuzD9Qi0ONdkAX3b
|
||||||
|
ewqmN4TfE+XIpCPxxHXwGq9Rv1IFjOdCX0iG436GHyTLC1tTUIKF5xV4Y0+cXIPC
|
||||||
|
wX0EEwEIACcCGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AFAlLpFRkFCQ6EJy0A
|
||||||
|
CgkQf8x9RqzMTPhOZA//Zp0e25pcvle7cLc0YuFr9pBv2JIkLzPm83nkcwKmxaWa
|
||||||
|
yUIG4Sv6pH6hm8+S/CHQij/yFCX+o3ngMw2J9HBUvafZ4bnbI0RGJ70GsAwraQ0V
|
||||||
|
lkIfg7GUw3TzvoGYO42rZTru9S0K/6nFP6D1HUu+U+AsJONLeb6oypQgInfXQExP
|
||||||
|
ZyliUnHdipei4WR1YFW6sjSkZT/5C3J1wkAvPl5lvOVthI9Zs6bZlJLZwusKxU0U
|
||||||
|
M4Btgu1Sf3nnJcHmzisixwS9PMHE+AgPWIGSec/N27a0KmTTvImV6K6nEjXJey0K
|
||||||
|
2+EYJuIBsYUNorOGBwDFIhfRk9qGlpgt0KRyguV+AP5qvgry95IrYtrOuE7307Si
|
||||||
|
dEbSnvO5ezNemE7gT9Z1tM7IMPfmoKph4BfpNoH7aXiQh1Wo+ChdP92hZUtQrY2N
|
||||||
|
m13cmkxYjQ4ZgMWfYMC+DA/GooSgZM5i6hYqyyfAuUD9kwRN6BqTbuAUAp+hCWYe
|
||||||
|
N4D88sLYpFh3paDYNKJ+Gf7Yyi6gThcV956RUFDH3ys5Dk0vDL9NiWwdebWfRFbz
|
||||||
|
oRM3dyGP889aOyLzS3mh6nHzZrNGhW73kslSQek8tjKrB+56hXOnb4HaElTZGDvD
|
||||||
|
5wmrrhN94kbyGtz3cydIohvNO9d90+29h0eGEDYti7j7maHkBKUAwlcPvMg5m3bC
|
||||||
|
wX0EEwEIACcCGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AFAlEqbZUFCQg2wEEA
|
||||||
|
CgkQf8x9RqzMTPhFMQ//WxAfKMdpSIA9oIC/yPD/dJpY/+DyouOljpE6MucMy/Ar
|
||||||
|
BECjFTBwi/j9NYM4ynAk34IkhuNexc1i9/05f5RM6+riLCLgAOsADDbHD4miZzoS
|
||||||
|
xiVr6GQ3YXMbOGld9kV9Sy6mGNjcUov7iFcf5Hy5w3AjPfKuR9zXswyfzIU1YXOb
|
||||||
|
iiZT38l55pp/BSgvGVQsvbNjsff5CbEKXS7q3xW+WzN0QWF6YsfNVhFjRGj8hKtH
|
||||||
|
vwKcA02wwjLeLXVTm6915ZUKhZXUFc0vM4Pj4EgNswH8Ojw9AJaKWJIZmLyW+aP+
|
||||||
|
wpu6YwVCicxBY59CzBO2pPJDfKFQzUtrErk9irXeuCCLesDyirxJhv8o0JAvmnMA
|
||||||
|
KOLhNFUrSQ2m+3EnF7zhfz70gHW+EG8X8mL/EN3/dUM09j6TVrjtw43RLxBzwMDe
|
||||||
|
ariFF9yC+5bLtnGgxjsB9Ik6GV5v34/NEEGf1qBiAzFmDVFRZlrNDkq6gmpvGnA5
|
||||||
|
hUWNr+y0i01LjGyaLSWHYjgw2UEQOqcUtTFK9MNzbZze4mVaHMEz9/aMfX25R6qb
|
||||||
|
iNqCChveIm8mYr5Ds2zdZx+G5bAKdzX7nx2IUAxFQJEE94VLSp3npAaTWv3sHr7d
|
||||||
|
R8tSyUJ9poDwgw4W9BIcnAM7zvFYbLF5FNggg/26njHCCN70sHt8zGxKQINMc6TC
|
||||||
|
wX0EEwEIACcCGwMFCwkIBwMFFQoJCAsFFgIDAQACHgECF4AFAlB5KywFCQPDFt8A
|
||||||
|
CgkQf8x9RqzMTPhuCQ//QAjRSAOCQ02qmUAikT+mTB6baOAakkYq6uHbEO7qPZkv
|
||||||
|
4E/M+HPIJ4wdnBNeSQjfvdNcZBA/x0hr5EMcBneKKPDj4hJ0panOIRQmNSTThQw9
|
||||||
|
OU351gm3YQctAMPRUu1fTJAL/AuZUQf9ESmhyVtWNlH/56HBfYjE4iVeaRkkNLJy
|
||||||
|
X3vkWdJSMwC/LO3Lw/0M3R8itDsm74F8w4xOdSQ52nSRFRh7PunFtREl+QzQ3EA/
|
||||||
|
WB4AIj3VohIGkWDfPFCzV3cyZQiEnjAe9gG5pHsXHUWQsDFZ12t784JgkGyO5wT2
|
||||||
|
6pzTiuApWM3k/9V+o3HJSgH5hn7wuTi3TelEFwP1fNzI5iUUtZdtxbFOfWMnZAyp
|
||||||
|
EhaLmXNkg4zDkH44r0ss9fR0DAgUav1a25UnbOn4PgIEQy2fgHKHwRpCy20d6oCS
|
||||||
|
lmgyWsR40EPPYvtGq49A2aK6ibXmdvvFT+Ts8Z+q2SkFpoYFX20mR2nsF0fbt1lf
|
||||||
|
H65P64dukxeRGteWIeNakDD40bAAOH8+OaoTGVBJ2ACJfLVNM53PEoftavAwUYMr
|
||||||
|
R910qvwYfd/46rh46g1Frr9SFMKYE9uvIJIgDsQB3QBp71houU4H55M5GD8XURYs
|
||||||
|
+bfiQpJG1p7eB8e5jZx1SagNWc4XwL2FzQ9svrkbg1Y+359buUiP7T6QXX2zY+/C
|
||||||
|
RgQQEQgABgUCTpdI7gAKCRDFr3dKWFELWqaPAKD1TtT5c3sZz92Fj97KYmqbNQZP
|
||||||
|
+ACfSC6+hfvlj4GxmUjp1aepoVTo3wfCwVwEEAEIAAYFAk6XSQsACgkQTFprqxLS
|
||||||
|
p64F8Q//cCcutwrH50UoRFejg0EIZav6LUKejC6kpLeubbEtuaIH3r2zMblPGc4i
|
||||||
|
+eMQKo/PqyQrceRXeNNlqO6/exHozYi2meudxa6IudhwJIOn1MQykJbNMSC2sGUp
|
||||||
|
1W5M1N5EYgt4hy+qhlfnD66LR4G+9t5FscTJSy84SdiOuqgCOpQmPkVRm1HX5X1+
|
||||||
|
dmnzMOCk5LHHQuiacV0qeGO7JcBCVEIDr+uhU1H2u5GPFNHm5u15n25tOxVivb94
|
||||||
|
xg6NDjouECBH7cCVuW79YcExH/0X3/9G45rjdHlKPH1OIUJiiX47OTxdG3dAbB4Q
|
||||||
|
fnViRJhjehFscFvYWSqXo3pgWqUsEvv9qJac2ZEMSz9x2mj0ekWxuM6/hGWxJdB+
|
||||||
|
+985rIelPmc7VRAXOjIxWknrXnPCZAMlPlDLu6+vZ5BhFX0Be3y38f7GNCxFkJzl
|
||||||
|
hWZ4Cj3WojMj+0DaC1eKTj3rJ7OJlt9S9xnO7OOPEUTGyzgNIDAyCiu8F4huLPaT
|
||||||
|
ape6RupxOMHZeoCVlqx3ouWctelB2oNXcxxiQ/8y+21aHfD4n/CiIFwDvIQjl7dg
|
||||||
|
mT3u5Lr6yxuosR3QJx1P6rP5ZrDTP9khT30t+HZCbvs5Pq+v/9m6XDmi+NlU7Zuh
|
||||||
|
Ehy97tL3uBDgoL4b/5BpFL5U9nruPlQzGq1P9jj40dxAaDAX/WLCwFwEEAECAAYF
|
||||||
|
AlNObS8ACgkQak9cqaePZ1molQf/WYxinFiP38X2HDuzng+krVpQ/H8GMBvrq9i+
|
||||||
|
jpg2Q/Rhdd/BbLKeYlndcCWdXTLuh9L4Ey98tAxpHJX0pN1XRe/vrEeYHtaKo/M0
|
||||||
|
1beecsCp9V8WMmbc1SkXM6UG1jzWLN8xKN5mCJrVpD57RlGddxA/XyTqkCl8JhsP
|
||||||
|
TUtJavACNwzolLJozHIAB0OdRj8S+EvmBb5kcY/9+opaNq4k/uMHt38g2VoKZZIC
|
||||||
|
G4zXAWe6N/nlCCMhi5iLgf0IrBW5Eqo0pMqnsseB60WJ3WaHkpj73lzxsRq2kW8Z
|
||||||
|
7PKFGy+5bDXX8qEmtKOvhYtYyrwyJavU52pQeLOwY7chDrzhc8LBXAQQAQoABgUC
|
||||||
|
WK7LHAAKCRB/GCjHdaJGA/o5D/911ePhusgnrS1BFc+IMZEUijmgJhIQ3JY2Rs8o
|
||||||
|
pz66vTPlnoa+edOyaAWWQUM10NERCzw6VUo+Ss0IeHQfd+YlGsyakMGGVlzojXVq
|
||||||
|
NASFQqF9A4vuiVNGqoXlIOdo+RStRtvlj0U779CLUclIOpZGHs68dRsI3K2EmSzj
|
||||||
|
DDgOlq+SbmEEgSN542qtR7vAMBT+GOah9sVVWY+1+0jPOg4HttiT7yn5p1j9yi2v
|
||||||
|
DKRjHatGV3Q7sLf1oow+z4XHws6ZPsQZqBMaH5xbJuzHVNq4uNIAqSaWvpbmRMjq
|
||||||
|
dwfSV8LwJoszZIx09a1vnT103AITUhJxRr6kLbwZ4khSmGgol7vTKGdPd06kyln8
|
||||||
|
bKLzosHadoM/NQKvzRxao4VZxRvmuLuCIF+Quqbbb830gWDYxdGqvux2iOuiiDKa
|
||||||
|
lJ/o6ko77qyWsl7hA5L51OG07ZeeHOf38ReUkHcg9cmqdyPY1R0+5upWmcclN11i
|
||||||
|
qa/QWz5LvFKd4JWbl31rWtSXJJ0QOiSA5ZXjjkbZ08bKDyWl88P3l2bYrh2W+G+h
|
||||||
|
GiD0Lg9odUCr2m/Url5iiYdtImeTXMxXNQ/9JIzqPaOHgNUMqgbhqDdGqPXOoZPb
|
||||||
|
2tXx0AcQQa5mW5ve8dmHdCYCe8GLvW1PCuaD73vjhFSV/s7hoR2QW+p7UmgeYqd3
|
||||||
|
26cEacLAcwQQAQoAHRYhBCoy/gbahgGIctbIPoDB+7VZbdmbBQJbg5y2AAoJEIDB
|
||||||
|
+7VZbdmbh2IIAK7tjZGvX/axljW2YgcjqN4Dim/ukNa0rBs6m6N1o5msmPYzAxbk
|
||||||
|
qiwtr05T1v+L4HIE6RO8BvoLEttfij2Gf0V29yL+NOcYOxkqjM3mKNVdO5Oth9mG
|
||||||
|
fnHEAv/msg/PQ7x24qF2yPxeW0hMcVO24mVN0cQ1s+/D4hMSfE9prPaKhWDcLb/t
|
||||||
|
0J4lmekULACK4zwHZKKn9YMD3BGcQceJvqMtguNVnxEJZ9STqv6cxMBLpIvnQIHl
|
||||||
|
XifNno+VNzqo23NRIpVzImV1zlE2prW9+5o4ljELLerHGVSAAzvrIn8t1uo2gc8I
|
||||||
|
inHk+X7IEcpkMubJXFj6qwuv2TxcdLHdNFDCwXMEEAEKAB0WIQSTSHXCzDNDnepf
|
||||||
|
7whU7TuPprNXZwUCXOUwzQAKCRBU7TuPprNXZ/h+D/4/cxj/GReBRlWQc16vGVCa
|
||||||
|
4CAV5yWT2n2ZZvXNYf7Kpx5JD6PDdkLS+r3hlfASn2PeozNPk4Z5g3rqPWioxdML
|
||||||
|
H3LepPRUoIOnRaKTNko8tPhPuRvOxOEn4SKh6NKQNqc4P6XfCa+26MvNVPaYONQM
|
||||||
|
5ClaGRwNvBPfLkGIPOUD12nihb4z02u1sFZtOfX8P5nrhadfxjeNKVXZ4RvaJtFr
|
||||||
|
K5oFef+2DB+BkZULN+L5AY1MmTA/eDiYHS3m2WxnLZE251g8j0BZh/pO6DCSHxNM
|
||||||
|
AQMqrZW82o6BCItHJFiQvJ6cyoGmaVgYbMMCWtVmlROTm+6QsxNKR7WEymQ8gaDN
|
||||||
|
p9bPAFHa2MKGgqIUabj+DY32Wz+wNR9g08tl5X/YJO/MARs3LiY+Qy/iqrhp2r7o
|
||||||
|
1FdnFSewy08D92u0w0EDxz2u96vWcDzxr2s1iXbhkhDIw7UGrJwfUqQ0eOtGGuDB
|
||||||
|
vNQS2mGttkXTUgYS8t1oAS2qPPpxHj0RVLGU6yanJjJTRUfdvX2a/2vSP6nFN8oM
|
||||||
|
li0O1pCxbkSTSwX9ltjfzstdg1mj7/l55njcgSMtC4cU8gKz8JxFzhGr2VMp8FoN
|
||||||
|
QfhmOlCKZRD3apgKBf18GRt928w7avoGERyY//Z6KM1lzoTYzbBRRq2FEfCnEXVw
|
||||||
|
jYyiMunW5stvFrnOYK+AL8LA8wQQAQoAHRYhBOL4VIJcPEdF1+gNvuUHu/kqCA+W
|
||||||
|
BQJmWfFNAAoJEOUHu/kqCA+WODQL/juZhOTrLR8n4cKHCwm1MNmtRA1xd9mPtjpI
|
||||||
|
jXvn/16MDttapukAxXpjfo3sDsL8nAjla0t8WgdYx/MQywI396YZiaNF7nDAoNCD
|
||||||
|
wnaEP2i2g+vJRDPniR3+dNwZilITfEVwunHkwh9qCq+NgOPYSkqnShVY+EElIHjG
|
||||||
|
lrqfSeBgBF3kJi2tWjF+ECSr0bk7OHP4LbcksIFfjTq0U24BA63fcpP9ogomNAvn
|
||||||
|
SaFSumPET7PRX52OJm0JhbZjs97liXe8lkTjtgMWA+S8t62s/DZRSDC6WxPjZzmo
|
||||||
|
q8izUhr3hrw4kIQl5hD2AJ0sHHXo/b+ME+08qZMpkPFmWMj5YGtvDd6frqNhqW1e
|
||||||
|
6Q5pnzAJv91sjmYMHKZrGfA0vWY/NcCni0MLpFGVpNiwa+mP4DNNCadU7nt2AfFa
|
||||||
|
LnO5YBT9AbpoYtOrFh4DxrNo0Wss46+Nd4IBDdCofkb4BdlrP9kCCPmSaHxaau+i
|
||||||
|
pVHMEzodLsS7KmQt4c6gAQW0dwsbp8KmBBAWCgBOFiEEWN4UGzqiopPVV787DEOU
|
||||||
|
R/WIRFQFAmcsbe8Fgy7/WQADBQF4JoY8W14+XStbQC5da2FsaVwuc2hcLmNoc2hc
|
||||||
|
LXNcLmFudG9uPiQAAAoJEAxDlEf1iERUAoUA/iKXsf21IPCffbK/XOovLsAsX/oA
|
||||||
|
cQ5XYIhVsIvuJMSjAP97o/c5cJSFI511AMIh/DN4Yw7pe6YRvamUB8BlJlLdBA==
|
||||||
|
=BkpO
|
||||||
|
-----END PGP PUBLIC KEY BLOCK-----
|
||||||
|
repos: &postgresql_common_repos
|
||||||
|
- name: postgresql
|
||||||
|
uri: "http://apt.postgresql.org/pub/repos/apt"
|
||||||
|
suite: "{{ ansible_distribution_release }}-pgdg"
|
||||||
|
components: ["main"]
|
||||||
|
enabled: true
|
||||||
|
cleanup:
|
||||||
|
- /etc/apt/sources.list.d/pgdg.list
|
||||||
|
- /etc/apt/sources.list.d/pgdg.sources
|
||||||
|
postgresql_use_official_repo: false
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/common/
|
||||||
|
- roles/vhosts/postgres/
|
||||||
|
|
||||||
|
- name: Setup postgres server
|
||||||
|
hosts: global-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
group: global-homepage.svc.plus
|
||||||
|
repo_setup: true
|
||||||
|
apt_keyrings: *postgresql_common_keyrings
|
||||||
|
repos: *postgresql_common_repos
|
||||||
|
postgresql_use_official_repo: false
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/common/
|
||||||
|
- roles/vhosts/postgres/
|
||||||
8
deploy_postgres_vhosts.yml
Normal file
8
deploy_postgres_vhosts.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
- name: Deploy PostgreSQL on vhosts
|
||||||
|
hosts: "{{ postgresql_target | default('postgresql') }}"
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
group: "{{ group | default(postgresql_target | default('postgresql')) }}"
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/common/
|
||||||
|
- roles/vhosts/postgres/
|
||||||
10
deploy_redis_vhosts.yml
Normal file
10
deploy_redis_vhosts.yml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
- name: Setup Redis server
|
||||||
|
hosts: cn-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/Redis/
|
||||||
|
- name: Setup Redis server
|
||||||
|
hosts: global-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/Redis/
|
||||||
21
deploy_tiny_monitor_server_vhost.yml
Normal file
21
deploy_tiny_monitor_server_vhost.yml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
- name: setup tiny monitor server
|
||||||
|
hosts: cn-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
group: cn-homepage.svc.plus
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/common/
|
||||||
|
- roles/vhosts/prometheus/
|
||||||
|
- roles/vhosts/grafana/
|
||||||
|
- roles/vhosts/nginx/
|
||||||
|
|
||||||
|
- name: setup tiny monitor server
|
||||||
|
hosts: global-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
group: global-homepage.svc.plus
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/common/
|
||||||
|
- roles/vhosts/prometheus/
|
||||||
|
- roles/vhosts/grafana/
|
||||||
|
- roles/vhosts/nginx/
|
||||||
55
deploy_vhosts_otel-collector.yml
Normal file
55
deploy_vhosts_otel-collector.yml
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
- name: setup otel exporters
|
||||||
|
hosts: otel.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
group: web
|
||||||
|
otlp_endpoint: https://otel.svc.plus/api/default/
|
||||||
|
otlp_auth: "Basic cm9vdEBleGFtcGxlLmNvbTpRN01wRjZBTzZFelRjRjdJ"
|
||||||
|
otel_prometheus_node_static_configs:
|
||||||
|
- targets: ['172.31.2.33:9100']
|
||||||
|
labels:
|
||||||
|
vendor: aws
|
||||||
|
account: prod
|
||||||
|
group: core
|
||||||
|
name: tky-proxy.svc.plus
|
||||||
|
iid: '172.31.2.33'
|
||||||
|
- targets: ['167.179.72.223:9100']
|
||||||
|
labels:
|
||||||
|
vendor: aws
|
||||||
|
account: prod
|
||||||
|
group: web-system
|
||||||
|
name: global-homepage.svc.plus
|
||||||
|
iid: '167.179.72.223'
|
||||||
|
- targets: ['47.120.61.35:9100']
|
||||||
|
labels:
|
||||||
|
vendor: alicloud
|
||||||
|
account: prod
|
||||||
|
group: web-system
|
||||||
|
name: cn-homepage.svc.plus
|
||||||
|
iid: '47.120.61.35'
|
||||||
|
otel_prometheus_process_static_configs:
|
||||||
|
- targets: ['172.31.2.33:9256']
|
||||||
|
labels:
|
||||||
|
vendor: aws
|
||||||
|
account: prod
|
||||||
|
group: core
|
||||||
|
name: tky-proxy.svc.plus
|
||||||
|
iid: '172.31.2.33'
|
||||||
|
- targets: ['167.179.72.223:9256']
|
||||||
|
labels:
|
||||||
|
vendor: aws
|
||||||
|
account: prod
|
||||||
|
group: web-system
|
||||||
|
name: global-homepage.svc.plus
|
||||||
|
iid: '167.179.72.223'
|
||||||
|
- targets: ['47.120.61.35:9256']
|
||||||
|
labels:
|
||||||
|
vendor: alicloud
|
||||||
|
account: prod
|
||||||
|
group: web-system
|
||||||
|
name: cn-homepage.svc.plus
|
||||||
|
iid: '47.120.61.35'
|
||||||
|
exporters:
|
||||||
|
endpoint: https://otel.svc.plus/api/default/
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/otel-collector/
|
||||||
8
deploy_xcontrol_server._vhosts.yml
Normal file
8
deploy_xcontrol_server._vhosts.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
- name: setup xcontrol server
|
||||||
|
hosts: cn-homepage.svc.plus
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
group: cn-homepage.svc.plus
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/common/
|
||||||
|
- roles/vhosts/xcontrol_server/
|
||||||
8
deploy_xcontrol_web.yml
Normal file
8
deploy_xcontrol_web.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
- name: setup xcontrol web
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
group: mail
|
||||||
|
roles:
|
||||||
|
#- roles/vhosts/common/
|
||||||
|
- roles/vhosts/nodejs/
|
||||||
12
deploy_zitadel_docker.yaml
Normal file
12
deploy_zitadel_docker.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
- name: setup zitadel
|
||||||
|
hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
zitadel_target_host: auth.svc.plus
|
||||||
|
zitadel_domain: "{{ domain }}"
|
||||||
|
zitadel_masterkey: MasterkeyNeedsToHave32Characters
|
||||||
|
zitadel_workspace: /opt/zitadel
|
||||||
|
roles:
|
||||||
|
#- vhosts/common/
|
||||||
|
- vhosts/docker/
|
||||||
|
- docker/zitadel/
|
||||||
1
docs/alicloud_dns_sync.md
Normal file
1
docs/alicloud_dns_sync.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
ansible-playbook batch_dns_sync.yml --extra-vars "aliyun_ak=XXXX aliyun_sk=YYYY"
|
||||||
15
gpu_k8s_init.yml
Normal file
15
gpu_k8s_init.yml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
# Use the inventory hostname for delegation so Ansible
|
||||||
|
# applies the correct connection variables
|
||||||
|
ops_host: "k8s-1"
|
||||||
|
masters:
|
||||||
|
- "k8s-1"
|
||||||
|
nodes:
|
||||||
|
- "k8s-2"
|
||||||
|
- "k8s-3"
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/common/
|
||||||
|
- roles/vhosts/ssh-trust/
|
||||||
|
- roles/vhosts/gpu-k8s/
|
||||||
13
gpu_k8s_reset.yml
Normal file
13
gpu_k8s_reset.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
- hosts: all
|
||||||
|
become: true
|
||||||
|
vars:
|
||||||
|
# Use the inventory hostname for delegation so Ansible
|
||||||
|
# applies the correct connection variables
|
||||||
|
ops_host: "k8s-1"
|
||||||
|
masters:
|
||||||
|
- "k8s-1"
|
||||||
|
nodes:
|
||||||
|
- "k8s-2"
|
||||||
|
- "k8s-3"
|
||||||
|
roles:
|
||||||
|
- roles/vhosts/gpu-k8s-reset/
|
||||||
17
init-harbor-server
Normal file
17
init-harbor-server
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
- name: setup harbor
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: harbor
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
namespace: harbor
|
||||||
|
db_namespace: database
|
||||||
|
update_secret: true
|
||||||
|
tls:
|
||||||
|
- secret_name: harbor-tls
|
||||||
|
keyfile: /etc/ssl/onwalk.net.key
|
||||||
|
certfile: /etc/ssl/onwalk.net.pem
|
||||||
17
init_chaos_mesh
Normal file
17
init_chaos_mesh
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
- name: setup chaos-mesh server
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: chaos-mesh
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
domain: onwalk.net
|
||||||
|
namespace: chaos-mesh
|
||||||
|
update_secret: true
|
||||||
|
tls:
|
||||||
|
- secret_name: chaos-mesh-tls
|
||||||
|
keyfile: /etc/ssl/onwalk.net.key
|
||||||
|
certfile: /etc/ssl/onwalk.net.pem
|
||||||
8
init_chartmuseum
Normal file
8
init_chartmuseum
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- name: deploy chartmuseum
|
||||||
|
hosts: all
|
||||||
|
user: ubuntu
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
roles:
|
||||||
|
- chartmuseum
|
||||||
16
init_deepflow
Normal file
16
init_deepflow
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
- name: setup deepflow server
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: deepflow
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
update_secret: true
|
||||||
|
namespace: monitoring
|
||||||
|
tls:
|
||||||
|
- secret_name: obs-tls
|
||||||
|
keyfile: /etc/ssl/onwalk.net.key
|
||||||
|
certfile: /etc/ssl/onwalk.net.pem
|
||||||
16
init_flagger-loadtester
Normal file
16
init_flagger-loadtester
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
- name: setup flagger-loadtester server
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: flagger-loadtester
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
update_secret: true
|
||||||
|
namespace: loadtester
|
||||||
|
tls:
|
||||||
|
- secret_name: obs-tls
|
||||||
|
keyfile: /etc/ssl/${DOMAIN}.key
|
||||||
|
certfile: /etc/ssl/${DOMAIN}.pem
|
||||||
23
init_gitlab
Normal file
23
init_gitlab
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
- name: setup gitlab
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: gitlab
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
gitlab_version: '7.0.4'
|
||||||
|
namespace: gitlab
|
||||||
|
db_namespace: database
|
||||||
|
domain: onwalk.net
|
||||||
|
auto_issuance: false
|
||||||
|
update_secret: true
|
||||||
|
tls:
|
||||||
|
- secret_name: gitlab-tls
|
||||||
|
keyfile: /etc/ssl/onwalk.net.key
|
||||||
|
certfile: /etc/ssl/onwalk.net.pem
|
||||||
|
gitlab_oidc_client_id: gitlab-oidc
|
||||||
|
gitlab_oidc_isser: 'https://keycloak.onwalk.net/realms/cloud-sso'
|
||||||
|
gitlab_oidc_redirect_uri: 'https://gitlab.onwalk.net/users/auth/openid_connect/callback'
|
||||||
8
init_grafana_alloy
Normal file
8
init_grafana_alloy
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- name: deploy grafana alloy agent
|
||||||
|
hosts: all
|
||||||
|
user: ubuntu
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
roles:
|
||||||
|
- alloy
|
||||||
8
init_harbor_server
Normal file
8
init_harbor_server
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- name: deploy harbor server
|
||||||
|
hosts: all
|
||||||
|
user: ubuntu
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
roles:
|
||||||
|
- harbor
|
||||||
18
init_jenkins
Normal file
18
init_jenkins
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
- name: setup jenkins server
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: jenkins
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
domain: onwalk.net
|
||||||
|
namespace: jenkins
|
||||||
|
update_secret: true
|
||||||
|
db_namespace: database
|
||||||
|
tls:
|
||||||
|
- secret_name: jenkins-tls
|
||||||
|
keyfile: /etc/ssl/onwalk.net.key
|
||||||
|
certfile: /etc/ssl/onwalk.net.pem
|
||||||
8
init_k3s_cluster_agent
Normal file
8
init_k3s_cluster_agent
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- name: Initialize K3s Cluster Agent
|
||||||
|
hosts: all
|
||||||
|
user: ubuntu
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
roles:
|
||||||
|
- k3s-cluster-agent
|
||||||
8
init_k3s_cluster_server
Normal file
8
init_k3s_cluster_server
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- name: Initialize K3s Cluster Server
|
||||||
|
hosts: all
|
||||||
|
user: ubuntu
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
roles:
|
||||||
|
- k3s-cluster-server
|
||||||
27
init_k3s_cluster_std
Normal file
27
init_k3s_cluster_std
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
- name: set artifact cluster with vhosts
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: k3s-reset
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
cluster_reset: 'enable'
|
||||||
|
- include_role:
|
||||||
|
name: k3s
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
cni: default
|
||||||
|
version: 'v1.27.2+k3s1'
|
||||||
|
pod_cidr: '10.10.0.0/16'
|
||||||
|
svc_cidr: '172.16.0.0/16'
|
||||||
|
enable_api_access: true
|
||||||
|
- include_role:
|
||||||
|
name: k3s-addon
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
ingress: nginx
|
||||||
|
external_dns: enable
|
||||||
|
cert_issuance: vault
|
||||||
38
init_k3s_cluster_with_argo_server
Normal file
38
init_k3s_cluster_with_argo_server
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
- name: set artifact cluster with vhosts
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: k3s-reset
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
cluster_reset: 'enable'
|
||||||
|
- include_role:
|
||||||
|
name: k3s
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
cni: default
|
||||||
|
version: 'v1.27.2+k3s1'
|
||||||
|
pod_cidr: '10.10.0.0/16'
|
||||||
|
svc_cidr: '172.16.0.0/16'
|
||||||
|
enable_api_access: true
|
||||||
|
- include_role:
|
||||||
|
name: k3s-addon
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
ingress: disable
|
||||||
|
external_dns: disable
|
||||||
|
cert_issuance: vault
|
||||||
|
- include_role:
|
||||||
|
name: argo-server
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
namespace: argocd
|
||||||
|
domain: onwalk.net
|
||||||
|
update_secret: true
|
||||||
|
tls:
|
||||||
|
- secret_name: argocd-server-tls
|
||||||
|
keyfile: /etc/ssl/onwalk.net.key
|
||||||
|
certfile: /etc/ssl/onwalk.net.pem
|
||||||
13
init_observability-agent
Normal file
13
init_observability-agent
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
- name: setup observability agent
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: observability-agent
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
namespace: monitoring
|
||||||
|
deepflowserverip: 10.146.0.8
|
||||||
|
deepflowk8sclusterid: d-kqjofXyZbg
|
||||||
29
init_observability-server
Normal file
29
init_observability-server
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
- name: setup observability server
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: observability-server
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
update_secret: true
|
||||||
|
auto_issuance: false
|
||||||
|
namespace: monitoring
|
||||||
|
db_namespace: database
|
||||||
|
tls:
|
||||||
|
- secret_name: obs-tls
|
||||||
|
keyfile: /etc/ssl/svc.ink.key
|
||||||
|
certfile: /etc/ssl/svc.ink.pem
|
||||||
|
- include_role:
|
||||||
|
name: flagger-loadtester
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
update_secret: true
|
||||||
|
auto_issuance: false
|
||||||
|
namespace: loadtester
|
||||||
|
tls:
|
||||||
|
- secret_name: obs-tls
|
||||||
|
keyfile: /etc/ssl/svc.ink.key
|
||||||
|
certfile: /etc/ssl/svc.ink.pem
|
||||||
18
init_openldap
Normal file
18
init_openldap
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
- name: setup openldap
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: openldap
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
namespace: itsm
|
||||||
|
domain: onwalk.net
|
||||||
|
update_secret: true
|
||||||
|
auto_issuance: false
|
||||||
|
tls:
|
||||||
|
- secret_name: openldap-tls
|
||||||
|
keyfile: /etc/ssl/onwalk.net.key
|
||||||
|
certfile: /etc/ssl/onwalk.net.pem
|
||||||
13
init_splunk-otel-collector
Normal file
13
init_splunk-otel-collector
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
- name: setup splunk otel collector
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: splunk-otel-collector
|
||||||
|
vars:
|
||||||
|
group: master
|
||||||
|
namespace: default
|
||||||
|
splunk_hec_url: https://xxxx.splunkcloud.com:8088/services/collector/event
|
||||||
|
splunk_hec_token: "token-xxxxxx"
|
||||||
10
init_telegraf
Normal file
10
init_telegraf
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
- name: Setup telegraf
|
||||||
|
hosts: all
|
||||||
|
user: root
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
tasks:
|
||||||
|
- include_role:
|
||||||
|
name: telegraf
|
||||||
|
vars:
|
||||||
|
update_secret: true
|
||||||
8
init_vault
Normal file
8
init_vault
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- name: deploy vault server
|
||||||
|
hosts: all
|
||||||
|
user: ubuntu
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
roles:
|
||||||
|
- vault
|
||||||
7
init_vpn_gateway.yml
Executable file
7
init_vpn_gateway.yml
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- hosts: vpn-gateway
|
||||||
|
user: ubuntu
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
roles:
|
||||||
|
- wireguard-gateway
|
||||||
32
inventory.ini
Normal file
32
inventory.ini
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
[web]
|
||||||
|
cn-homepage.svc.plus ansible_host=47.120.61.35
|
||||||
|
global-homepage.svc.plus ansible_host=167.179.72.223
|
||||||
|
|
||||||
|
[deepflow_agents]
|
||||||
|
192.168.1.101 ansible_user=root ansible_ssh_pass=pass101
|
||||||
|
192.168.1.102 ansible_user=admin ansible_ssh_pass=pass102
|
||||||
|
192.168.1.103 ansible_user=root ansible_ssh_pass=pass103 ansible_port=2222
|
||||||
|
192.168.1.104 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa_ubuntu
|
||||||
|
|
||||||
|
[mail]
|
||||||
|
smtp.svc.plus ansible_host=45.130.167.90
|
||||||
|
|
||||||
|
[bootstrap]
|
||||||
|
auth.svc.plus ansible_host=34.92.122.119 ansible_user=root ansible_ssh_private_key_file=~/.ssh/id_rsa
|
||||||
|
|
||||||
|
[all:vars]
|
||||||
|
ansible_port=22
|
||||||
|
ansible_user=root
|
||||||
|
ansible_host_key_checking=False
|
||||||
|
|
||||||
|
# SSH 密钥或密码(二选一)
|
||||||
|
# ansible_ssh_private_key_file=~/.ssh/id_rsa
|
||||||
|
# ansible_ssh_pass=your_password
|
||||||
|
|
||||||
|
# DeepFlow agent 配置变量
|
||||||
|
controller_ips=["10.10.10.10", "10.10.10.11"]
|
||||||
|
vtap_group_id="g-P22vLIMdB6"
|
||||||
|
|
||||||
|
# DeepFlow agent 安装包位置
|
||||||
|
agent_base_dir="deepflow-agent-for-linux"
|
||||||
|
agent_package_name="deepflow-agent-1.0-5407.systemd.x86_64.rpm"
|
||||||
7
keycloak_server
Normal file
7
keycloak_server
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
- hosts: all
|
||||||
|
user: ubuntu
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
roles:
|
||||||
|
- keycloak
|
||||||
48
pre_setup.sh
Normal file
48
pre_setup.sh
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Function to check if a variable is empty
|
||||||
|
check_empty() {
|
||||||
|
if [ -z "${!1}" ]; then
|
||||||
|
echo "$1 is empty. Aborting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# List of variables to check
|
||||||
|
variables=("DNS_AK" "DNS_SK" "OSS_AK" "OSS_SK" "ROOT_PASSWORD" "SMTP_PASSWORD" "GITLAB_OIDC_CLIENT_TOKEN" "HARBOR_OIDC_CLIENT_TOKEN" "SSH_USER" "SSH_HOST_IP" "SSH_HOST_DOMAIN" "SSH_PRIVATE_KEY")
|
||||||
|
|
||||||
|
# Loop through variables and check if each one is empty
|
||||||
|
for var in "${variables[@]}"; do
|
||||||
|
check_empty "$var"
|
||||||
|
done
|
||||||
|
|
||||||
|
sudo apt install jq ansible -y
|
||||||
|
|
||||||
|
mkdir -pv ~/.ssh/
|
||||||
|
cat > ~/.ssh/id_rsa << EOF
|
||||||
|
$SSH_PRIVATE_KEY
|
||||||
|
EOF
|
||||||
|
sudo chmod 0400 ~/.ssh/id_rsa
|
||||||
|
md5sum ~/.ssh/id_rsa
|
||||||
|
|
||||||
|
mkdir -pv hosts/
|
||||||
|
|
||||||
|
cat > hosts/inventory << EOF
|
||||||
|
[master]
|
||||||
|
$SSH_HOST_DOMAIN ansible_host=$SSH_HOST_IP
|
||||||
|
|
||||||
|
[all:vars]
|
||||||
|
ansible_port=22
|
||||||
|
ansible_ssh_user=$SSH_USER
|
||||||
|
ansible_ssh_private_key_file=~/.ssh/id_rsa
|
||||||
|
ansible_host_key_checking=False
|
||||||
|
ingress_ip=$SSH_HOST_IP
|
||||||
|
dns_ak=$DNS_AK
|
||||||
|
dns_sk=$DNS_SK
|
||||||
|
oss_ak=$OSS_AK
|
||||||
|
oss_sk=$OSS_SK
|
||||||
|
admin_password=$ROOT_PASSWORD
|
||||||
|
smtp_password=$SMTP_PASSWORD
|
||||||
|
gitlab_oidc_client_token=$GITLAB_OIDC_CLIENT_TOKEN
|
||||||
|
harbor_oidc_client_token=$HARBOR_OIDC_CLIENT_TOKEN
|
||||||
|
EOF
|
||||||
8
renew_nodes_ssl_certs
Normal file
8
renew_nodes_ssl_certs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- name: renew nodes ssl certs
|
||||||
|
hosts: all
|
||||||
|
user: ubuntu
|
||||||
|
become: yes
|
||||||
|
gather_facts: yes
|
||||||
|
roles:
|
||||||
|
- cert-manager
|
||||||
33
roles/README.md
Normal file
33
roles/README.md
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# Playbook roles planning
|
||||||
|
|
||||||
|
This document clarifies what should live under `/playbooks/roles/` for host-level automation (Ansible) versus what should be delivered through Helm charts, and ensures we cover the five tiers across data platforms: data warehouse → big data → ML → DL → large models.
|
||||||
|
|
||||||
|
## Scope rules
|
||||||
|
- **Ansible roles**: host-coupled configuration that is not itself a cloud resource (GPU driver/runtime, OS tuning, user/SSH prep, rendering on-host config files, database bootstrapping, etc.).
|
||||||
|
- **Helm charts**: anything that runs as a Kubernetes workload (operators, clusters, services running in pods).
|
||||||
|
|
||||||
|
## Base roles shared across tiers (Ansible)
|
||||||
|
- GPU driver and CUDA stack installation.
|
||||||
|
- Docker/Containerd runtime setup.
|
||||||
|
- System parameter tuning (kernel limits, hugepages, network stack), plus user home/SSH layout.
|
||||||
|
- Database initialization tasks (e.g., bootstrap PostgreSQL/ClickHouse on hosts) and rendering templated configs such as `ClickHouse/users.xml`.
|
||||||
|
|
||||||
|
## Coverage by capability tier
|
||||||
|
| Tier | Host-focused roles (Ansible) | Kubernetes services (Helm) |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Data warehouse | ClickHouse host bootstrap & config render; PostgreSQL init where needed. | — |
|
||||||
|
| Big data | JVM/runtime, local disks, and OS tuning for data nodes. | Spark Operator; Flink Operator; Kafka/Redpanda; MinIO. |
|
||||||
|
| ML | GPU runtime base (drivers, container runtime), Python ML base image prep; user workspace/SSH. | Ray Cluster; MLflow; JupyterHub. |
|
||||||
|
| DL | Same GPU/system tuning plus inference node bootstrap (tensorRT/cuDNN as needed). | Triton Inference Server; LMDeploy (for deployment runtimes). |
|
||||||
|
| Large models | Secure SSH/user profiles and config templating for model storage/IO. | vLLM serving; model-specific Helm releases atop Ray/K8s. |
|
||||||
|
|
||||||
|
## Suggested role layout under `/playbooks/roles/`
|
||||||
|
- `common/` (new): shared tasks for system tuning, users/SSH, and package repos for GPU/runtime support.
|
||||||
|
- `gpu/`: install GPU drivers + CUDA toolkit.
|
||||||
|
- `container_runtime/`: install and configure Docker/Containerd with GPU runtime integration.
|
||||||
|
- `database_init/`: bootstrap on-host databases (e.g., PostgreSQL, ClickHouse), render config files (`users.xml`, etc.).
|
||||||
|
- `bigdata_node_prep/`: OS/disk tuning for Spark/Flink/Kafka/Redpanda/MinIO hosts.
|
||||||
|
- `ml_node_prep/`: Python/conda base, SSH workspace prep for ML workloads.
|
||||||
|
- `dl_inference_node/`: tensorRT/cuDNN dependencies and runtime checks for Triton/LMDeploy nodes.
|
||||||
|
|
||||||
|
Helm-delivered components should live under `playbooks/roles/charts/` or the repo’s Helm release structure and include Spark/Flink Operators, Kafka/Redpanda/MinIO, Ray Cluster, Triton, vLLM/LMDeploy, MLflow, and JupyterHub.
|
||||||
2
roles/charts/app/meta/main.yml
Normal file
2
roles/charts/app/meta/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
dependencies:
|
||||||
|
- role: common
|
||||||
16
roles/charts/app/tasks/main.yml
Executable file
16
roles/charts/app/tasks/main.yml
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
- name: Prep DIR
|
||||||
|
shell: "mkdir -pv /tmp/app/"
|
||||||
|
|
||||||
|
- name: Prep NameSpace
|
||||||
|
shell: "kubectl create namespace default || echo true"
|
||||||
|
|
||||||
|
- name: Sync Deploy yaml
|
||||||
|
template: src=templates/{{ item }} dest=/tmp/app/{{ item }} owner=root group=root mode=0644 force=yes unsafe_writes=yes
|
||||||
|
with_items:
|
||||||
|
- deploy-app.yaml
|
||||||
|
|
||||||
|
- name: Setup App
|
||||||
|
shell: "kubectl apply -f /tmp/app/{{ item }}"
|
||||||
|
when: inventory_hostname in groups[group]
|
||||||
|
with_items:
|
||||||
|
- deploy-app.yaml
|
||||||
2
roles/charts/app/templates/.gitignore
vendored
Normal file
2
roles/charts/app/templates/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/clickhouse-keeper-k8s.iml
|
||||||
|
/.idea/
|
||||||
18
roles/charts/app/templates/deploy-app.yaml
Normal file
18
roles/charts/app/templates/deploy-app.yaml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: app
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: demo
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: demo
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: demo
|
||||||
|
image: {{ app_image }}:{{ app_tag }}
|
||||||
|
imagePullPolicy: Always
|
||||||
100
roles/charts/argo-server/files/setup-argocd.sh
Normal file
100
roles/charts/argo-server/files/setup-argocd.sh
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# 检查参数是否为空
|
||||||
|
check_not_empty() {
|
||||||
|
if [[ -z $1 ]]; then
|
||||||
|
echo "Error: $2 is empty. Please provide a value."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
helm repo add argo https://argoproj.github.io/argo-helm
|
||||||
|
helm repo update
|
||||||
|
|
||||||
|
# 使用 Helm 部署 Argo CD
|
||||||
|
#helm upgrade --install argocd argo/argo-cd -n argocd --create-namespace
|
||||||
|
|
||||||
|
cat <<EOF > values.yaml
|
||||||
|
global:
|
||||||
|
domain: argocd.onwalk.net
|
||||||
|
server:
|
||||||
|
service:
|
||||||
|
type: ClusterIP
|
||||||
|
servicePortHttp: 80
|
||||||
|
servicePortHttps: 443
|
||||||
|
servicePortHttpName: http
|
||||||
|
servicePortHttpsName: https
|
||||||
|
ingress:
|
||||||
|
enabled: false
|
||||||
|
ingressClassName: "nginx"
|
||||||
|
hostname: argocd.onwalk.net
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
|
||||||
|
nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
|
||||||
|
tls: true
|
||||||
|
repoServer:
|
||||||
|
extraContainers:
|
||||||
|
- name: helmfile
|
||||||
|
image: ghcr.io/helmfile/helmfile:v0.157.0
|
||||||
|
# Entrypoint should be Argo CD lightweight CMP server i.e. argocd-cmp-server
|
||||||
|
command: ["/var/run/argocd/argocd-cmp-server"]
|
||||||
|
env:
|
||||||
|
- name: HELM_CACHE_HOME
|
||||||
|
value: /tmp/helm/cache
|
||||||
|
- name: HELM_CONFIG_HOME
|
||||||
|
value: /tmp/helm/config
|
||||||
|
- name: HELMFILE_CACHE_HOME
|
||||||
|
value: /tmp/helmfile/cache
|
||||||
|
- name: HELMFILE_TEMPDIR
|
||||||
|
value: /tmp/helmfile/tmp
|
||||||
|
securityContext:
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 999
|
||||||
|
volumeMounts:
|
||||||
|
- mountPath: /var/run/argocd
|
||||||
|
name: var-files
|
||||||
|
- mountPath: /home/argocd/cmp-server/plugins
|
||||||
|
name: plugins
|
||||||
|
# Register helmfile plugin into sidecar
|
||||||
|
- mountPath: /home/argocd/cmp-server/config/plugin.yaml
|
||||||
|
subPath: helmfile.yaml
|
||||||
|
name: argocd-cmp-cm
|
||||||
|
# Starting with v2.4, do NOT mount the same tmp volume as the repo-server container. The filesystem separation helps mitigate path traversal attacks.
|
||||||
|
- mountPath: /tmp
|
||||||
|
name: helmfile-tmp
|
||||||
|
volumes:
|
||||||
|
- name: argocd-cmp-cm
|
||||||
|
configMap:
|
||||||
|
name: argocd-cmp-cm
|
||||||
|
- name: helmfile-tmp
|
||||||
|
emptyDir: {}
|
||||||
|
configs:
|
||||||
|
cmp:
|
||||||
|
create: true
|
||||||
|
plugins:
|
||||||
|
helmfile:
|
||||||
|
allowConcurrency: true
|
||||||
|
discover:
|
||||||
|
fileName: helmfile.yaml
|
||||||
|
generate:
|
||||||
|
command:
|
||||||
|
- bash
|
||||||
|
- "-c"
|
||||||
|
- |
|
||||||
|
if [[ -v ENV_NAME ]]; then
|
||||||
|
helmfile -n "$ARGOCD_APP_NAMESPACE" -e $ENV_NAME template --include-crds -q
|
||||||
|
elif [[ -v ARGOCD_ENV_ENV_NAME ]]; then
|
||||||
|
helmfile -n "$ARGOCD_APP_NAMESPACE" -e "$ARGOCD_ENV_ENV_NAME" template --include-crds -q
|
||||||
|
else
|
||||||
|
helmfile -n "$ARGOCD_APP_NAMESPACE" template --include-crds -q
|
||||||
|
fi
|
||||||
|
lockRepo: false
|
||||||
|
EOF
|
||||||
|
|
||||||
|
helm upgrade --install argocd argo/argo-cd -n argocd -f values.yaml
|
||||||
|
|
||||||
|
# 等待 Argo CD 完全启动
|
||||||
|
echo "Waiting for Argo CD to be ready..."
|
||||||
|
kubectl wait --for=condition=ready pod -l app.kubernetes.io/name=argocd-server -n argocd --timeout=180s
|
||||||
|
|
||||||
|
echo "Argo CD deployment and configuration complete."
|
||||||
2
roles/charts/argo-server/meta/main.yml
Normal file
2
roles/charts/argo-server/meta/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
dependencies:
|
||||||
|
- role: cert-manager
|
||||||
2
roles/charts/argo-server/tasks/main.yml
Executable file
2
roles/charts/argo-server/tasks/main.yml
Executable file
@ -0,0 +1,2 @@
|
|||||||
|
- name: Set ArgoCD Contoller
|
||||||
|
script: files/setup-argocd.sh
|
||||||
24
roles/charts/chaos-mesh/files/setup.sh
Normal file
24
roles/charts/chaos-mesh/files/setup.sh
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -x
|
||||||
|
export domain=$1
|
||||||
|
export secret=$2
|
||||||
|
export namespace=$3
|
||||||
|
|
||||||
|
cat > values.yaml << EOF
|
||||||
|
chaosDaemon:
|
||||||
|
runtime: containerd
|
||||||
|
socketPath: /run/k3s/containerd/containerd.sock
|
||||||
|
dashboard:
|
||||||
|
create: true
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: "nginx"
|
||||||
|
hosts:
|
||||||
|
- name: chaos-mesh.$domain
|
||||||
|
tls: true
|
||||||
|
tlsSecret: $secret
|
||||||
|
EOF
|
||||||
|
|
||||||
|
helm repo add chaos-mesh https://charts.chaos-mesh.org
|
||||||
|
helm repo update
|
||||||
|
helm upgrade --install chaos-mesh chaos-mesh/chaos-mesh -n $namespace --create-namespace --version 2.6.3 -f values.yaml
|
||||||
124
roles/charts/chaos-mesh/howto.md
Normal file
124
roles/charts/chaos-mesh/howto.md
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
# Jenkins Mater 部署
|
||||||
|
|
||||||
|
# Jenkins Node IaC Runner 设置
|
||||||
|
1. 安装git terraform
|
||||||
|
|
||||||
|
## GitLab to trigger Jenkins
|
||||||
|
|
||||||
|
1. Gitlab https://gitlab.xxx.com/-/profile/personal_access_tokens
|
||||||
|
|
||||||
|
2. GitLab和Jenkins的集成可以让你在GitLab中的代码更新后自动触发Jenkins的构建任务。以下是配置GitLab插件和Jenkins以实现GitLab触发Jenkins的步骤:
|
||||||
|
3. 在Jenkins中安装GitLab插件
|
||||||
|
首先,你需要在Jenkins中安装GitLab插件。登录到Jenkins的管理界面,然后转到“Manage Jenkins” > “Manage Plugins” > “Available”,在搜索框中输入“GitLab”,找到并安装“GitLab Plugin”。
|
||||||
|
4. 在Jenkins中配置GitLab连接
|
||||||
|
安装完插件后,你需要配置GitLab的连接。转到“Manage Jenkins” > “Configure System”,滚动到“GitLab”部分,点击“Add GitLab Server” > “Server”,输入你的GitLab服务器URL,并生成并输入一个与你的GitLab账户相关联的API Token。
|
||||||
|
5. 在Jenkins中创建一个新的任务
|
||||||
|
创建一个新的任务,并在源代码管理部分选择“Git”,输入你的GitLab项目的URL。在构建触发器部分,选择“Build when a change is pushed to GitLab”。
|
||||||
|
记录:GitLab webhook URL: https://jenkins.xxx.xxx/project/alicloud-oss-pipeline
|
||||||
|
6. 在GitLab中配置Webhook
|
||||||
|
在你的GitLab项目中,转到“Settings” > “Integrations” -> 启用"Jenkins"
|
||||||
|
- 在URL中输入步骤5记录的 Webhook URL https://jenkins.xxx.xxx/project/alicloud-oss-pipeline
|
||||||
|
- 选择你想要触发Jenkins任务的事件(例如,当代码被推送时)
|
||||||
|
- Project name: 输入项目名称
|
||||||
|
- Username: Jenkins 用户名
|
||||||
|
- Password: Jenkins 认证密码
|
||||||
|
- 保存更改, 测试设置,返回状态200为配置正确
|
||||||
|
|
||||||
|
以上就是配置GitLab插件和Jenkins以实现GitLab触发Jenkins的步骤。在完成这些步骤后,每当你的GitLab项目有更新时,都会自动触发对应的Jenkins构建任务。
|
||||||
|
|
||||||
|
## 要将GitHub代码仓库与Jenkins关联起来,您需要完成以下步骤:
|
||||||
|
|
||||||
|
1 要在 GitHub 中启用 webhook 功能以触发 Jenkins 构建,请按照以下步骤操作:
|
||||||
|
2 进入 GitHub 仓库设置:在要设置 webhook 的 GitHub 仓库页面上,点击右上角的“Settings”。
|
||||||
|
3 选择 Webhooks 选项:在仓库设置页面的左侧菜单中,选择“Webhooks”。
|
||||||
|
4 添加 Webhook:在 Webhooks 页面的右上角,点击“Add webhook”。
|
||||||
|
|
||||||
|
配置 Webhook:
|
||||||
|
|
||||||
|
1. Payload URL:输入 Jenkins 服务器的 webhook URL。格式应为 http://your-jenkins-server/github-webhook/。确保替换 your-jenkins-server 为您 Jenkins 服务器的实际地址。
|
||||||
|
2. Content type:选择 application/json。
|
||||||
|
3. Secret(可选):如果需要额外的安全性,可以输入一个秘密令牌。
|
||||||
|
4. SSL verification:选择是否验证 SSL 证书。
|
||||||
|
5. Which events would you like to trigger this webhook?:选择触发 webhook 的事件。通常选择 Just the push event(只有推送事件)或 Let me select individual events(让我选择单独的事件)并选择适当的事件(例如,push、pull request 等)。
|
||||||
|
添加 Webhook:点击页面底部的“Add webhook”按钮以保存配置。
|
||||||
|
|
||||||
|
完成以上步骤后,您的 GitHub 仓库就配置好了一个 webhook,可以触发 Jenkins 构建。记得在 Jenkins 中设置相应的任务来响应这些 webhook。
|
||||||
|
|
||||||
|
|
||||||
|
安装Jenkins插件:
|
||||||
|
|
||||||
|
确保您的Jenkins实例已经安装了“GitHub”和“GitHub Integration”插件。您可以在Jenkins管理界面的“插件管理”部分进行安装。
|
||||||
|
配置GitHub Webhook:
|
||||||
|
|
||||||
|
在GitHub仓库的设置中,找到“Webhooks”部分并添加一个新的Webhook。
|
||||||
|
将“Payload URL”设置为您的Jenkins服务器的URL,通常是这样的格式:http://<JENKINS_URL>/github-webhook/。
|
||||||
|
选择触发Webhook的事件,通常是“Just the push event”或者“Send me everything”。
|
||||||
|
确保“Content type”设置为“application/json”。
|
||||||
|
点击“Add webhook”保存设置。
|
||||||
|
配置Jenkins Job:
|
||||||
|
|
||||||
|
在Jenkins中创建一个新的构建任务或者配置现有的任务。
|
||||||
|
在“源码管理”部分,选择“Git”并填写您的GitHub仓库的URL。
|
||||||
|
在“构建触发器”部分,选择“GitHub hook trigger for GITScm polling”选项。这样,每当GitHub仓库有新的推送事件时,Jenkins就会自动触发构建。
|
||||||
|
测试配置:
|
||||||
|
|
||||||
|
推送一些改动到您的GitHub仓库,检查是否触发了Jenkins构建。
|
||||||
|
在Jenkins的构建历史中查看构建是否成功执行。
|
||||||
|
通过完成以上步骤,您的GitHub代码仓库就与Jenkins关联起来了,可以实现自动触发构建的功能。
|
||||||
|
|
||||||
|
要在 Jenkins 中设置 GitHub 服务,您需要进行以下步骤:
|
||||||
|
|
||||||
|
安装 GitHub 插件:首先确保您的 Jenkins 实例已安装 GitHub 插件。如果尚未安装,请转到 Jenkins 的“插件管理”页面,在“可选插件”选项卡中搜索并安装 GitHub 插件。
|
||||||
|
|
||||||
|
配置 GitHub 服务器:在 Jenkins 管理界面中,转到“系统管理” > “系统设置”。
|
||||||
|
|
||||||
|
在系统设置页面中,找到并点击“GitHub”部分。
|
||||||
|
点击“Add GitHub Server”添加一个新的 GitHub 服务器配置。
|
||||||
|
在配置页面中,输入一个描述性的名称,例如“GitHub”。
|
||||||
|
在 GitHub API URL 中输入 GitHub 的 API 地址。通常为 https://api.github.com。
|
||||||
|
如果您的 GitHub 仓库需要身份验证,请在“凭据”部分选择一个已配置的凭据。如果尚未配置凭据,请点击“Add”添加一个新的凭据,选择类型为“Secret text”或“Username with password”,然后输入您的 GitHub 用户名和密码或访问令牌。
|
||||||
|
完成配置后,点击“保存”保存 GitHub 服务器配置。
|
||||||
|
验证配置:您可以在配置页面的底部点击“Test connection”来验证您的 GitHub 服务器配置是否正常工作。
|
||||||
|
|
||||||
|
保存设置:确保在完成配置后点击“保存”保存更改。
|
||||||
|
|
||||||
|
现在,您已成功配置了 Jenkins 的 GitHub 服务。您可以在 Jenkins 任务中使用这个配置来与 GitHub 仓库进行集成,例如触发构建、拉取代码等操作。
|
||||||
|
|
||||||
|
|
||||||
|
对于 Jenkins 中的 GitHub API URL (https://api.github.com) 的凭据设置,您可以使用 GitHub Personal Access Token。这个 Token 可以通过以下步骤生成:
|
||||||
|
|
||||||
|
在 GitHub 上登录您的账号。
|
||||||
|
点击页面右上角的头像,选择“Settings”。
|
||||||
|
在左侧边栏中,点击“Developer settings”。
|
||||||
|
在左侧边栏中,点击“Personal access tokens”。
|
||||||
|
点击“Generate new token”。
|
||||||
|
输入一个描述性的名称,选择需要的权限(至少需要 repo 权限来访问仓库),然后点击“Generate token”。
|
||||||
|
复制生成的 Token,并保存到一个安全的地方。请注意,这个 Token 只会显示一次,如果您丢失了,请重新生成一个新的 Token。
|
||||||
|
在 Jenkins 中使用这个 Token 作为 GitHub API URL (https://api.github.com) 的凭据时,您可以将 Token 添加为 Jenkins 的凭据:
|
||||||
|
|
||||||
|
进入 Jenkins 管理界面,转到“凭据” > “系统”。
|
||||||
|
在“系统”页面中,点击“Global credentials (unrestricted)”。
|
||||||
|
在凭据页面中,点击“Add credentials”。
|
||||||
|
在“Kind”下拉菜单中选择“Secret text”。
|
||||||
|
在“Secret”框中粘贴您在 GitHub 上生成的 Personal Access Token。
|
||||||
|
输入一个描述性的名称,并点击“OK”保存凭据。
|
||||||
|
现在,您可以在 Jenkins 的配置中使用这个凭据来访问 GitHub API (https://api.github.com)。
|
||||||
|
|
||||||
|
确保 Docker 已安装:在 Jenkins 代理节点上确认 Docker 已正确安装并配置。您可以通过在终端中执行 docker --version 命令来检查 Docker 是否可用。
|
||||||
|
|
||||||
|
检查 Docker 环境:如果 Docker 已安装,请确保 Docker 服务正在运行。您可以使用 sudo systemctl status docker 命令检查 Docker 服务的状态。
|
||||||
|
|
||||||
|
确认 Jenkins 全局工具配置:在 Jenkins 管理界面中,转到“系统管理”->“全局工具配置”,确保 Docker 工具已正确配置。如果未配置,您可以添加一个 Docker 工具,并指定正确的安装路径。
|
||||||
|
|
||||||
|
重启 Jenkins 服务:在进行了上述更改后,尝试重启 Jenkins 服务,以确保新的配置生效。
|
||||||
|
|
||||||
|
尝试在终端中执行 Docker 命令:在 Jenkins 代理节点上打开终端,尝试手动执行一些 Docker 命令(如 docker pull),看看是否能够正常执行
|
||||||
|
|
||||||
|
要设置 Jenkins Docker 流水线,你可以按照以下步骤进行操作:
|
||||||
|
|
||||||
|
前提条件
|
||||||
|
确保你的 Jenkins 实例已经安装了以下插件:
|
||||||
|
|
||||||
|
Docker Pipeline
|
||||||
|
Docker Commons
|
||||||
|
|
||||||
2
roles/charts/chaos-mesh/meta/main.yml
Normal file
2
roles/charts/chaos-mesh/meta/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
dependencies:
|
||||||
|
- role: secret-manger
|
||||||
4
roles/charts/chaos-mesh/tasks/main.yml
Executable file
4
roles/charts/chaos-mesh/tasks/main.yml
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
- name: Setup chaos-mesh Server
|
||||||
|
script: files/setup.sh {{ domain }} {{ item.secret_name }} {{ namespace }}
|
||||||
|
when: inventory_hostname in groups[group] and ( tls is defined)
|
||||||
|
loop: "{{ tls }}"
|
||||||
37
roles/charts/chartmuseum/files/setup.sh
Normal file
37
roles/charts/chartmuseum/files/setup.sh
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
domain=$1
|
||||||
|
namespace=$2
|
||||||
|
admin_password=$3
|
||||||
|
secret_name=$4
|
||||||
|
storage_type=$5
|
||||||
|
|
||||||
|
cat > values.yaml << EOF
|
||||||
|
env:
|
||||||
|
open:
|
||||||
|
STORAGE: local
|
||||||
|
DISABLE_API: false
|
||||||
|
AUTH_ANONYMOUS_GET: true
|
||||||
|
secret:
|
||||||
|
BASIC_AUTH_USER: admin
|
||||||
|
BASIC_AUTH_PASS: '$admin_password'
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
hosts:
|
||||||
|
- name: charts.$domain
|
||||||
|
path: /
|
||||||
|
tls: true
|
||||||
|
tlsSecret: $secret_name
|
||||||
|
ingressClassName: nginx
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
accessMode: ReadWriteOnce
|
||||||
|
size: 8Gi
|
||||||
|
path: /storage
|
||||||
|
storageClass: "local-path"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
|
||||||
|
helm repo add chartmuseum https://chartmuseum.github.io/charts
|
||||||
|
helm repo update
|
||||||
|
helm upgrade --install chartmuseum chartmuseum/chartmuseum -f values.yaml -n $namespace
|
||||||
2
roles/charts/chartmuseum/meta/main.yml
Normal file
2
roles/charts/chartmuseum/meta/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
dependencies:
|
||||||
|
- role: secret-manger
|
||||||
4
roles/charts/chartmuseum/tasks/main.yml
Executable file
4
roles/charts/chartmuseum/tasks/main.yml
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
- name: Setup Chartmuseum Server
|
||||||
|
script: files/setup.sh {{ domain }} {{ namespace }} {{ admin_password }} {{ item.secret_name }}
|
||||||
|
loop: "{{ tls }}"
|
||||||
|
when: inventory_hostname in groups[group]
|
||||||
8
roles/charts/chartmuseum/vars/main.yml
Normal file
8
roles/charts/chartmuseum/vars/main.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
group: master
|
||||||
|
namespace: harbor
|
||||||
|
storage_type: oss
|
||||||
|
update_secret: true
|
||||||
|
tls:
|
||||||
|
- secret_name: chartmuseum-tls
|
||||||
|
keyfile: /etc/ssl/onwalk.net.key
|
||||||
|
certfile: /etc/ssl/onwalk.net.pem
|
||||||
2
roles/charts/clickhouse/meta/main.yml
Normal file
2
roles/charts/clickhouse/meta/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
dependencies:
|
||||||
|
- role: secret-manger
|
||||||
48
roles/charts/clickhouse/tasks/main.yml
Executable file
48
roles/charts/clickhouse/tasks/main.yml
Executable file
@ -0,0 +1,48 @@
|
|||||||
|
- name: Prep DIR
|
||||||
|
shell: "mkdir -pv /tmp/clickhouse-cluster/ && mkdir -pv /tmp/qryn"
|
||||||
|
|
||||||
|
- name: Prep NameSpace
|
||||||
|
shell: "kubectl create namespace monitoring || echo true"
|
||||||
|
|
||||||
|
- name: sync clickhouse deploy yaml
|
||||||
|
template: src=templates/{{ item }} dest=/tmp/{{ item }} owner=root group=root mode=0644 force=yes unsafe_writes=yes
|
||||||
|
with_items:
|
||||||
|
- clickhouse-cluster/clickhouse-config.yaml
|
||||||
|
- clickhouse-cluster/clickhouse-service.yaml
|
||||||
|
- clickhouse-cluster/clickhouse-user-config.yaml
|
||||||
|
- clickhouse-cluster/clickhouse-statefulset.yml
|
||||||
|
- postsetup.sh
|
||||||
|
|
||||||
|
- name: Setup ClickHouse Server
|
||||||
|
shell: "cd /tmp/clickhouse-cluster && kubectl apply -f ."
|
||||||
|
when: inventory_hostname in groups[group]
|
||||||
|
|
||||||
|
#- name: Post Setup ClickHouse Server
|
||||||
|
# shell: "cd /tmp/ && sh postsetup.sh"
|
||||||
|
# when: inventory_hostname in groups[group]
|
||||||
|
|
||||||
|
- name: get clickhouse node ip
|
||||||
|
shell: " kubectl get pods -n monitoring -o wide | grep -E '^clickhouse-' | awk '{print $6}' "
|
||||||
|
register: ck_node_ip_raw
|
||||||
|
when: inventory_hostname in groups[group][0]
|
||||||
|
|
||||||
|
- name: Check if ck_node_ip_raw is not empty
|
||||||
|
fail:
|
||||||
|
msg: "ck_node_ip_raw is empty, terminating the playbook."
|
||||||
|
when: ck_node_ip_raw.stdout_lines | length == 0
|
||||||
|
|
||||||
|
- name: set fact join command for ck_node_ip
|
||||||
|
set_fact:
|
||||||
|
ck_node_ip : "{{ ck_node_ip_raw.stdout_lines[0] }}"
|
||||||
|
when: inventory_hostname in groups[group][0]
|
||||||
|
|
||||||
|
- name: sync clickhouse deploy yaml
|
||||||
|
template: src=templates/{{ item }} dest=/tmp/{{ item }} owner=root group=root mode=0644 force=yes unsafe_writes=yes
|
||||||
|
with_items:
|
||||||
|
- qryn/qryn-deployment.yaml
|
||||||
|
- qryn/qryn-service.yaml
|
||||||
|
- qryn/qryn-ingress.yaml
|
||||||
|
|
||||||
|
- name: Setup Qryn Server
|
||||||
|
shell: "cd /tmp/qryn && kubectl apply -f ."
|
||||||
|
when: inventory_hostname in groups[group]
|
||||||
2
roles/charts/clickhouse/templates/.gitignore
vendored
Normal file
2
roles/charts/clickhouse/templates/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
/clickhouse-keeper-k8s.iml
|
||||||
|
/.idea/
|
||||||
@ -0,0 +1,94 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: clickhouse-config
|
||||||
|
namespace: monitoring
|
||||||
|
data:
|
||||||
|
keeper.xml: |
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<yandex>
|
||||||
|
<listen_host>0.0.0.0</listen_host>
|
||||||
|
<logger>
|
||||||
|
<level>trace</level>
|
||||||
|
<console>1</console>
|
||||||
|
</logger>
|
||||||
|
<openSSL>
|
||||||
|
<server>
|
||||||
|
<certificateFile remove="1"/>
|
||||||
|
<privateKeyFile remove="1"/>
|
||||||
|
</server>
|
||||||
|
</openSSL>
|
||||||
|
<keeper_server>
|
||||||
|
<tcp_port>2181</tcp_port>
|
||||||
|
<server_id from_env="CK_INDEX"/>
|
||||||
|
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
|
||||||
|
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
|
||||||
|
<coordination_settings>
|
||||||
|
<operation_timeout_ms>10000</operation_timeout_ms>
|
||||||
|
<session_timeout_ms>30000</session_timeout_ms>
|
||||||
|
<raft_logs_level>trace</raft_logs_level>
|
||||||
|
<rotate_log_storage_interval>10000</rotate_log_storage_interval>
|
||||||
|
</coordination_settings>
|
||||||
|
<raft_configuration>
|
||||||
|
<server>
|
||||||
|
<id>0</id>
|
||||||
|
<hostname>clickhouse-0.clickhouse-service.monitoring</hostname>
|
||||||
|
<port>9444</port>
|
||||||
|
</server>
|
||||||
|
<server>
|
||||||
|
<id>1</id>
|
||||||
|
<hostname>clickhouse-1.clickhouse-service.monitoring</hostname>
|
||||||
|
<port>9444</port>
|
||||||
|
</server>
|
||||||
|
<server>
|
||||||
|
<id>2</id>
|
||||||
|
<hostname>clickhouse-2.clickhouse-service.monitoring</hostname>
|
||||||
|
<port>9444</port>
|
||||||
|
</server>
|
||||||
|
</raft_configuration>
|
||||||
|
</keeper_server>
|
||||||
|
<zookeeper>
|
||||||
|
<node>
|
||||||
|
<host>clickhouse-0.clickhouse-service.monitoring</host>
|
||||||
|
<port>2181</port>
|
||||||
|
</node>
|
||||||
|
<node>
|
||||||
|
<host>clickhouse-1.clickhouse-service.monitoring</host>
|
||||||
|
<port>2181</port>
|
||||||
|
</node>
|
||||||
|
<node>
|
||||||
|
<host>clickhouse-2.clickhouse-service.monitoring</host>
|
||||||
|
<port>2181</port>
|
||||||
|
</node>
|
||||||
|
</zookeeper>
|
||||||
|
</yandex>
|
||||||
|
|
||||||
|
cluster.xml: |
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<yandex>
|
||||||
|
<remote_servers>
|
||||||
|
<testcluster>
|
||||||
|
<shard>
|
||||||
|
<replica>
|
||||||
|
<host>clickhouse-0.clickhouse-service.monitoring</host>
|
||||||
|
<port>9000</port>
|
||||||
|
</replica>
|
||||||
|
</shard>
|
||||||
|
<shard>
|
||||||
|
<replica>
|
||||||
|
<host>clickhouse-1.clickhouse-service.monitoring</host>
|
||||||
|
<port>9000</port>
|
||||||
|
</replica>
|
||||||
|
</shard>
|
||||||
|
</testcluster>
|
||||||
|
</remote_servers>
|
||||||
|
</yandex>
|
||||||
|
macros.xml: |
|
||||||
|
<?xml version="1.0" ?>
|
||||||
|
<yandex>
|
||||||
|
<macros>
|
||||||
|
<cluster>testcluster</cluster>
|
||||||
|
<replica from_env="HOSTNAME"/>
|
||||||
|
<shard>1</shard>
|
||||||
|
</macros>
|
||||||
|
</yandex>
|
||||||
@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: clickhouse
|
||||||
|
namespace: monitoring
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: clickhouse.{{ domain }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: clickhouse-service
|
||||||
|
port:
|
||||||
|
number: 8123
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
kind: Service
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: clickhouse
|
||||||
|
name: clickhouse-service
|
||||||
|
namespace: monitoring
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: rest
|
||||||
|
port: 8123
|
||||||
|
- name: keeper
|
||||||
|
port: 2181
|
||||||
|
- name: replica-a
|
||||||
|
port: 9000
|
||||||
|
- name: replica-b
|
||||||
|
port: 9009
|
||||||
|
- name: raft
|
||||||
|
port: 9444
|
||||||
|
|
||||||
|
clusterIP: None
|
||||||
|
selector:
|
||||||
|
app: clickhouse
|
||||||
@ -0,0 +1,103 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: clickhouse
|
||||||
|
namespace: monitoring
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: clickhouse
|
||||||
|
serviceName: clickhouse-service
|
||||||
|
replicas: 3
|
||||||
|
podManagementPolicy: "Parallel"
|
||||||
|
# podManagementPolicy: OrderedReady
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: clickhouse
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: clickhouse
|
||||||
|
image: clickhouse/clickhouse-server:22.4.5
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
workingDir: /
|
||||||
|
command:
|
||||||
|
- /bin/bash
|
||||||
|
- -c
|
||||||
|
- |-
|
||||||
|
export CK_INDEX=${HOSTNAME##*-}
|
||||||
|
echo CK_INDEX=${CK_INDEX}
|
||||||
|
./entrypoint.sh
|
||||||
|
env:
|
||||||
|
- name: HOSTNAME
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
ports:
|
||||||
|
- name: rest
|
||||||
|
containerPort: 8123
|
||||||
|
- name: keeper
|
||||||
|
containerPort: 2181
|
||||||
|
- name: replica-a
|
||||||
|
containerPort: 9000
|
||||||
|
- name: replica-b
|
||||||
|
containerPort: 9009
|
||||||
|
- name: raft
|
||||||
|
containerPort: 9444
|
||||||
|
volumeMounts:
|
||||||
|
- name: clickhouse-config
|
||||||
|
mountPath: /etc/clickhouse-server/config.d/
|
||||||
|
- name: clickhouse-user-config
|
||||||
|
mountPath: /etc/clickhouse-server/users.d/
|
||||||
|
- name: clickhouse-meta
|
||||||
|
mountPath: /var/lib/clickhouse/coordination/
|
||||||
|
- name: clickhouse-data
|
||||||
|
mountPath: /var/lib/clickhouse/
|
||||||
|
volumes:
|
||||||
|
- name: clickhouse-config
|
||||||
|
configMap:
|
||||||
|
name: clickhouse-config
|
||||||
|
items:
|
||||||
|
- key: keeper.xml
|
||||||
|
path: keeper.xml
|
||||||
|
- key: cluster.xml
|
||||||
|
path: cluster.xml
|
||||||
|
- key: macros.xml
|
||||||
|
path: macros.xml
|
||||||
|
- name: clickhouse-user-config
|
||||||
|
configMap:
|
||||||
|
name: clickhouse-user-config
|
||||||
|
items:
|
||||||
|
- key: user.xml
|
||||||
|
path: user.xml
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/component: clickhouse
|
||||||
|
app.kubernetes.io/instance: clickhouse
|
||||||
|
app.kubernetes.io/name: clickhouse
|
||||||
|
name: clickhouse-meta
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 1Gi
|
||||||
|
volumeMode: Filesystem
|
||||||
|
- apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/component: clickhouse
|
||||||
|
app.kubernetes.io/instance: clickhouse
|
||||||
|
app.kubernetes.io/name: clickhouse
|
||||||
|
name: clickhouse-data
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 5Gi
|
||||||
|
volumeMode: Filesystem
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: clickhouse-user-config
|
||||||
|
namespace: monitoring
|
||||||
|
data:
|
||||||
|
user.xml: |
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<yandex>
|
||||||
|
<profiles>
|
||||||
|
<default>
|
||||||
|
<max_memory_usage>10000000000</max_memory_usage>
|
||||||
|
<max_distributed_depth>4000</max_distributed_depth>
|
||||||
|
<distributed_connections_pool_size>4096</distributed_connections_pool_size>
|
||||||
|
<max_distributed_connections>4096</max_distributed_connections>
|
||||||
|
<load_balancing>random</load_balancing>
|
||||||
|
</default>
|
||||||
|
</profiles>
|
||||||
|
</yandex>
|
||||||
142
roles/charts/clickhouse/templates/otel-collector/configmap.yaml
Normal file
142
roles/charts/clickhouse/templates/otel-collector/configmap.yaml
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: otel-collector-config
|
||||||
|
namespace: default
|
||||||
|
data:
|
||||||
|
config.yaml: |
|
||||||
|
receivers:
|
||||||
|
loki:
|
||||||
|
use_incoming_timestamp: true
|
||||||
|
protocols:
|
||||||
|
http:
|
||||||
|
endpoint: 0.0.0.0:3100
|
||||||
|
grpc:
|
||||||
|
endpoint: 0.0.0.0:3200
|
||||||
|
syslog:
|
||||||
|
protocol: rfc5424
|
||||||
|
tcp:
|
||||||
|
listen_address: "0.0.0.0:5514"
|
||||||
|
fluentforward:
|
||||||
|
endpoint: 0.0.0.0:24224
|
||||||
|
splunk_hec:
|
||||||
|
endpoint: 0.0.0.0:8088
|
||||||
|
otlp:
|
||||||
|
protocols:
|
||||||
|
grpc:
|
||||||
|
endpoint: 0.0.0.0:4317
|
||||||
|
http:
|
||||||
|
endpoint: 0.0.0.0:4318
|
||||||
|
jaeger:
|
||||||
|
protocols:
|
||||||
|
grpc:
|
||||||
|
endpoint: 0.0.0.0:14250
|
||||||
|
thrift_http:
|
||||||
|
endpoint: 0.0.0.0:14268
|
||||||
|
zipkin:
|
||||||
|
endpoint: 0.0.0.0:9411
|
||||||
|
skywalking:
|
||||||
|
protocols:
|
||||||
|
grpc:
|
||||||
|
endpoint: 0.0.0.0:11800
|
||||||
|
http:
|
||||||
|
endpoint: 0.0.0.0:12800
|
||||||
|
prometheus:
|
||||||
|
config:
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'otel-collector'
|
||||||
|
scrape_interval: 5s
|
||||||
|
static_configs:
|
||||||
|
- targets: ['exporter:8080']
|
||||||
|
influxdb:
|
||||||
|
endpoint: 0.0.0.0:8086
|
||||||
|
|
||||||
|
connectors:
|
||||||
|
servicegraph:
|
||||||
|
latency_histogram_buckets: [ 100us, 1ms, 2ms, 6ms, 10ms, 100ms, 250ms ]
|
||||||
|
dimensions: [ cluster, namespace ]
|
||||||
|
store:
|
||||||
|
ttl: 2s
|
||||||
|
max_items: 1000
|
||||||
|
cache_loop: 2m
|
||||||
|
store_expiration_loop: 2s
|
||||||
|
virtual_node_peer_attributes:
|
||||||
|
- db.name
|
||||||
|
- rpc.service
|
||||||
|
spanmetrics:
|
||||||
|
namespace: span.metrics
|
||||||
|
exemplars:
|
||||||
|
enabled: false
|
||||||
|
dimensions_cache_size: 1000
|
||||||
|
aggregation_temporality: 'AGGREGATION_TEMPORALITY_CUMULATIVE'
|
||||||
|
metrics_flush_interval: 30s
|
||||||
|
metrics_expiration: 5m
|
||||||
|
events:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
processors:
|
||||||
|
batch:
|
||||||
|
send_batch_size: 10000
|
||||||
|
timeout: 5s
|
||||||
|
memory_limiter:
|
||||||
|
check_interval: 2s
|
||||||
|
limit_mib: 1800
|
||||||
|
spike_limit_mib: 500
|
||||||
|
resourcedetection/system:
|
||||||
|
detectors: ['system']
|
||||||
|
system:
|
||||||
|
hostname_sources: ['os']
|
||||||
|
resource:
|
||||||
|
attributes:
|
||||||
|
- key: service.name
|
||||||
|
value: "serviceName"
|
||||||
|
action: upsert
|
||||||
|
metricstransform:
|
||||||
|
transforms:
|
||||||
|
- include: calls_total
|
||||||
|
action: update
|
||||||
|
new_name: traces_spanmetrics_calls_total
|
||||||
|
- include: latency
|
||||||
|
action: update
|
||||||
|
new_name: traces_spanmetrics_latency
|
||||||
|
|
||||||
|
exporters:
|
||||||
|
qryn:
|
||||||
|
dsn: tcp://clickhouse-server:9000/qryn?username=default&password=*************
|
||||||
|
timeout: 10s
|
||||||
|
sending_queue:
|
||||||
|
queue_size: 100
|
||||||
|
retry_on_failure:
|
||||||
|
enabled: true
|
||||||
|
initial_interval: 5s
|
||||||
|
max_interval: 30s
|
||||||
|
max_elapsed_time: 300s
|
||||||
|
logs:
|
||||||
|
format: raw
|
||||||
|
otlp/spanmetrics:
|
||||||
|
endpoint: localhost:4317
|
||||||
|
tls:
|
||||||
|
insecure: true
|
||||||
|
|
||||||
|
extensions:
|
||||||
|
health_check:
|
||||||
|
pprof:
|
||||||
|
zpages:
|
||||||
|
|
||||||
|
service:
|
||||||
|
extensions: [pprof, zpages, health_check]
|
||||||
|
pipelines:
|
||||||
|
logs:
|
||||||
|
receivers: [fluentforward, otlp, loki, syslog, splunk_hec]
|
||||||
|
processors: [memory_limiter, resourcedetection/system, resource, batch]
|
||||||
|
exporters: [qryn]
|
||||||
|
traces:
|
||||||
|
receivers: [otlp, jaeger, zipkin, skywalking]
|
||||||
|
processors: [memory_limiter, resourcedetection/system, resource, batch]
|
||||||
|
exporters: [qryn, spanmetrics, servicegraph]
|
||||||
|
metrics:
|
||||||
|
receivers: [prometheus, influxdb, spanmetrics, servicegraph]
|
||||||
|
processors: [memory_limiter, resourcedetection/system, resource, batch]
|
||||||
|
exporters: [qryn]
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,42 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: otel-collector
|
||||||
|
namespace: default
|
||||||
|
labels:
|
||||||
|
app: otel-collector
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: otel-collector
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: otel-collector
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: otel-collector
|
||||||
|
image: ghcr.io/metrico/qryn-otel-collector:latest
|
||||||
|
volumeMounts:
|
||||||
|
- name: config
|
||||||
|
mountPath: /etc/otel
|
||||||
|
subPath: config.yaml
|
||||||
|
ports:
|
||||||
|
- containerPort: 3100
|
||||||
|
- containerPort: 3200
|
||||||
|
- containerPort: 8088
|
||||||
|
- containerPort: 5514
|
||||||
|
- containerPort: 24224
|
||||||
|
- containerPort: 4317
|
||||||
|
- containerPort: 4318
|
||||||
|
- containerPort: 14250
|
||||||
|
- containerPort: 14268
|
||||||
|
- containerPort: 9411
|
||||||
|
- containerPort: 11800
|
||||||
|
- containerPort: 12800
|
||||||
|
- containerPort: 8086
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
configMap:
|
||||||
|
name: otel-collector-config
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: otel-collector-ingress
|
||||||
|
namespace: default
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/rewrite-target: /
|
||||||
|
spec:
|
||||||
|
rules:
|
||||||
|
- host: your-domain.example.com
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /api
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: otel-collector
|
||||||
|
port:
|
||||||
|
number: 3100
|
||||||
@ -0,0 +1,48 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: otel-collector
|
||||||
|
namespace: default
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 3100
|
||||||
|
targetPort: 3100
|
||||||
|
protocol: TCP
|
||||||
|
- port: 3200
|
||||||
|
targetPort: 3200
|
||||||
|
protocol: TCP
|
||||||
|
- port: 8088
|
||||||
|
targetPort: 8088
|
||||||
|
protocol: TCP
|
||||||
|
- port: 5514
|
||||||
|
targetPort: 5514
|
||||||
|
protocol: TCP
|
||||||
|
- port: 24224
|
||||||
|
targetPort: 24224
|
||||||
|
protocol: TCP
|
||||||
|
- port: 4317
|
||||||
|
targetPort: 4317
|
||||||
|
protocol: TCP
|
||||||
|
- port: 4318
|
||||||
|
targetPort: 4318
|
||||||
|
protocol: TCP
|
||||||
|
- port: 14250
|
||||||
|
targetPort: 14250
|
||||||
|
protocol: TCP
|
||||||
|
- port: 14268
|
||||||
|
targetPort: 14268
|
||||||
|
protocol: TCP
|
||||||
|
- port: 9411
|
||||||
|
targetPort: 9411
|
||||||
|
protocol: TCP
|
||||||
|
- port: 11800
|
||||||
|
targetPort: 11800
|
||||||
|
protocol: TCP
|
||||||
|
- port: 12800
|
||||||
|
targetPort: 12800
|
||||||
|
protocol: TCP
|
||||||
|
- port: 8086
|
||||||
|
targetPort: 8086
|
||||||
|
protocol: TCP
|
||||||
|
selector:
|
||||||
|
app: otel-collector
|
||||||
27
roles/charts/clickhouse/templates/postsetup.sh
Executable file
27
roles/charts/clickhouse/templates/postsetup.sh
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#检查 ClickHouse 版本
|
||||||
|
#clickhouse-client --version | grep -q "21.8"
|
||||||
|
#if [ $? -ne 0 ]; then
|
||||||
|
#echo "ClickHouse 的版本必须至少为 21.8"
|
||||||
|
#exit 1
|
||||||
|
#fi
|
||||||
|
|
||||||
|
创建数据库
|
||||||
|
for db in deepflow_system event ext_metrics flow_log flow_metrics flow_tag profile; do
|
||||||
|
clickhouse-client -u admin -p admin -q "CREATE DATABASE $db"
|
||||||
|
done
|
||||||
|
|
||||||
|
创建用户
|
||||||
|
clickhouse-client -u admin -p admin -q "CREATE USER admin IDENTIFIED WITH PLAINTEXT_PASSWORD BY 'admin'"
|
||||||
|
clickhouse-client -u admin -p admin -q "CREATE USER deepflow IDENTIFIED WITH PLAINTEXT_PASSWORD BY 'deepflow'"
|
||||||
|
|
||||||
|
授权账户
|
||||||
|
clickhouse-client -u admin -p admin -q "GRANT ALL ON . TO admin"
|
||||||
|
clickhouse-client -u admin -p admin -q "GRANT SELECT ON deepflow_system.* TO deepflow"
|
||||||
|
clickhouse-client -u admin -p admin -q "GRANT SELECT ON event.* TO deepflow"
|
||||||
|
clickhouse-client -u admin -p admin -q "GRANT SELECT ON ext_metrics.* TO deepflow"
|
||||||
|
clickhouse-client -u admin -p admin -q "GRANT SELECT ON flow_log.* TO deepflow"
|
||||||
|
clickhouse-client -u admin -p admin -q "GRANT SELECT ON flow_metrics.* TO deepflow"
|
||||||
|
clickhouse-client -u admin -p admin -q "GRANT SELECT ON flow_tag.* TO deepflow"
|
||||||
|
clickhouse-client -u admin -p admin -q "GRANT SELECT ON profile.* TO deepflow"
|
||||||
36
roles/charts/clickhouse/templates/qryn/qryn-deployment.yaml
Normal file
36
roles/charts/clickhouse/templates/qryn/qryn-deployment.yaml
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: qryn
|
||||||
|
namespace: monitoring
|
||||||
|
labels:
|
||||||
|
io.metrico.service: qryn
|
||||||
|
spec:
|
||||||
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
io.metrico.service: qryn
|
||||||
|
strategy: {}
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
qryn.cmd: qryn.dev
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.metrico.service: qryn
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- env:
|
||||||
|
- name: CLICKHOUSE_AUTH
|
||||||
|
value: "default"
|
||||||
|
- name: CLICKHOUSE_PORT
|
||||||
|
value: "8123"
|
||||||
|
- name: CLICKHOUSE_SERVER
|
||||||
|
value: "{{ hostvars[groups[group][0]].ck_node_ip }}"
|
||||||
|
image: qxip/qryn
|
||||||
|
name: qryn
|
||||||
|
ports:
|
||||||
|
- containerPort: 3100
|
||||||
|
resources: {}
|
||||||
|
restartPolicy: Always
|
||||||
|
status: {}
|
||||||
24
roles/charts/clickhouse/templates/qryn/qryn-ingress.yaml
Normal file
24
roles/charts/clickhouse/templates/qryn/qryn-ingress.yaml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: data-gateway
|
||||||
|
namespace: monitoring
|
||||||
|
annotations:
|
||||||
|
nginx.ingress.kubernetes.io/ssl-redirect: "true"
|
||||||
|
spec:
|
||||||
|
ingressClassName: nginx
|
||||||
|
rules:
|
||||||
|
- host: data-gateway.{{ domain }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- backend:
|
||||||
|
service:
|
||||||
|
name: qryn
|
||||||
|
port:
|
||||||
|
number: 3100
|
||||||
|
path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
- data-gateway.{{ domain }}
|
||||||
|
secretName: obs-tls
|
||||||
15
roles/charts/clickhouse/templates/qryn/qryn-service.yaml
Normal file
15
roles/charts/clickhouse/templates/qryn/qryn-service.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
|
labels:
|
||||||
|
io.metrico.service: qryn
|
||||||
|
name: qryn
|
||||||
|
namespace: monitoring
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- name: "3100"
|
||||||
|
port: 3100
|
||||||
|
targetPort: 3100
|
||||||
|
selector:
|
||||||
|
io.metrico.service: qryn
|
||||||
12
roles/charts/deepflow/Readme.md
Normal file
12
roles/charts/deepflow/Readme.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
# 统计存储数据
|
||||||
|
|
||||||
|
select formatReadableSize(sum(rows)) as "每天写入行数", formatReadableSize(sum(bytes_on_disk)) as "每天落盘的字节", formatReadableSize(sum(data_uncompressed_bytes)) as "压缩前字节", sum(data_uncompressed_bytes)/sum(bytes_on_disk) as "压缩比", sum(rows)/86400 as "平均每秒写入的行数" from cluster(df_cluster, system.parts) where partition like '%2024-12-03%' limit 10;
|
||||||
|
|
||||||
|
|
||||||
|
可以grafana再 查下确认下,流日志的统计:
|
||||||
|
select min(partition),max(partition),formatReadableSize(sum(rows)) as "每天写入行数", formatReadableSize(sum(bytes_on_disk)) as "每天落盘的字节", formatReadableSize(sum(data_uncompressed_bytes)) as "压缩前字节", sum(data_uncompressed_bytes)/sum(bytes_on_disk) as "压缩比", sum(rows)/86400 as "平均每秒写入的行数" from cluster(df_cluster, system.parts) where partition like '%2024-12-03%' and table='l4_flow_log_local' limit 10;
|
||||||
|
|
||||||
|
调用日志的统计:
|
||||||
|
select min(partition),max(partition),formatReadableSize(sum(rows)) as "每天写入行数", formatReadableSize(sum(bytes_on_disk)) as "每天落盘的字节", formatReadableSize(sum(data_uncompressed_bytes)) as "压缩前字节", sum(data_uncompressed_bytes)/sum(bytes_on_disk) as "压缩比", sum(rows)/86400 as "平均每秒写入的行数" from cluster(df_cluster, system.parts) where partition like '%2024-12-03%' and table='l7_flow_log_local' limit 10;
|
||||||
|
|
||||||
7
roles/charts/deepflow/files/post-setup.sh
Normal file
7
roles/charts/deepflow/files/post-setup.sh
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
|
||||||
|
curl -fsSL 'https://packages.clickhouse.com/rpm/lts/repodata/repomd.xml.key' | sudo gpg --dearmor -o /usr/share/keyrings/clickhouse-keyring.gpg
|
||||||
|
|
||||||
|
echo "deb [signed-by=/usr/share/keyrings/clickhouse-keyring.gpg] https://packages.clickhouse.com/deb stable main" | sudo tee \
|
||||||
|
/etc/apt/sources.list.d/clickhouse.list
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y clickhouse-client
|
||||||
6
roles/charts/deepflow/files/pre-setup.sh
Normal file
6
roles/charts/deepflow/files/pre-setup.sh
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
export namespace=$1
|
||||||
|
|
||||||
|
export MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace $namespace mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d)
|
||||||
|
|
||||||
|
kubectl run mysql-client --rm --tty -i --restart='Never' --image docker.io/bitnami/mysql:8.0.32-debian-11-r14 --namespace $namespace --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash -c "mysql -h mysql.database.svc.cluster.local -uroot -p$MYSQL_ROOT_PASSWORD -e 'create database IF NOT EXISTS jenkins;'"
|
||||||
29
roles/charts/deepflow/files/setup.sh
Normal file
29
roles/charts/deepflow/files/setup.sh
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -x
|
||||||
|
export domain=$1
|
||||||
|
export secret=$2
|
||||||
|
export namespace=$3
|
||||||
|
|
||||||
|
cat << EOF > values-custom.yaml
|
||||||
|
clickhouse:
|
||||||
|
enabled: true
|
||||||
|
server:
|
||||||
|
enabled: true
|
||||||
|
deepflow-agent:
|
||||||
|
enabled: true
|
||||||
|
grafana:
|
||||||
|
enabled: true
|
||||||
|
service:
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
ingressClassName: nginx
|
||||||
|
hosts:
|
||||||
|
- grafana.onwalk.net
|
||||||
|
tls:
|
||||||
|
- secretName: obs-tls
|
||||||
|
hosts:
|
||||||
|
- grafana.onwalk.net
|
||||||
|
EOF
|
||||||
|
helm repo add deepflow https://deepflowio.github.io/deepflow
|
||||||
|
helm repo update deepflow # use `helm repo update` when helm < 3.7.0
|
||||||
|
helm upgrade --install deepflow -n monitoring deepflow/deepflow --create-namespace --version 6.4.9 -f values-custom.yaml
|
||||||
2
roles/charts/deepflow/meta/main.yml
Normal file
2
roles/charts/deepflow/meta/main.yml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
dependencies:
|
||||||
|
- role: secret-manger
|
||||||
19
roles/charts/deepflow/tasks/main.yml
Executable file
19
roles/charts/deepflow/tasks/main.yml
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
#- name: get mysql db password
|
||||||
|
# shell: 'kubectl get secret --namespace database mysql -o jsonpath="{.data.mysql-root-password}" | base64 -d'
|
||||||
|
# register: mysql_db_password_raw
|
||||||
|
# when: inventory_hostname in groups[group][0]
|
||||||
|
#
|
||||||
|
#- name: set fact join command
|
||||||
|
# set_fact:
|
||||||
|
# mysql_db_password : "{{ mysql_db_password_raw.stdout }}"
|
||||||
|
# when: inventory_hostname in groups[group][0]
|
||||||
|
#
|
||||||
|
#- name: DB Pre Setup for Jenkins Server
|
||||||
|
# script: files/pre-setup.sh {{ db_namespace }}
|
||||||
|
# when: inventory_hostname in groups[group]
|
||||||
|
# script: files/setup.sh {{ domain }} {{ item.secret_name }} {{ namespace }} {{ mysql_db_password }}
|
||||||
|
|
||||||
|
- name: Setup Deepflow Cluster
|
||||||
|
script: files/setup.sh {{ domain }} {{ item.secret_name }} {{ namespace }}
|
||||||
|
when: inventory_hostname in groups[group] and ( tls is defined)
|
||||||
|
loop: "{{ tls }}"
|
||||||
3
roles/charts/embedding-service/README.md
Normal file
3
roles/charts/embedding-service/README.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# embedding-service (chart)
|
||||||
|
|
||||||
|
Placeholder role for managing the Helm chart release of embedding-service.
|
||||||
5
roles/charts/embedding-service/tasks/main.yml
Normal file
5
roles/charts/embedding-service/tasks/main.yml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
# TODO: implement Helm release tasks
|
||||||
|
- name: Placeholder task
|
||||||
|
debug:
|
||||||
|
msg: "Role placeholder. Implement Helm release tasks."
|
||||||
3
roles/charts/feast/README.md
Normal file
3
roles/charts/feast/README.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# feast (chart)
|
||||||
|
|
||||||
|
Placeholder role for managing the Helm chart release of feast.
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user