From 2544127de2dbbf78a1559e4c91052c23692d470b Mon Sep 17 00:00:00 2001 From: Sun-ZhenXing <1006925066@qq.com> Date: Sun, 22 Feb 2026 22:12:04 +0800 Subject: [PATCH] feat: add portainer/... --- eslint.config.mjs | 16 +- package.json | 14 +- pnpm-lock.yaml | 477 ++++++++++++------------- src/_template/base.mk | 18 +- src/airflow/Makefile | 1 - src/argocd/Makefile | 1 - src/clickhouse/Makefile | 1 - src/duckdb/Makefile | 1 - src/elasticsearch/Makefile | 1 - src/etcd/Makefile | 1 - src/flink/Makefile | 1 - src/gitea-runner/Makefile | 1 - src/gitea/Makefile | 1 - src/gitlab-runner/Makefile | 1 - src/gitlab/Makefile | 1 - src/grafana/Makefile | 1 - src/harbor/Makefile | 1 - src/hbase/Makefile | 1 - src/jenkins/Makefile | 1 - src/k3k/Makefile | 15 + src/k3k/README.md | 115 ++++++ src/k3k/README.zh.md | 115 ++++++ src/k3k/values.yaml | 70 ++++ src/kafka/Makefile | 1 - src/keycloak/Makefile | 1 - src/kibana/Makefile | 1 - src/kong/Makefile | 1 - src/langfuse/Makefile | 1 - src/litellm/Makefile | 1 - src/loki/Makefile | 1 - src/mariadb/Makefile | 1 - src/milvus/Makefile | 1 - src/minio/Makefile | 1 - src/mlflow/Makefile | 1 - src/mongodb/Makefile | 1 - src/mysql/Makefile | 1 - src/nacos/Makefile | 1 - src/neo4j/Makefile | 1 - src/nexus/Makefile | 1 - src/nginx/Makefile | 1 - src/open-webui/Makefile | 1 - src/opentelemetry-collector/Makefile | 1 - src/phoenix/Makefile | 1 - src/portainer/Makefile | 15 + src/portainer/README.md | 77 ++++ src/portainer/README.zh.md | 77 ++++ src/portainer/values.yaml | 65 ++++ src/postgres/Makefile | 1 - src/prometheus/Makefile | 1 - src/pulsar/Makefile | 1 - src/rabbitmq-cluster-operator/Makefile | 1 - src/rabbitmq/Makefile | 1 - src/rainbond/Makefile | 15 + src/rainbond/README.md | 67 ++++ src/rainbond/README.zh.md | 67 ++++ src/rainbond/values.yaml | 78 ++++ src/rancher/Makefile | 15 + src/rancher/README.md | 88 +++++ src/rancher/README.zh.md | 88 +++++ src/rancher/values.yaml | 75 ++++ src/redis/Makefile | 1 - src/sealos/Makefile | 15 + src/sealos/README.md | 80 +++++ src/sealos/README.zh.md | 80 +++++ src/sealos/values.yaml | 55 +++ src/valkey/Makefile | 1 - src/vault/Makefile | 1 - src/vcluster/Makefile | 15 + src/vcluster/README.md | 125 +++++++ src/vcluster/README.zh.md | 125 +++++++ src/vcluster/values.yaml | 128 +++++++ src/zookeeper/Makefile | 1 - 72 files changed, 1925 insertions(+), 309 deletions(-) create mode 100644 src/k3k/Makefile create mode 100644 src/k3k/README.md create mode 100644 src/k3k/README.zh.md create mode 100644 src/k3k/values.yaml create mode 100644 src/portainer/Makefile create mode 100644 src/portainer/README.md create mode 100644 src/portainer/README.zh.md create mode 100644 src/portainer/values.yaml create mode 100644 src/rainbond/Makefile create mode 100644 src/rainbond/README.md create mode 100644 src/rainbond/README.zh.md create mode 100644 src/rainbond/values.yaml create mode 100644 src/rancher/Makefile create mode 100644 src/rancher/README.md create mode 100644 src/rancher/README.zh.md create mode 100644 src/rancher/values.yaml create mode 100644 src/sealos/Makefile create mode 100644 src/sealos/README.md create mode 100644 src/sealos/README.zh.md create mode 100644 src/sealos/values.yaml create mode 100644 src/vcluster/Makefile create mode 100644 src/vcluster/README.md create mode 100644 src/vcluster/README.zh.md create mode 100644 src/vcluster/values.yaml diff --git a/eslint.config.mjs b/eslint.config.mjs index 2b44c81..975055d 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -2,13 +2,7 @@ import antfu from '@antfu/eslint-config' export default antfu({ // Enable YAML support - yaml: { - overrides: { - // For Helm values files, allow flexible string styles - 'yaml/quotes': ['error', { prefer: 'single', avoidEscape: true }], - // 'yaml/plain-scalar': 'off', - }, - }, + yaml: true, // Disable other language support we don't need typescript: false, vue: false, @@ -26,10 +20,6 @@ export default antfu({ '**/node_modules/**', '**/.git/**', ], -}, { - // Disable sort keys rule for JSON files - files: ['**/package.json'], - rules: { - 'jsonc/sort-keys': 'off', - }, + // Lint readme files + markdown: true, }) diff --git a/package.json b/package.json index 524bf70..7b045bb 100644 --- a/package.json +++ b/package.json @@ -1,19 +1,23 @@ { "name": "helm-anything", "version": "1.0.0", + "packageManager": "pnpm@10.25.0", "description": "Helm command templates for quick service deployment", + "author": "", + "license": "ISC", + "keywords": [ + "helm", + "kubernetes", + "deployment" + ], "main": "index.js", "scripts": { "lint": "eslint .", "lint:fix": "eslint . --fix", "test": "echo \"Error: no test specified\" && exit 1" }, - "keywords": ["helm", "kubernetes", "deployment"], - "author": "", - "license": "ISC", - "packageManager": "pnpm@10.25.0", "devDependencies": { "@antfu/eslint-config": "^7.4.3", - "eslint": "^10.0.0" + "eslint": "^10.0.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 461c176..ac08030 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,10 +10,10 @@ importers: devDependencies: '@antfu/eslint-config': specifier: ^7.4.3 - version: 7.4.3(@vue/compiler-sfc@3.5.28)(eslint@10.0.0)(typescript@5.9.3) + version: 7.4.3(@vue/compiler-sfc@3.5.28)(eslint@10.0.1)(typescript@5.9.3) eslint: - specifier: ^10.0.0 - version: 10.0.0 + specifier: ^10.0.1 + version: 10.0.1 packages: @@ -135,17 +135,17 @@ packages: resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/compat@1.4.1': - resolution: {integrity: sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/compat@2.0.2': + resolution: {integrity: sha512-pR1DoD0h3HfF675QZx0xsyrsU8q70Z/plx7880NOhS02NuWLgBCOMDL787nUeQ7EWLkxv3bPQJaarjcPQb2Dwg==} + engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: - eslint: ^8.40 || 9 + eslint: ^8.40 || 9 || 10 peerDependenciesMeta: eslint: optional: true - '@eslint/config-array@0.23.1': - resolution: {integrity: sha512-uVSdg/V4dfQmTjJzR0szNczjOH/J+FyUMMjYtr07xFRXR7EDf9i1qdxrD0VusZH9knj1/ecxzCQQxyic5NzAiA==} + '@eslint/config-array@0.23.2': + resolution: {integrity: sha512-YF+fE6LV4v5MGWRGj7G404/OZzGNepVF8fxk7jqmqo3lrza7a0uUcDnROGRBG1WFC1omYUS/Wp1f42i0M+3Q3A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/config-helpers@0.5.2': @@ -164,8 +164,8 @@ packages: resolution: {integrity: sha512-R8uZemG9dKTbru/DQRPblbJyXpObwKzo8rv1KYGGuPUPtjM4LXBYM9q5CIZAComzZupws3tWbDwam5AFpPLyJQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@3.0.1': - resolution: {integrity: sha512-P9cq2dpr+LU8j3qbLygLcSZrl2/ds/pUpfnHNNuk5HW7mnngHs+6WSq5C9mO3rqRX8A1poxqLTC9cu0KOyJlBg==} + '@eslint/object-schema@3.0.2': + resolution: {integrity: sha512-HOy56KJt48Bx8KmJ+XGQNSUMT/6dZee/M54XyUyuvTvPXJmsERRvBchsUVx1UMe1WwIH49XLAczNC7V2INsuUw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} '@eslint/plugin-kit@0.4.1': @@ -210,11 +210,11 @@ packages: resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==} engines: {node: '>=18'} - '@stylistic/eslint-plugin@5.8.0': - resolution: {integrity: sha512-WNPVF/FfBAjyi3OA7gok8swRiImNLKI4dmV3iK/GC/0xSJR7eCzBFsw9hLZVgb1+MYNLy7aDsjohxN1hA/FIfQ==} + '@stylistic/eslint-plugin@5.9.0': + resolution: {integrity: sha512-FqqSkvDMYJReydrMhlugc71M76yLLQWNfmGq+SIlLa7N3kHp8Qq8i2PyWrVNAfjOyOIY+xv9XaaYwvVW7vroMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: '>=9.0.0' + eslint: ^9.0.0 || ^10.0.0 '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -329,13 +329,13 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.15.0: - resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} engines: {node: '>=0.4.0'} hasBin: true - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.14.0: + resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} ansis@4.2.0: resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} @@ -345,26 +345,21 @@ packages: resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} engines: {node: '>=14'} - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + balanced-match@4.0.4: + resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} + engines: {node: 18 || 20 || >=22} - balanced-match@4.0.3: - resolution: {integrity: sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==} - engines: {node: 20 || >=22} - - baseline-browser-mapping@2.9.19: - resolution: {integrity: sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==} + baseline-browser-mapping@2.10.0: + resolution: {integrity: sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==} + engines: {node: '>=6.0.0'} hasBin: true boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@2.0.2: - resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} - - brace-expansion@5.0.2: - resolution: {integrity: sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==} - engines: {node: 20 || >=22} + brace-expansion@5.0.3: + resolution: {integrity: sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==} + engines: {node: 18 || 20 || >=22} browserslist@4.28.1: resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} @@ -379,8 +374,8 @@ packages: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} - caniuse-lite@1.0.30001770: - resolution: {integrity: sha512-x/2CLQ1jHENRbHg5PSId2sXq1CIO1CISvwWAj027ltMVG2UNgW+w9oH2+HzgEIRFembL8bUlXtfbBHR1fCg2xw==} + caniuse-lite@1.0.30001772: + resolution: {integrity: sha512-mIwLZICj+ntVTw4BT2zfp+yu/AqV6GMKfJVJMx3MwPxs+uk/uj2GLl2dH8LQbjiLDX66amCga5nKFyDgRR43kg==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -455,8 +450,8 @@ packages: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - electron-to-chromium@1.5.286: - resolution: {integrity: sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==} + electron-to-chromium@1.5.302: + resolution: {integrity: sha512-sM6HAN2LyK82IyPBpznDRqlTQAtuSaO+ShzFiWTvoMJLHyZ+Y39r8VMfHzwbU8MVBzQ4Wdn85+wlZl2TLGIlwg==} empathic@2.0.0: resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==} @@ -498,21 +493,21 @@ packages: peerDependencies: eslint: '>=6.0.0' - eslint-config-flat-gitignore@2.1.0: - resolution: {integrity: sha512-cJzNJ7L+psWp5mXM7jBX+fjHtBvvh06RBlcweMhKD8jWqQw0G78hOW5tpVALGHGFPsBV+ot2H+pdDGJy6CV8pA==} + eslint-config-flat-gitignore@2.2.1: + resolution: {integrity: sha512-wA5EqN0era7/7Gt5Botlsfin/UNY0etJSEeBgbUlFLFrBi47rAN//+39fI7fpYcl8RENutlFtvp/zRa/M/pZNg==} peerDependencies: - eslint: ^9.5.0 + eslint: ^9.5.0 || ^10.0.0 eslint-flat-config-utils@3.0.1: resolution: {integrity: sha512-VMA3u86bLzNAwD/7DkLtQ9lolgIOx2Sj0kTMMnBvrvEz7w0rQj4aGCR+lqsqtld63gKiLyT4BnQZ3gmGDXtvjg==} - eslint-json-compat-utils@0.2.1: - resolution: {integrity: sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==} + eslint-json-compat-utils@0.2.2: + resolution: {integrity: sha512-KcTUifi8VSSHkrOY0FzB7smuTZRU9T2nCrcCy6k2b+Q77+uylBQVIxN4baVCIWvWJEpud+IsrYgco4JJ6io05g==} engines: {node: '>=12'} peerDependencies: '@eslint/json': '*' eslint: '*' - jsonc-eslint-parser: ^2.4.0 + jsonc-eslint-parser: ^2.4.0 || ^3.0.0 peerDependenciesMeta: '@eslint/json': optional: true @@ -538,17 +533,17 @@ packages: peerDependencies: eslint: '>=8' - eslint-plugin-import-lite@0.5.1: - resolution: {integrity: sha512-J+EqremfzXlB1WA/SKQxdZ2yeXgtpCorbcN0wS1KOTLnlSYiGR62MvAtM0zNWy1oDMjL/Lqkqf92Ahs1V5lyUg==} + eslint-plugin-import-lite@0.5.2: + resolution: {integrity: sha512-XvfdWOC5dSLEI9krIPRlNmKSI2ViIE9pVylzfV9fCq0ZpDaNeUk6o0wZv0OzN83QdadgXp1NsY0qjLINxwYCsw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=9.0.0' - eslint-plugin-jsdoc@62.6.0: - resolution: {integrity: sha512-Z18zZD1Q2m9usqFbAzb30z+lF8bzE4WiUy+dfOXljJlZ1Jm5uhkuAWfGV97FYyh+WlKfrvpDYs+s1z45eZWMfA==} + eslint-plugin-jsdoc@62.7.0: + resolution: {integrity: sha512-jootujJOIGMkCLN+/WgDFKtaclCt2MEEy9cZ1RyK19Az1JvVI3awbeMXNlJ6y4h8RWIJpcXqmxsu4t9NThYbNw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 eslint-plugin-jsonc@2.21.1: resolution: {integrity: sha512-dbNR5iEnQeORwsK2WZzr3QaMtFCY3kKJVMRHPzUpKzMhmVy2zIpVgFDpX8MNoIdoqz6KCpCfOJavhfiSbZbN+w==} @@ -630,8 +625,8 @@ packages: '@vue/compiler-sfc': ^3.3.0 eslint: '>=9.0.0' - eslint-scope@9.1.0: - resolution: {integrity: sha512-CkWE42hOJsNj9FJRaoMX9waUFYhqY4jmyLFdAdzZr6VaCg3ynLYx4WnOdkaIifGfH4gsUcBTn4OZbHXkpLD0FQ==} + eslint-scope@9.1.1: + resolution: {integrity: sha512-GaUN0sWim5qc8KVErfPBWmc31LEsOkrUJbvJZV+xuL3u2phMUK4HIvXlWAakfC8W4nzlK+chPEAkYOYb5ZScIw==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} eslint-visitor-keys@3.4.3: @@ -642,12 +637,12 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint-visitor-keys@5.0.0: - resolution: {integrity: sha512-A0XeIi7CXU7nPlfHS9loMYEKxUaONu/hTEzHTGba9Huu94Cq1hPivf+DE5erJozZOky0LfvXAyrV/tcswpLI0Q==} + eslint-visitor-keys@5.0.1: + resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - eslint@10.0.0: - resolution: {integrity: sha512-O0piBKY36YSJhlFSG8p9VUdPV/SxxS4FYDWVpr/9GJuMaepzwlf4J8I4ov1b+ySQfDTPhc3DtLaxcT1fN0yqCg==} + eslint@10.0.1: + resolution: {integrity: sha512-20MV9SUdeN6Jd84xESsKhRly+/vxI+hwvpBMA93s+9dAcjdCuCojn4IqUGS3lvVaqjVYGYHSRMCpeFtF2rQYxQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} hasBin: true peerDependencies: @@ -660,8 +655,8 @@ packages: resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - espree@11.1.0: - resolution: {integrity: sha512-WFWYhO1fV4iYkqOOvq8FbqIhr2pYfoDY0kCotMkDeNtGpiGGkZ1iov2u8ydjtgM8yF8rzK7oaTbw2NAzbAbehw==} + espree@11.1.1: + resolution: {integrity: sha512-AVHPqQoZYc+RUM4/3Ly5udlZY/U4LS8pIG05jEjWM2lQMU/oaZ7qshzAl2YP1tfNmXfftH3ohurfwNAug+MnsQ==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} espree@9.6.1: @@ -852,8 +847,8 @@ packages: mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} + mdast-util-from-markdown@2.0.3: + resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} mdast-util-frontmatter@2.0.1: resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} @@ -972,12 +967,12 @@ packages: micromark@4.0.2: resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - minimatch@10.2.1: - resolution: {integrity: sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==} - engines: {node: 20 || >=22} + minimatch@10.2.2: + resolution: {integrity: sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==} + engines: {node: 18 || 20 || >=22} - minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + minimatch@9.0.6: + resolution: {integrity: sha512-kQAVowdR33euIqeA0+VZTDqU+qo1IeVY+hrKYtZMio3Pg0P0vuh/kwRylLUddJhB6pf3q/botcOvRtx4IN1wqQ==} engines: {node: '>=16 || 14 >=14.17'} mlly@1.8.0: @@ -1135,8 +1130,8 @@ packages: spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.22: - resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} strip-indent@4.1.1: resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==} @@ -1250,44 +1245,44 @@ packages: snapshots: - '@antfu/eslint-config@7.4.3(@vue/compiler-sfc@3.5.28)(eslint@10.0.0)(typescript@5.9.3)': + '@antfu/eslint-config@7.4.3(@vue/compiler-sfc@3.5.28)(eslint@10.0.1)(typescript@5.9.3)': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 1.0.1 - '@eslint-community/eslint-plugin-eslint-comments': 4.6.0(eslint@10.0.0) + '@eslint-community/eslint-plugin-eslint-comments': 4.6.0(eslint@10.0.1) '@eslint/markdown': 7.5.1 - '@stylistic/eslint-plugin': 5.8.0(eslint@10.0.0) - '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.0)(typescript@5.9.3))(eslint@10.0.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.56.0(eslint@10.0.0)(typescript@5.9.3) - '@vitest/eslint-plugin': 1.6.9(eslint@10.0.0)(typescript@5.9.3) + '@stylistic/eslint-plugin': 5.9.0(eslint@10.0.1) + '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.1)(typescript@5.9.3))(eslint@10.0.1)(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.0(eslint@10.0.1)(typescript@5.9.3) + '@vitest/eslint-plugin': 1.6.9(eslint@10.0.1)(typescript@5.9.3) ansis: 4.2.0 cac: 6.7.14 - eslint: 10.0.0 - eslint-config-flat-gitignore: 2.1.0(eslint@10.0.0) + eslint: 10.0.1 + eslint-config-flat-gitignore: 2.2.1(eslint@10.0.1) eslint-flat-config-utils: 3.0.1 - eslint-merge-processors: 2.0.0(eslint@10.0.0) - eslint-plugin-antfu: 3.2.2(eslint@10.0.0) - eslint-plugin-command: 3.4.0(eslint@10.0.0) - eslint-plugin-import-lite: 0.5.1(eslint@10.0.0) - eslint-plugin-jsdoc: 62.6.0(eslint@10.0.0) - eslint-plugin-jsonc: 2.21.1(eslint@10.0.0) - eslint-plugin-n: 17.24.0(eslint@10.0.0)(typescript@5.9.3) + eslint-merge-processors: 2.0.0(eslint@10.0.1) + eslint-plugin-antfu: 3.2.2(eslint@10.0.1) + eslint-plugin-command: 3.4.0(eslint@10.0.1) + eslint-plugin-import-lite: 0.5.2(eslint@10.0.1) + eslint-plugin-jsdoc: 62.7.0(eslint@10.0.1) + eslint-plugin-jsonc: 2.21.1(eslint@10.0.1) + eslint-plugin-n: 17.24.0(eslint@10.0.1)(typescript@5.9.3) eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-perfectionist: 5.6.0(eslint@10.0.0)(typescript@5.9.3) - eslint-plugin-pnpm: 1.5.0(eslint@10.0.0) - eslint-plugin-regexp: 3.0.0(eslint@10.0.0) - eslint-plugin-toml: 1.1.1(@eslint/markdown@7.5.1)(eslint@10.0.0) - eslint-plugin-unicorn: 63.0.0(eslint@10.0.0) - eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.0)(typescript@5.9.3))(eslint@10.0.0)(typescript@5.9.3))(eslint@10.0.0) - eslint-plugin-vue: 10.8.0(@stylistic/eslint-plugin@5.8.0(eslint@10.0.0))(@typescript-eslint/parser@8.56.0(eslint@10.0.0)(typescript@5.9.3))(eslint@10.0.0)(vue-eslint-parser@10.4.0(eslint@10.0.0)) - eslint-plugin-yml: 3.2.1(@eslint/markdown@7.5.1)(eslint@10.0.0) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.28)(eslint@10.0.0) + eslint-plugin-perfectionist: 5.6.0(eslint@10.0.1)(typescript@5.9.3) + eslint-plugin-pnpm: 1.5.0(eslint@10.0.1) + eslint-plugin-regexp: 3.0.0(eslint@10.0.1) + eslint-plugin-toml: 1.1.1(@eslint/markdown@7.5.1)(eslint@10.0.1) + eslint-plugin-unicorn: 63.0.0(eslint@10.0.1) + eslint-plugin-unused-imports: 4.4.1(@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.1)(typescript@5.9.3))(eslint@10.0.1)(typescript@5.9.3))(eslint@10.0.1) + eslint-plugin-vue: 10.8.0(@stylistic/eslint-plugin@5.9.0(eslint@10.0.1))(@typescript-eslint/parser@8.56.0(eslint@10.0.1)(typescript@5.9.3))(eslint@10.0.1)(vue-eslint-parser@10.4.0(eslint@10.0.1)) + eslint-plugin-yml: 3.2.1(@eslint/markdown@7.5.1)(eslint@10.0.1) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.28)(eslint@10.0.1) globals: 17.3.0 jsonc-eslint-parser: 2.4.2 local-pkg: 1.1.2 parse-gitignore: 2.0.0 toml-eslint-parser: 1.0.3 - vue-eslint-parser: 10.4.0(eslint@10.0.0) + vue-eslint-parser: 10.4.0(eslint@10.0.1) yaml-eslint-parser: 2.0.0 transitivePeerDependencies: - '@eslint/json' @@ -1343,30 +1338,30 @@ snapshots: '@es-joy/resolve.exports@1.2.0': {} - '@eslint-community/eslint-plugin-eslint-comments@4.6.0(eslint@10.0.0)': + '@eslint-community/eslint-plugin-eslint-comments@4.6.0(eslint@10.0.1)': dependencies: escape-string-regexp: 4.0.0 - eslint: 10.0.0 + eslint: 10.0.1 ignore: 7.0.5 - '@eslint-community/eslint-utils@4.9.1(eslint@10.0.0)': + '@eslint-community/eslint-utils@4.9.1(eslint@10.0.1)': dependencies: - eslint: 10.0.0 + eslint: 10.0.1 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.2': {} - '@eslint/compat@1.4.1(eslint@10.0.0)': + '@eslint/compat@2.0.2(eslint@10.0.1)': dependencies: - '@eslint/core': 0.17.0 + '@eslint/core': 1.1.0 optionalDependencies: - eslint: 10.0.0 + eslint: 10.0.1 - '@eslint/config-array@0.23.1': + '@eslint/config-array@0.23.2': dependencies: - '@eslint/object-schema': 3.0.1 + '@eslint/object-schema': 3.0.2 debug: 4.4.3 - minimatch: 10.2.1 + minimatch: 10.2.2 transitivePeerDependencies: - supports-color @@ -1387,7 +1382,7 @@ snapshots: '@eslint/core': 0.17.0 '@eslint/plugin-kit': 0.4.1 github-slugger: 2.0.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-frontmatter: 2.0.1 mdast-util-gfm: 3.1.0 micromark-extension-frontmatter: 2.0.0 @@ -1396,7 +1391,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/object-schema@3.0.1': {} + '@eslint/object-schema@3.0.2': {} '@eslint/plugin-kit@0.4.1': dependencies: @@ -1421,20 +1416,20 @@ snapshots: '@jridgewell/sourcemap-codec@1.5.5': {} - '@ota-meshi/ast-token-store@0.2.1(@eslint/markdown@7.5.1)(eslint@10.0.0)': + '@ota-meshi/ast-token-store@0.2.1(@eslint/markdown@7.5.1)(eslint@10.0.1)': dependencies: '@eslint/markdown': 7.5.1 - eslint: 10.0.0 + eslint: 10.0.1 '@pkgr/core@0.2.9': {} '@sindresorhus/base62@1.0.0': {} - '@stylistic/eslint-plugin@5.8.0(eslint@10.0.0)': + '@stylistic/eslint-plugin@5.9.0(eslint@10.0.1)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.1) '@typescript-eslint/types': 8.56.0 - eslint: 10.0.0 + eslint: 10.0.1 eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -1458,15 +1453,15 @@ snapshots: '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.0)(typescript@5.9.3))(eslint@10.0.0)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.1)(typescript@5.9.3))(eslint@10.0.1)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.56.0(eslint@10.0.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.56.0(eslint@10.0.1)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/type-utils': 8.56.0(eslint@10.0.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@10.0.0)(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.56.0(eslint@10.0.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.0.1)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.56.0 - eslint: 10.0.0 + eslint: 10.0.1 ignore: 7.0.5 natural-compare: 1.4.0 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -1474,14 +1469,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.56.0(eslint@10.0.0)(typescript@5.9.3)': + '@typescript-eslint/parser@8.56.0(eslint@10.0.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.56.0 '@typescript-eslint/types': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3 - eslint: 10.0.0 + eslint: 10.0.1 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -1504,13 +1499,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.56.0(eslint@10.0.0)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.56.0(eslint@10.0.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.56.0(eslint@10.0.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.56.0(eslint@10.0.1)(typescript@5.9.3) debug: 4.4.3 - eslint: 10.0.0 + eslint: 10.0.1 ts-api-utils: 2.4.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -1525,7 +1520,7 @@ snapshots: '@typescript-eslint/types': 8.56.0 '@typescript-eslint/visitor-keys': 8.56.0 debug: 4.4.3 - minimatch: 9.0.5 + minimatch: 9.0.6 semver: 7.7.4 tinyglobby: 0.2.15 ts-api-utils: 2.4.0(typescript@5.9.3) @@ -1533,13 +1528,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.56.0(eslint@10.0.0)(typescript@5.9.3)': + '@typescript-eslint/utils@8.56.0(eslint@10.0.1)(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.1) '@typescript-eslint/scope-manager': 8.56.0 '@typescript-eslint/types': 8.56.0 '@typescript-eslint/typescript-estree': 8.56.0(typescript@5.9.3) - eslint: 10.0.0 + eslint: 10.0.1 typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -1547,13 +1542,13 @@ snapshots: '@typescript-eslint/visitor-keys@8.56.0': dependencies: '@typescript-eslint/types': 8.56.0 - eslint-visitor-keys: 5.0.0 + eslint-visitor-keys: 5.0.1 - '@vitest/eslint-plugin@1.6.9(eslint@10.0.0)(typescript@5.9.3)': + '@vitest/eslint-plugin@1.6.9(eslint@10.0.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.56.0 - '@typescript-eslint/utils': 8.56.0(eslint@10.0.0)(typescript@5.9.3) - eslint: 10.0.0 + '@typescript-eslint/utils': 8.56.0(eslint@10.0.1)(typescript@5.9.3) + eslint: 10.0.1 optionalDependencies: typescript: 5.9.3 transitivePeerDependencies: @@ -1591,13 +1586,13 @@ snapshots: '@vue/shared@3.5.28': {} - acorn-jsx@5.3.2(acorn@8.15.0): + acorn-jsx@5.3.2(acorn@8.16.0): dependencies: - acorn: 8.15.0 + acorn: 8.16.0 - acorn@8.15.0: {} + acorn@8.16.0: {} - ajv@6.12.6: + ajv@6.14.0: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -1608,27 +1603,21 @@ snapshots: are-docs-informative@0.0.2: {} - balanced-match@1.0.2: {} + balanced-match@4.0.4: {} - balanced-match@4.0.3: {} - - baseline-browser-mapping@2.9.19: {} + baseline-browser-mapping@2.10.0: {} boolbase@1.0.0: {} - brace-expansion@2.0.2: + brace-expansion@5.0.3: dependencies: - balanced-match: 1.0.2 - - brace-expansion@5.0.2: - dependencies: - balanced-match: 4.0.3 + balanced-match: 4.0.4 browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.19 - caniuse-lite: 1.0.30001770 - electron-to-chromium: 1.5.286 + baseline-browser-mapping: 2.10.0 + caniuse-lite: 1.0.30001772 + electron-to-chromium: 1.5.302 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -1636,7 +1625,7 @@ snapshots: cac@6.7.14: {} - caniuse-lite@1.0.30001770: {} + caniuse-lite@1.0.30001772: {} ccount@2.0.1: {} @@ -1690,7 +1679,7 @@ snapshots: diff-sequences@29.6.3: {} - electron-to-chromium@1.5.286: {} + electron-to-chromium@1.5.302: {} empathic@2.0.0: {} @@ -1709,57 +1698,57 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-compat-utils@0.5.1(eslint@10.0.0): + eslint-compat-utils@0.5.1(eslint@10.0.1): dependencies: - eslint: 10.0.0 + eslint: 10.0.1 semver: 7.7.4 - eslint-compat-utils@0.6.5(eslint@10.0.0): + eslint-compat-utils@0.6.5(eslint@10.0.1): dependencies: - eslint: 10.0.0 + eslint: 10.0.1 semver: 7.7.4 - eslint-config-flat-gitignore@2.1.0(eslint@10.0.0): + eslint-config-flat-gitignore@2.2.1(eslint@10.0.1): dependencies: - '@eslint/compat': 1.4.1(eslint@10.0.0) - eslint: 10.0.0 + '@eslint/compat': 2.0.2(eslint@10.0.1) + eslint: 10.0.1 eslint-flat-config-utils@3.0.1: dependencies: '@eslint/config-helpers': 0.5.2 pathe: 2.0.3 - eslint-json-compat-utils@0.2.1(eslint@10.0.0)(jsonc-eslint-parser@2.4.2): + eslint-json-compat-utils@0.2.2(eslint@10.0.1)(jsonc-eslint-parser@2.4.2): dependencies: - eslint: 10.0.0 + eslint: 10.0.1 esquery: 1.7.0 jsonc-eslint-parser: 2.4.2 - eslint-merge-processors@2.0.0(eslint@10.0.0): + eslint-merge-processors@2.0.0(eslint@10.0.1): dependencies: - eslint: 10.0.0 + eslint: 10.0.1 - eslint-plugin-antfu@3.2.2(eslint@10.0.0): + eslint-plugin-antfu@3.2.2(eslint@10.0.1): dependencies: - eslint: 10.0.0 + eslint: 10.0.1 - eslint-plugin-command@3.4.0(eslint@10.0.0): + eslint-plugin-command@3.4.0(eslint@10.0.1): dependencies: '@es-joy/jsdoccomment': 0.78.0 - eslint: 10.0.0 + eslint: 10.0.1 - eslint-plugin-es-x@7.8.0(eslint@10.0.0): + eslint-plugin-es-x@7.8.0(eslint@10.0.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.1) '@eslint-community/regexpp': 4.12.2 - eslint: 10.0.0 - eslint-compat-utils: 0.5.1(eslint@10.0.0) + eslint: 10.0.1 + eslint-compat-utils: 0.5.1(eslint@10.0.1) - eslint-plugin-import-lite@0.5.1(eslint@10.0.0): + eslint-plugin-import-lite@0.5.2(eslint@10.0.1): dependencies: - eslint: 10.0.0 + eslint: 10.0.1 - eslint-plugin-jsdoc@62.6.0(eslint@10.0.0): + eslint-plugin-jsdoc@62.7.0(eslint@10.0.1): dependencies: '@es-joy/jsdoccomment': 0.84.0 '@es-joy/resolve.exports': 1.2.0 @@ -1767,8 +1756,8 @@ snapshots: comment-parser: 1.4.5 debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint: 10.0.0 - espree: 11.1.0 + eslint: 10.0.1 + espree: 11.1.1 esquery: 1.7.0 html-entities: 2.6.0 object-deep-merge: 2.0.0 @@ -1779,13 +1768,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-jsonc@2.21.1(eslint@10.0.0): + eslint-plugin-jsonc@2.21.1(eslint@10.0.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.1) diff-sequences: 27.5.1 - eslint: 10.0.0 - eslint-compat-utils: 0.6.5(eslint@10.0.0) - eslint-json-compat-utils: 0.2.1(eslint@10.0.0)(jsonc-eslint-parser@2.4.2) + eslint: 10.0.1 + eslint-compat-utils: 0.6.5(eslint@10.0.1) + eslint-json-compat-utils: 0.2.2(eslint@10.0.1)(jsonc-eslint-parser@2.4.2) espree: 10.4.0 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.2 @@ -1794,12 +1783,12 @@ snapshots: transitivePeerDependencies: - '@eslint/json' - eslint-plugin-n@17.24.0(eslint@10.0.0)(typescript@5.9.3): + eslint-plugin-n@17.24.0(eslint@10.0.1)(typescript@5.9.3): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.1) enhanced-resolve: 5.19.0 - eslint: 10.0.0 - eslint-plugin-es-x: 7.8.0(eslint@10.0.0) + eslint: 10.0.1 + eslint-plugin-es-x: 7.8.0(eslint@10.0.1) get-tsconfig: 4.13.6 globals: 15.15.0 globrex: 0.1.2 @@ -1811,19 +1800,19 @@ snapshots: eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-perfectionist@5.6.0(eslint@10.0.0)(typescript@5.9.3): + eslint-plugin-perfectionist@5.6.0(eslint@10.0.1)(typescript@5.9.3): dependencies: - '@typescript-eslint/utils': 8.56.0(eslint@10.0.0)(typescript@5.9.3) - eslint: 10.0.0 + '@typescript-eslint/utils': 8.56.0(eslint@10.0.1)(typescript@5.9.3) + eslint: 10.0.1 natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-pnpm@1.5.0(eslint@10.0.0): + eslint-plugin-pnpm@1.5.0(eslint@10.0.1): dependencies: empathic: 2.0.0 - eslint: 10.0.0 + eslint: 10.0.1 jsonc-eslint-parser: 2.4.2 pathe: 2.0.3 pnpm-workspace-yaml: 1.5.0 @@ -1831,38 +1820,38 @@ snapshots: yaml: 2.8.2 yaml-eslint-parser: 2.0.0 - eslint-plugin-regexp@3.0.0(eslint@10.0.0): + eslint-plugin-regexp@3.0.0(eslint@10.0.1): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.1) '@eslint-community/regexpp': 4.12.2 comment-parser: 1.4.5 - eslint: 10.0.0 + eslint: 10.0.1 jsdoc-type-pratt-parser: 7.1.1 refa: 0.12.1 regexp-ast-analysis: 0.7.1 scslre: 0.3.0 - eslint-plugin-toml@1.1.1(@eslint/markdown@7.5.1)(eslint@10.0.0): + eslint-plugin-toml@1.1.1(@eslint/markdown@7.5.1)(eslint@10.0.1): dependencies: '@eslint/core': 1.1.0 '@eslint/plugin-kit': 0.6.0 - '@ota-meshi/ast-token-store': 0.2.1(@eslint/markdown@7.5.1)(eslint@10.0.0) + '@ota-meshi/ast-token-store': 0.2.1(@eslint/markdown@7.5.1)(eslint@10.0.1) debug: 4.4.3 - eslint: 10.0.0 + eslint: 10.0.1 toml-eslint-parser: 1.0.3 transitivePeerDependencies: - '@eslint/markdown' - supports-color - eslint-plugin-unicorn@63.0.0(eslint@10.0.0): + eslint-plugin-unicorn@63.0.0(eslint@10.0.1): dependencies: '@babel/helper-validator-identifier': 7.28.5 - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.1) change-case: 5.4.4 ci-info: 4.4.0 clean-regexp: 1.0.0 core-js-compat: 3.48.0 - eslint: 10.0.0 + eslint: 10.0.1 find-up-simple: 1.0.1 globals: 16.5.0 indent-string: 5.0.0 @@ -1874,47 +1863,47 @@ snapshots: semver: 7.7.4 strip-indent: 4.1.1 - eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.0)(typescript@5.9.3))(eslint@10.0.0)(typescript@5.9.3))(eslint@10.0.0): + eslint-plugin-unused-imports@4.4.1(@typescript-eslint/eslint-plugin@8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.1)(typescript@5.9.3))(eslint@10.0.1)(typescript@5.9.3))(eslint@10.0.1): dependencies: - eslint: 10.0.0 + eslint: 10.0.1 optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.0)(typescript@5.9.3))(eslint@10.0.0)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.56.0(@typescript-eslint/parser@8.56.0(eslint@10.0.1)(typescript@5.9.3))(eslint@10.0.1)(typescript@5.9.3) - eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.8.0(eslint@10.0.0))(@typescript-eslint/parser@8.56.0(eslint@10.0.0)(typescript@5.9.3))(eslint@10.0.0)(vue-eslint-parser@10.4.0(eslint@10.0.0)): + eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.9.0(eslint@10.0.1))(@typescript-eslint/parser@8.56.0(eslint@10.0.1)(typescript@5.9.3))(eslint@10.0.1)(vue-eslint-parser@10.4.0(eslint@10.0.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0) - eslint: 10.0.0 + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.1) + eslint: 10.0.1 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 7.1.1 semver: 7.7.4 - vue-eslint-parser: 10.4.0(eslint@10.0.0) + vue-eslint-parser: 10.4.0(eslint@10.0.1) xml-name-validator: 4.0.0 optionalDependencies: - '@stylistic/eslint-plugin': 5.8.0(eslint@10.0.0) - '@typescript-eslint/parser': 8.56.0(eslint@10.0.0)(typescript@5.9.3) + '@stylistic/eslint-plugin': 5.9.0(eslint@10.0.1) + '@typescript-eslint/parser': 8.56.0(eslint@10.0.1)(typescript@5.9.3) - eslint-plugin-yml@3.2.1(@eslint/markdown@7.5.1)(eslint@10.0.0): + eslint-plugin-yml@3.2.1(@eslint/markdown@7.5.1)(eslint@10.0.1): dependencies: '@eslint/core': 1.1.0 '@eslint/plugin-kit': 0.6.0 - '@ota-meshi/ast-token-store': 0.2.1(@eslint/markdown@7.5.1)(eslint@10.0.0) + '@ota-meshi/ast-token-store': 0.2.1(@eslint/markdown@7.5.1)(eslint@10.0.1) debug: 4.4.3 diff-sequences: 29.6.3 escape-string-regexp: 5.0.0 - eslint: 10.0.0 + eslint: 10.0.1 natural-compare: 1.4.0 yaml-eslint-parser: 2.0.0 transitivePeerDependencies: - '@eslint/markdown' - supports-color - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.28)(eslint@10.0.0): + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.28)(eslint@10.0.1): dependencies: '@vue/compiler-sfc': 3.5.28 - eslint: 10.0.0 + eslint: 10.0.1 - eslint-scope@9.1.0: + eslint-scope@9.1.1: dependencies: '@types/esrecurse': 4.3.1 '@types/estree': 1.0.8 @@ -1925,13 +1914,13 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint-visitor-keys@5.0.0: {} + eslint-visitor-keys@5.0.1: {} - eslint@10.0.0: + eslint@10.0.1: dependencies: - '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.0) + '@eslint-community/eslint-utils': 4.9.1(eslint@10.0.1) '@eslint-community/regexpp': 4.12.2 - '@eslint/config-array': 0.23.1 + '@eslint/config-array': 0.23.2 '@eslint/config-helpers': 0.5.2 '@eslint/core': 1.1.0 '@eslint/plugin-kit': 0.6.0 @@ -1939,13 +1928,13 @@ snapshots: '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 - ajv: 6.12.6 + ajv: 6.14.0 cross-spawn: 7.0.6 debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 9.1.0 - eslint-visitor-keys: 5.0.0 - espree: 11.1.0 + eslint-scope: 9.1.1 + eslint-visitor-keys: 5.0.1 + espree: 11.1.1 esquery: 1.7.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -1956,7 +1945,7 @@ snapshots: imurmurhash: 0.1.4 is-glob: 4.0.3 json-stable-stringify-without-jsonify: 1.0.1 - minimatch: 10.2.1 + minimatch: 10.2.2 natural-compare: 1.4.0 optionator: 0.9.4 transitivePeerDependencies: @@ -1964,20 +1953,20 @@ snapshots: espree@10.4.0: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 4.2.1 - espree@11.1.0: + espree@11.1.1: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) - eslint-visitor-keys: 5.0.0 + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) + eslint-visitor-keys: 5.0.1 espree@9.6.1: dependencies: - acorn: 8.15.0 - acorn-jsx: 5.3.2(acorn@8.15.0) + acorn: 8.16.0 + acorn-jsx: 5.3.2(acorn@8.16.0) eslint-visitor-keys: 3.4.3 esquery@1.7.0: @@ -2088,7 +2077,7 @@ snapshots: jsonc-eslint-parser@2.4.2: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 eslint-visitor-keys: 3.4.3 espree: 9.6.1 semver: 7.7.4 @@ -2127,7 +2116,7 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - mdast-util-from-markdown@2.0.2: + mdast-util-from-markdown@2.0.3: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 @@ -2149,7 +2138,7 @@ snapshots: '@types/mdast': 4.0.4 devlop: 1.1.0 escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 micromark-extension-frontmatter: 2.0.0 transitivePeerDependencies: @@ -2167,7 +2156,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: @@ -2176,7 +2165,7 @@ snapshots: mdast-util-gfm-strikethrough@2.0.0: dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -2186,7 +2175,7 @@ snapshots: '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -2195,14 +2184,14 @@ snapshots: dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-gfm@3.1.0: dependencies: - mdast-util-from-markdown: 2.0.2 + mdast-util-from-markdown: 2.0.3 mdast-util-gfm-autolink-literal: 2.0.1 mdast-util-gfm-footnote: 2.1.0 mdast-util-gfm-strikethrough: 2.0.0 @@ -2431,17 +2420,17 @@ snapshots: transitivePeerDependencies: - supports-color - minimatch@10.2.1: + minimatch@10.2.2: dependencies: - brace-expansion: 5.0.2 + brace-expansion: 5.0.3 - minimatch@9.0.5: + minimatch@9.0.6: dependencies: - brace-expansion: 2.0.2 + brace-expansion: 5.0.3 mlly@1.8.0: dependencies: - acorn: 8.15.0 + acorn: 8.16.0 pathe: 2.0.3 pkg-types: 1.3.1 ufo: 1.6.3 @@ -2576,9 +2565,9 @@ snapshots: spdx-expression-parse@4.0.0: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.22 + spdx-license-ids: 3.0.23 - spdx-license-ids@3.0.22: {} + spdx-license-ids@3.0.23: {} strip-indent@4.1.1: {} @@ -2602,7 +2591,7 @@ snapshots: toml-eslint-parser@1.0.3: dependencies: - eslint-visitor-keys: 5.0.0 + eslint-visitor-keys: 5.0.1 ts-api-utils@2.4.0(typescript@5.9.3): dependencies: @@ -2652,13 +2641,13 @@ snapshots: util-deprecate@1.0.2: {} - vue-eslint-parser@10.4.0(eslint@10.0.0): + vue-eslint-parser@10.4.0(eslint@10.0.1): dependencies: debug: 4.4.3 - eslint: 10.0.0 - eslint-scope: 9.1.0 - eslint-visitor-keys: 5.0.0 - espree: 11.1.0 + eslint: 10.0.1 + eslint-scope: 9.1.1 + eslint-visitor-keys: 5.0.1 + espree: 11.1.1 esquery: 1.7.0 semver: 7.7.4 transitivePeerDependencies: @@ -2674,7 +2663,7 @@ snapshots: yaml-eslint-parser@2.0.0: dependencies: - eslint-visitor-keys: 5.0.0 + eslint-visitor-keys: 5.0.1 yaml: 2.8.2 yaml@2.8.2: {} diff --git a/src/_template/base.mk b/src/_template/base.mk index a6aa688..90fe363 100644 --- a/src/_template/base.mk +++ b/src/_template/base.mk @@ -1,3 +1,12 @@ +HELM_DIR ?= ./helm +HELM_CHART_VERSION ?= +HELM_OCI_REGISTRY ?= +HELM_OCI_NAMESPACE ?= +HELM_OCI_USERNAME ?= +HELM_OCI_PASSWORD ?= + +LOGS_TAIL ?= 100 + .PHONY: repo-add repo-add: ifdef HELM_REPO_NAME @@ -19,7 +28,8 @@ install: --namespace $(HELM_NAMESPACE) \ --create-namespace \ $(if $(HELM_CHART_VERSION),--version $(HELM_CHART_VERSION),) \ - --values $(HELM_VALUES_FILE) > output.log 2>&1 || (cat output.log && exit 1) + --values $(HELM_VALUES_FILE) > output.log 2>&1 || (cat output.log && exit 1) \ + $(if $(HELM_INSTALL_ARGS),$(HELM_INSTALL_ARGS),) .PHONY: uninstall uninstall: @@ -27,7 +37,9 @@ uninstall: .PHONY: values values: - helm show values $(HELM_CHART_REPO) > $(HELM_APPLICATION_NAME)-values.yaml + helm show values $(HELM_CHART_REPO) \ + $(if $(HELM_CHART_VERSION),--version $(HELM_CHART_VERSION),) \ + > $(HELM_APPLICATION_NAME)-values.yaml .PHONY: versions versions: @@ -61,4 +73,4 @@ helm-push: .PHONY: logs logs: - kubectl logs -n $(HELM_NAMESPACE) -l app=$(HELM_APPLICATION_NAME) --tail=100 --follow + kubectl logs -n $(HELM_NAMESPACE) -l app=$(HELM_APPLICATION_NAME) --tail=$(LOGS_TAIL) --follow diff --git a/src/airflow/Makefile b/src/airflow/Makefile index 8970b0b..e5e419a 100644 --- a/src/airflow/Makefile +++ b/src/airflow/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= apache-airflow HELM_REPO_URL ?= https://airflow.apache.org HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/argocd/Makefile b/src/argocd/Makefile index bc0bec6..ecd31b9 100644 --- a/src/argocd/Makefile +++ b/src/argocd/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= argo HELM_REPO_URL ?= https://argoproj.github.io/argo-helm HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/clickhouse/Makefile b/src/clickhouse/Makefile index 37fbed6..e9c888f 100644 --- a/src/clickhouse/Makefile +++ b/src/clickhouse/Makefile @@ -9,6 +9,5 @@ HELM_OCI_NAMESPACE ?= HELM_REPO_NAME ?= altinity HELM_REPO_URL ?= https://helm.altinity.com HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/duckdb/Makefile b/src/duckdb/Makefile index c1f787f..73b05ef 100644 --- a/src/duckdb/Makefile +++ b/src/duckdb/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= jupyterhub HELM_REPO_URL ?= https://hub.jupyter.org/helm-chart/ HELM_CHART_REPO ?= $(HELM_REPO_NAME)/jupyterhub -HELM_LANE ?= include ../_template/base.mk diff --git a/src/elasticsearch/Makefile b/src/elasticsearch/Makefile index 4e1a9b7..5d8b4b1 100644 --- a/src/elasticsearch/Makefile +++ b/src/elasticsearch/Makefile @@ -9,6 +9,5 @@ HELM_OCI_NAMESPACE ?= HELM_REPO_NAME ?= elastic HELM_REPO_URL ?= https://helm.elastic.co HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/etcd/Makefile b/src/etcd/Makefile index 5c2a1b5..d279013 100644 --- a/src/etcd/Makefile +++ b/src/etcd/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/flink/Makefile b/src/flink/Makefile index 6fd166c..10f6f39 100644 --- a/src/flink/Makefile +++ b/src/flink/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= flink-operator HELM_REPO_URL ?= https://downloads.apache.org/flink/flink-kubernetes-operator-1.9.0/ HELM_CHART_REPO ?= $(HELM_REPO_NAME)/flink-operator -HELM_LANE ?= include ../_template/base.mk diff --git a/src/gitea-runner/Makefile b/src/gitea-runner/Makefile index 06bc1dc..1dee121 100644 --- a/src/gitea-runner/Makefile +++ b/src/gitea-runner/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= gitea HELM_REPO_URL ?= https://dl.gitea.com/charts HELM_CHART_REPO ?= $(HELM_REPO_NAME)/actions -HELM_LANE ?= include ../_template/base.mk diff --git a/src/gitea/Makefile b/src/gitea/Makefile index 9f19d86..41d8ee9 100644 --- a/src/gitea/Makefile +++ b/src/gitea/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= gitea HELM_REPO_URL ?= https://dl.gitea.com/charts HELM_CHART_REPO ?= $(HELM_REPO_NAME)/gitea -HELM_LANE ?= include ../_template/base.mk diff --git a/src/gitlab-runner/Makefile b/src/gitlab-runner/Makefile index 77e3c63..6616b39 100644 --- a/src/gitlab-runner/Makefile +++ b/src/gitlab-runner/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= gitlab HELM_REPO_URL ?= https://charts.gitlab.io HELM_CHART_REPO ?= $(HELM_REPO_NAME)/gitlab-runner -HELM_LANE ?= include ../_template/base.mk diff --git a/src/gitlab/Makefile b/src/gitlab/Makefile index c57b3ca..d3856be 100644 --- a/src/gitlab/Makefile +++ b/src/gitlab/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= gitlab HELM_REPO_URL ?= https://charts.gitlab.io HELM_CHART_REPO ?= $(HELM_REPO_NAME)/gitlab -HELM_LANE ?= include ../_template/base.mk diff --git a/src/grafana/Makefile b/src/grafana/Makefile index 986b9b9..b28f479 100644 --- a/src/grafana/Makefile +++ b/src/grafana/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= grafana HELM_REPO_URL ?= https://grafana.github.io/helm-charts HELM_CHART_REPO ?= $(HELM_REPO_NAME)/grafana -HELM_LANE ?= include ../_template/base.mk diff --git a/src/harbor/Makefile b/src/harbor/Makefile index 48fd746..b2d8a69 100644 --- a/src/harbor/Makefile +++ b/src/harbor/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= harbor HELM_REPO_URL ?= https://helm.goharbor.io HELM_CHART_REPO ?= $(HELM_REPO_NAME)/harbor -HELM_LANE ?= include ../_template/base.mk diff --git a/src/hbase/Makefile b/src/hbase/Makefile index d1e9b0a..3967c00 100644 --- a/src/hbase/Makefile +++ b/src/hbase/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= kubeblocks HELM_REPO_URL ?= https://kubeblocks.io/charts HELM_CHART_REPO ?= $(HELM_REPO_NAME)/hbase-cluster -HELM_LANE ?= include ../_template/base.mk diff --git a/src/jenkins/Makefile b/src/jenkins/Makefile index 9a16ab1..3a8e64f 100644 --- a/src/jenkins/Makefile +++ b/src/jenkins/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= jenkins HELM_REPO_URL ?= https://charts.jenkins.io HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/k3k/Makefile b/src/k3k/Makefile new file mode 100644 index 0000000..de49031 --- /dev/null +++ b/src/k3k/Makefile @@ -0,0 +1,15 @@ +HELM_RELEASE_NAME ?= k3k +HELM_APPLICATION_NAME ?= k3k +HELM_NAMESPACE ?= k3k +HELM_DIR ?= ./helm +HELM_CHART_VERSION ?= +HELM_VALUES_FILE ?= ./values.yaml +HELM_OCI_REGISTRY ?= +HELM_OCI_NAMESPACE ?= +HELM_OCI_USERNAME ?= +HELM_OCI_PASSWORD ?= +HELM_REPO_NAME ?= k3k +HELM_REPO_URL ?= https://rancher.github.io/k3k +HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) + +include ../_template/base.mk diff --git a/src/k3k/README.md b/src/k3k/README.md new file mode 100644 index 0000000..347db00 --- /dev/null +++ b/src/k3k/README.md @@ -0,0 +1,115 @@ +# K3k + +## Introduction + +K3k (Kubernetes in Kubernetes) is a tool that empowers you to create and manage isolated K3s clusters within your existing Kubernetes environment. It enables efficient multi-tenancy, streamlined experimentation, and robust resource isolation, minimizing infrastructure costs by allowing you to run multiple lightweight Kubernetes clusters on the same physical host. + +## Features + +- **Shared Mode**: Optimized resource utilization by sharing underlying resources +- **Virtual Mode**: Complete isolation with dedicated K3s server pods +- **Rancher Integration**: Seamlessly integrates with Rancher for simplified cluster management +- **Resource Isolation**: Define resource limits and quotas for each embedded cluster +- **Lightweight**: Leverages the lightweight nature of K3s for fast cluster provisioning + +## Prerequisites + +- A working Kubernetes cluster (host cluster) +- Storage provider configured (or use ephemeral/static storage) +- kubectl configured to access the host cluster + +## Installation + +To install K3k controller, run: + +```bash +make install +``` + +## Usage + +### Install k3kcli (Optional) + +Download and install the k3k CLI tool: + +```bash +# Linux amd64 +wget -qO k3kcli https://github.com/rancher/k3k/releases/latest/download/k3kcli-linux-amd64 +chmod +x k3kcli +sudo mv k3kcli /usr/local/bin +``` + +### Create a K3k Cluster + +Using k3kcli: + +```bash +k3kcli cluster create my-cluster +``` + +Using kubectl (create a Cluster CR): + +```bash +cat < my-cluster.yaml +``` + +### Delete a K3k Cluster + +```bash +# Using k3kcli +k3kcli cluster delete my-cluster + +# Or using kubectl +kubectl delete cluster my-cluster -n k3k +``` + +## Cluster Modes + +### Shared Mode + +- Server components run as pods in the host cluster +- Efficient resource sharing +- Suitable for development and testing + +### Virtual Mode + +- Each cluster has dedicated K3s server pods +- Complete network and resource isolation +- Suitable for multi-tenant environments + +## Configuration + +Edit `values.yaml` to configure: + +- Controller resources +- Feature gates +- Image versions +- RBAC settings + +## Important Notes + +1. K3k creates virtual Kubernetes clusters within your existing cluster +2. The host cluster must have sufficient resources for virtual clusters +3. Storage classes must be available for persistent workloads +4. Consider network policies for isolation between virtual clusters diff --git a/src/k3k/README.zh.md b/src/k3k/README.zh.md new file mode 100644 index 0000000..1a56f66 --- /dev/null +++ b/src/k3k/README.zh.md @@ -0,0 +1,115 @@ +# K3k + +## 简介 + +K3k(Kubernetes in Kubernetes)是一个工具,让您能够在现有 Kubernetes 环境中创建和管理隔离的 K3s 集群。它实现了高效的多租户、简化的实验环境和强大的资源隔离,通过在同一物理主机上运行多个轻量级 Kubernetes 集群来最小化基础设施成本。 + +## 功能 + +- **共享模式**: 通过共享底层资源优化资源利用率 +- **虚拟模式**: 使用专用 K3s server pod 实现完全隔离 +- **Rancher 集成**: 与 Rancher 无缝集成以简化集群管理 +- **资源隔离**: 为每个嵌入式集群定义资源限制和配额 +- **轻量级**: 利用 K3s 的轻量级特性实现快速集群配置 + +## 前置条件 + +- 一个正常工作的 Kubernetes 集群(主机集群) +- 配置了存储提供商(或使用临时/静态存储) +- 配置了 kubectl 以访问主机集群 + +## 安装 + +安装 K3k 控制器: + +```bash +make install +``` + +## 使用 + +### 安装 k3kcli(可选) + +下载并安装 k3k CLI 工具: + +```bash +# Linux amd64 +wget -qO k3kcli https://github.com/rancher/k3k/releases/latest/download/k3kcli-linux-amd64 +chmod +x k3kcli +sudo mv k3kcli /usr/local/bin +``` + +### 创建 K3k 集群 + +使用 k3kcli: + +```bash +k3kcli cluster create my-cluster +``` + +使用 kubectl(创建 Cluster CR): + +```bash +cat < my-cluster.yaml +``` + +### 删除 K3k 集群 + +```bash +# 使用 k3kcli +k3kcli cluster delete my-cluster + +# 或使用 kubectl +kubectl delete cluster my-cluster -n k3k +``` + +## 集群模式 + +### 共享模式 + +- Server 组件作为 pod 运行在主机集群中 +- 高效的资源共享 +- 适用于开发和测试 + +### 虚拟模式 + +- 每个集群都有专用的 K3s server pod +- 完整的网络和资源隔离 +- 适用于多租户环境 + +## 配置 + +编辑 `values.yaml` 以配置: + +- 控制器资源 +- 功能门 +- 镜像版本 +- RBAC 设置 + +## 重要提示 + +1. K3k 在现有集群中创建虚拟 Kubernetes 集群 +2. 主机集群必须有足够的资源来运行虚拟集群 +3. 持久化工作负载必须有可用的存储类 +4. 考虑使用网络策略来实现虚拟集群之间的隔离 diff --git a/src/k3k/values.yaml b/src/k3k/values.yaml new file mode 100644 index 0000000..c6d5e5e --- /dev/null +++ b/src/k3k/values.yaml @@ -0,0 +1,70 @@ +# Default values for K3k. +# This is a YAML-formatted file. + +# Number of K3k controller replicas +replicaCount: 1 + +image: + repository: rancher/k3k + tag: v1.0.4 + pullPolicy: IfNotPresent + +# Controller configuration +controller: + enabled: true + # Feature gates to enable + featureGates: {} + # VirtualCluster: true + # SharedCluster: true + +# Webhook configuration +webhook: + enabled: true + port: 9443 + +# Resource limits and requests +resources: + limits: + cpu: 500m + memory: 512Mi + requests: + cpu: 100m + memory: 128Mi + +# Service account configuration +serviceAccount: + create: true + name: '' + annotations: {} + +# RBAC configuration +rbac: + create: true + +# Pod security context +podSecurityContext: + runAsNonRoot: true + runAsUser: 1000 + +# Security context +securityContext: + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + readOnlyRootFilesystem: true + +# Node selector +nodeSelector: {} + +# Tolerations +tolerations: [] + +# Affinity +affinity: {} + +# Extra environment variables +extraEnv: [] + +# Extra arguments +extraArgs: [] diff --git a/src/kafka/Makefile b/src/kafka/Makefile index 4f7da05..f896dc5 100644 --- a/src/kafka/Makefile +++ b/src/kafka/Makefile @@ -9,6 +9,5 @@ HELM_OCI_NAMESPACE ?= HELM_REPO_NAME ?= strimzi HELM_REPO_URL ?= https://strimzi.io/charts/ HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/keycloak/Makefile b/src/keycloak/Makefile index 7b12e37..930a722 100644 --- a/src/keycloak/Makefile +++ b/src/keycloak/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/kibana/Makefile b/src/kibana/Makefile index fe3e9eb..94f867f 100644 --- a/src/kibana/Makefile +++ b/src/kibana/Makefile @@ -9,6 +9,5 @@ HELM_OCI_NAMESPACE ?= HELM_REPO_NAME ?= elastic HELM_REPO_URL ?= https://helm.elastic.co HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/kong/Makefile b/src/kong/Makefile index 54cd526..e021967 100644 --- a/src/kong/Makefile +++ b/src/kong/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= kong HELM_REPO_URL ?= https://charts.konghq.com HELM_CHART_REPO ?= $(HELM_REPO_NAME)/kong -HELM_LANE ?= include ../_template/base.mk diff --git a/src/langfuse/Makefile b/src/langfuse/Makefile index 825166c..cc3f3b6 100644 --- a/src/langfuse/Makefile +++ b/src/langfuse/Makefile @@ -9,6 +9,5 @@ HELM_OCI_NAMESPACE ?= HELM_REPO_NAME ?= langfuse HELM_REPO_URL ?= https://langfuse.github.io/langfuse-k8s HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/litellm/Makefile b/src/litellm/Makefile index f86097c..40fc868 100644 --- a/src/litellm/Makefile +++ b/src/litellm/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= litellm HELM_REPO_URL ?= https://berriai.github.io/litellm-helm HELM_CHART_REPO ?= $(HELM_REPO_NAME)/litellm-helm -HELM_LANE ?= include ../_template/base.mk diff --git a/src/loki/Makefile b/src/loki/Makefile index c684817..5b3c016 100644 --- a/src/loki/Makefile +++ b/src/loki/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= grafana HELM_REPO_URL ?= https://grafana.github.io/helm-charts HELM_CHART_REPO ?= $(HELM_REPO_NAME)/loki -HELM_LANE ?= include ../_template/base.mk diff --git a/src/mariadb/Makefile b/src/mariadb/Makefile index e86cfb5..4d2cfaa 100644 --- a/src/mariadb/Makefile +++ b/src/mariadb/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/milvus/Makefile b/src/milvus/Makefile index 45e3f35..5630864 100644 --- a/src/milvus/Makefile +++ b/src/milvus/Makefile @@ -9,6 +9,5 @@ HELM_OCI_NAMESPACE ?= HELM_REPO_NAME ?= milvus HELM_REPO_URL ?= https://zilliztech.github.io/milvus-helm HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/minio/Makefile b/src/minio/Makefile index 69ea59d..c7f78c0 100644 --- a/src/minio/Makefile +++ b/src/minio/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/mlflow/Makefile b/src/mlflow/Makefile index 76403ea..b2a44ce 100644 --- a/src/mlflow/Makefile +++ b/src/mlflow/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= community-charts HELM_REPO_URL ?= https://community-charts.github.io HELM_CHART_REPO ?= $(HELM_REPO_NAME)/mlflow -HELM_LANE ?= include ../_template/base.mk diff --git a/src/mongodb/Makefile b/src/mongodb/Makefile index 0aa1c7b..386b43c 100644 --- a/src/mongodb/Makefile +++ b/src/mongodb/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/mysql/Makefile b/src/mysql/Makefile index b604e94..77ac498 100644 --- a/src/mysql/Makefile +++ b/src/mysql/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= mysql-operator HELM_REPO_URL ?= https://mysql.github.io/mysql-operator/ HELM_CHART_REPO ?= $(HELM_REPO_NAME)/mysql-innodbcluster -HELM_LANE ?= include ../_template/base.mk diff --git a/src/nacos/Makefile b/src/nacos/Makefile index 1ad37b5..f8c7152 100644 --- a/src/nacos/Makefile +++ b/src/nacos/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= nacos HELM_REPO_URL ?= https://nacos-charts.storage.googleapis.com HELM_CHART_REPO ?= $(HELM_REPO_NAME)/nacos -HELM_LANE ?= include ../_template/base.mk diff --git a/src/neo4j/Makefile b/src/neo4j/Makefile index d055034..75357f1 100644 --- a/src/neo4j/Makefile +++ b/src/neo4j/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= neo4j HELM_REPO_URL ?= https://helm.neo4j.com/neo4j HELM_CHART_REPO ?= $(HELM_REPO_NAME)/neo4j -HELM_LANE ?= include ../_template/base.mk diff --git a/src/nexus/Makefile b/src/nexus/Makefile index a8f19ff..ba8088a 100644 --- a/src/nexus/Makefile +++ b/src/nexus/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= sonatype HELM_REPO_URL ?= https://sonatype.github.io/helm3-charts/ HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/nginx/Makefile b/src/nginx/Makefile index 937bd7c..ee1802e 100644 --- a/src/nginx/Makefile +++ b/src/nginx/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/open-webui/Makefile b/src/open-webui/Makefile index b799969..f431b34 100644 --- a/src/open-webui/Makefile +++ b/src/open-webui/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= open-webui HELM_REPO_URL ?= https://helm.openwebui.com HELM_CHART_REPO ?= $(HELM_REPO_NAME)/open-webui -HELM_LANE ?= include ../_template/base.mk diff --git a/src/opentelemetry-collector/Makefile b/src/opentelemetry-collector/Makefile index 23785ee..7fdc710 100644 --- a/src/opentelemetry-collector/Makefile +++ b/src/opentelemetry-collector/Makefile @@ -9,6 +9,5 @@ HELM_OCI_NAMESPACE ?= HELM_REPO_NAME ?= open-telemetry HELM_REPO_URL ?= https://open-telemetry.github.io/opentelemetry-helm-charts HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/phoenix/Makefile b/src/phoenix/Makefile index d8ce29c..482cd6e 100644 --- a/src/phoenix/Makefile +++ b/src/phoenix/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/phoenix-helm -HELM_LANE ?= include ../_template/base.mk diff --git a/src/portainer/Makefile b/src/portainer/Makefile new file mode 100644 index 0000000..1d07769 --- /dev/null +++ b/src/portainer/Makefile @@ -0,0 +1,15 @@ +HELM_RELEASE_NAME ?= portainer +HELM_APPLICATION_NAME ?= portainer +HELM_NAMESPACE ?= portainer +HELM_DIR ?= ./helm +HELM_CHART_VERSION ?= +HELM_VALUES_FILE ?= ./values.yaml +HELM_OCI_REGISTRY ?= +HELM_OCI_NAMESPACE ?= +HELM_OCI_USERNAME ?= +HELM_OCI_PASSWORD ?= +HELM_REPO_NAME ?= portainer +HELM_REPO_URL ?= https://portainer.github.io/k8s/ +HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) + +include ../_template/base.mk diff --git a/src/portainer/README.md b/src/portainer/README.md new file mode 100644 index 0000000..75b1eba --- /dev/null +++ b/src/portainer/README.md @@ -0,0 +1,77 @@ +# Portainer + +## Introduction + +Portainer is a lightweight management UI that allows you to easily manage your Docker and Kubernetes environments. It provides a simple and intuitive interface for deploying and managing containerized applications, as well as managing resources such as networks, volumes, and images. + +## Installation + +To install Portainer, run: + +```bash +make install +``` + +## Usage + +After installation, access Portainer: + +### Using NodePort (default) + +Portainer will be available on port `30777` for HTTP and `30779` for HTTPS. + +```bash +# Port forward to access web UI +kubectl port-forward svc/portainer -n portainer 30777:9000 30779:9443 +``` + +Then open `https://localhost:30779` in your browser. + +### Using LoadBalancer + +If you configured `service.type=LoadBalancer`, get the external IP: + +```bash +kubectl get svc -n portainer +``` + +Then access Portainer at `https://:9443`. + +### Using Ingress + +If you configured ingress, access Portainer at your configured hostname. + +## Initial Setup + +1. Open Portainer in your browser +2. Create an admin user on the initial setup page +3. Select "Kubernetes" as the environment type +4. Start managing your cluster + +## Configuration + +The default configuration uses NodePort service type. You can customize: + +- `service.type`: Change to `LoadBalancer` or `ClusterIP` with ingress +- `tls.force`: Enable/disable TLS +- `persistence.storageClass`: Specify a storage class +- `resources`: Adjust CPU/memory limits + +## Features + +- **Container Management**: Deploy, manage, and monitor containers +- **Image Management**: Pull, push, and manage container images +- **Network Management**: Create and manage Docker networks +- **Volume Management**: Manage persistent storage +- **Multi-Environment**: Manage multiple Kubernetes clusters +- **RBAC**: Role-based access control for teams + +## Customization + +Edit `values.yaml` to configure: + +- Ingress settings +- Resource limits +- Persistence options +- TLS configuration +- Feature flags diff --git a/src/portainer/README.zh.md b/src/portainer/README.zh.md new file mode 100644 index 0000000..301d692 --- /dev/null +++ b/src/portainer/README.zh.md @@ -0,0 +1,77 @@ +# Portainer + +## 简介 + +Portainer 是一个轻量级的管理 UI,可让您轻松管理 Docker 和 Kubernetes 环境。它提供了一个简单直观的界面,用于部署和管理容器化应用程序,以及管理网络、卷和镜像等资源。 + +## 安装 + +安装 Portainer: + +```bash +make install +``` + +## 使用 + +安装完成后,访问 Portainer: + +### 使用 NodePort(默认) + +Portainer 将在端口 `30777`(HTTP)和 `30779`(HTTPS)上可用。 + +```bash +# 端口转发以访问 Web UI +kubectl port-forward svc/portainer -n portainer 30777:9000 30779:9443 +``` + +然后在浏览器中打开 `https://localhost:30779`。 + +### 使用 LoadBalancer + +如果您配置了 `service.type=LoadBalancer`,获取外部 IP: + +```bash +kubectl get svc -n portainer +``` + +然后在 `https://:9443` 访问 Portainer。 + +### 使用 Ingress + +如果您配置了 ingress,请在您配置的主机名访问 Portainer。 + +## 初始设置 + +1. 在浏览器中打开 Portainer +2. 在初始设置页面创建管理员用户 +3. 选择 "Kubernetes" 作为环境类型 +4. 开始管理您的集群 + +## 配置 + +默认配置使用 NodePort 服务类型。您可以自定义: + +- `service.type`: 更改为 `LoadBalancer` 或配合 ingress 使用 `ClusterIP` +- `tls.force`: 启用/禁用 TLS +- `persistence.storageClass`: 指定存储类 +- `resources`: 调整 CPU/内存限制 + +## 功能 + +- **容器管理**: 部署、管理和监控容器 +- **镜像管理**: 拉取、推送和管理容器镜像 +- **网络管理**: 创建和管理 Docker 网络 +- **卷管理**: 管理持久化存储 +- **多环境**: 管理多个 Kubernetes 集群 +- **RBAC**: 团队的基于角色的访问控制 + +## 自定义 + +编辑 `values.yaml` 以配置: + +- Ingress 设置 +- 资源限制 +- 持久化选项 +- TLS 配置 +- 功能标志 diff --git a/src/portainer/values.yaml b/src/portainer/values.yaml new file mode 100644 index 0000000..35f4db4 --- /dev/null +++ b/src/portainer/values.yaml @@ -0,0 +1,65 @@ +# Default values for Portainer. +# This is a YAML-formatted file. + +replicaCount: 1 + +image: + repository: portainer/portainer-ce + tag: lts + pullPolicy: IfNotPresent + +service: + type: NodePort + httpPort: 9000 + httpsPort: 9443 + httpNodePort: 30777 + httpsNodePort: 30779 + +# Enable persistence using Persistent Volume Claims +persistence: + enabled: true + size: 10Gi + # storageClass: "" + # existingClaim: "" + +# Resource limits and requests +resources: + limits: + cpu: 1000m + memory: 1Gi + requests: + cpu: 100m + memory: 128Mi + +# Ingress configuration +ingress: + enabled: false + # ingressClassName: nginx + # annotations: + # nginx.ingress.kubernetes.io/backend-protocol: HTTPS + # hosts: + # - host: portainer.example.com + # paths: + # - path: / + # pathType: Prefix + # tls: + # - secretName: portainer-tls + # hosts: + # - portainer.example.com + +# TLS configuration +tls: + force: true + +# Feature flags +feature: + flags: '' + +# Node selector +nodeSelector: {} + +# Tolerations +tolerations: [] + +# Affinity +affinity: {} diff --git a/src/postgres/Makefile b/src/postgres/Makefile index 2e230ed..66dd4ec 100644 --- a/src/postgres/Makefile +++ b/src/postgres/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/prometheus/Makefile b/src/prometheus/Makefile index a635624..8e11c58 100644 --- a/src/prometheus/Makefile +++ b/src/prometheus/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= prometheus-community HELM_REPO_URL ?= https://prometheus-community.github.io/helm-charts HELM_CHART_REPO ?= $(HELM_REPO_NAME)/kube-prometheus-stack -HELM_LANE ?= include ../_template/base.mk diff --git a/src/pulsar/Makefile b/src/pulsar/Makefile index 0ac81f3..862b41d 100644 --- a/src/pulsar/Makefile +++ b/src/pulsar/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= apache HELM_REPO_URL ?= https://pulsar.apache.org/charts HELM_CHART_REPO ?= $(HELM_REPO_NAME)/pulsar -HELM_LANE ?= include ../_template/base.mk diff --git a/src/rabbitmq-cluster-operator/Makefile b/src/rabbitmq-cluster-operator/Makefile index 2d4c1c6..c6f9df0 100644 --- a/src/rabbitmq-cluster-operator/Makefile +++ b/src/rabbitmq-cluster-operator/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/rabbitmq/Makefile b/src/rabbitmq/Makefile index b5b23e6..176622b 100644 --- a/src/rabbitmq/Makefile +++ b/src/rabbitmq/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/rainbond/Makefile b/src/rainbond/Makefile new file mode 100644 index 0000000..41c717a --- /dev/null +++ b/src/rainbond/Makefile @@ -0,0 +1,15 @@ +HELM_RELEASE_NAME ?= rainbond +HELM_APPLICATION_NAME ?= rainbond +HELM_NAMESPACE ?= rbd-system +HELM_DIR ?= ./helm +HELM_CHART_VERSION ?= +HELM_VALUES_FILE ?= ./values.yaml +HELM_OCI_REGISTRY ?= +HELM_OCI_NAMESPACE ?= +HELM_OCI_USERNAME ?= +HELM_OCI_PASSWORD ?= +HELM_REPO_NAME ?= goodrain +HELM_REPO_URL ?= https://openchart.goodrain.com/goodrain/rainbond +HELM_CHART_REPO ?= goodrain/rainbond + +include ../_template/base.mk diff --git a/src/rainbond/README.md b/src/rainbond/README.md new file mode 100644 index 0000000..b86d2d3 --- /dev/null +++ b/src/rainbond/README.md @@ -0,0 +1,67 @@ +# Rainbond + +## Introduction + +Rainbond is a cloud-native application management platform that enables easy deployment, management, and scaling of applications on Kubernetes. It provides a complete PaaS (Platform as a Service) solution with: + +- **Application Management**: Easy deployment and lifecycle management of applications +- **Service Mesh**: Built-in service discovery and traffic management +- **Multi-tenant**: Support for multiple teams and users +- **CI/CD Integration**: Automated build and deployment pipelines +- **Marketplace**: Pre-built application templates and components + +## Installation + +To install Rainbond, run: + +```bash +make install +``` + +This will deploy Rainbond in the `rbd-system` namespace. + +## Usage + +After installation, verify the deployment: + +```bash +kubectl get pods -n rbd-system +``` + +To access the Rainbond console, you need to get the gateway IP: + +```bash +kubectl get pod -n rbd-system -l name=rbd-gateway -o wide +``` + +Then visit: `http://:7070` + +Or if you have configured an ingress: + +```bash +kubectl get ingress -n rbd-system +``` + +## Configuration + +You can customize the installation by modifying the `values.yaml` file: + +- `Cluster.gatewayIngressIPs`: Set the gateway ingress IPs +- `Cluster.nodesForGateway`: Configure nodes for gateway +- `pvc.storageClassName`: Set the storage class for PVCs +- `resources`: Configure resource limits and requests + +## Uninstall + +To uninstall Rainbond: + +```bash +make uninstall +``` + +## Documentation + +For more information, please refer to the official documentation: + +- [Rainbond Documentation](https://www.rainbond.com/docs/) +- [Helm Chart Repository](https://github.com/goodrain/rainbond-chart) diff --git a/src/rainbond/README.zh.md b/src/rainbond/README.zh.md new file mode 100644 index 0000000..b13e7b1 --- /dev/null +++ b/src/rainbond/README.zh.md @@ -0,0 +1,67 @@ +# Rainbond + +## 简介 + +Rainbond 是一个云原生应用管理平台,可以轻松地在 Kubernetes 上部署、管理和扩展应用程序。它提供了一个完整的 PaaS(平台即服务)解决方案,包括: + +- **应用管理**:轻松部署和管理应用程序生命周期 +- **服务网格**:内置服务发现和流量管理 +- **多租户**:支持多个团队和用户 +- **CI/CD 集成**:自动化构建和部署流水线 +- **应用市场**:预构建的应用模板和组件 + +## 安装 + +要安装 Rainbond,请运行: + +```bash +make install +``` + +这将在 `rbd-system` 命名空间中部署 Rainbond。 + +## 使用 + +安装完成后,验证部署状态: + +```bash +kubectl get pods -n rbd-system +``` + +要访问 Rainbond 控制台,您需要获取网关 IP: + +```bash +kubectl get pod -n rbd-system -l name=rbd-gateway -o wide +``` + +然后访问:`http://:7070` + +如果您配置了 ingress: + +```bash +kubectl get ingress -n rbd-system +``` + +## 配置 + +您可以通过修改 `values.yaml` 文件来自定义安装: + +- `Cluster.gatewayIngressIPs`:设置网关入口 IP +- `Cluster.nodesForGateway`:配置网关节点 +- `pvc.storageClassName`:设置 PVC 的存储类 +- `resources`:配置资源限制和请求 + +## 卸载 + +要卸载 Rainbond: + +```bash +make uninstall +``` + +## 文档 + +更多信息请参阅官方文档: + +- [Rainbond 文档](https://www.rainbond.com/docs/) +- [Helm Chart 仓库](https://github.com/goodrain/rainbond-chart) diff --git a/src/rainbond/values.yaml b/src/rainbond/values.yaml new file mode 100644 index 0000000..f1d9bec --- /dev/null +++ b/src/rainbond/values.yaml @@ -0,0 +1,78 @@ +# Rainbond Helm Chart Values +# https://github.com/goodrain/rainbond-chart + +Cluster: + # Gateway ingress IPs + gatewayIngressIPs: [] + + # Nodes for gateway + nodesForGateway: [] + + # Containerd runtime path, will auto-detect if not set + containerdRuntimePath: '' + +# Enable UI +ui: + enabled: true + +# Enable hub +hub: + enabled: true + +# Enable region +region: + enabled: true + +# Enable console +console: + enabled: true + +# Enable chaos +chaos: + enabled: true + +# Enable monitor +monitor: + enabled: true + +# Enable worker +worker: + enabled: true + +# Enable mq +mq: + enabled: true + +# Enable eventlog +eventlog: + enabled: true + +# Enable webcli +webcli: + enabled: true + +# Enable api +api: + enabled: true + +# Enable grctl +grctl: + enabled: true + +# PVC configuration +pvc: + # Storage class name + storageClassName: '' + # Access mode + accessMode: ReadWriteOnce + # Storage size + storageSize: 10Gi + +# Resource configuration +resources: + limits: + cpu: '2' + memory: 4Gi + requests: + cpu: '0.5' + memory: 1Gi diff --git a/src/rancher/Makefile b/src/rancher/Makefile new file mode 100644 index 0000000..a069c45 --- /dev/null +++ b/src/rancher/Makefile @@ -0,0 +1,15 @@ +HELM_RELEASE_NAME ?= rancher +HELM_APPLICATION_NAME ?= rancher +HELM_NAMESPACE ?= cattle-system +HELM_DIR ?= ./helm +HELM_CHART_VERSION ?= +HELM_VALUES_FILE ?= ./values.yaml +HELM_OCI_REGISTRY ?= +HELM_OCI_NAMESPACE ?= +HELM_OCI_USERNAME ?= +HELM_OCI_PASSWORD ?= +HELM_REPO_NAME ?= rancher-stable +HELM_REPO_URL ?= https://releases.rancher.com/server-charts/stable +HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) + +include ../_template/base.mk diff --git a/src/rancher/README.md b/src/rancher/README.md new file mode 100644 index 0000000..be11e52 --- /dev/null +++ b/src/rancher/README.md @@ -0,0 +1,88 @@ +# Rancher + +## Introduction + +Rancher is a complete container management platform that makes it easy to run Kubernetes everywhere. It solves three major operational challenges: provisioning Kubernetes clusters on any infrastructure, unifying disparate Kubernetes clusters under centralized authentication and access control, and workload management across clusters. + +## Prerequisites + +- A Kubernetes cluster (RKE2, K3s, or any certified Kubernetes distribution) +- cert-manager installed (v1.8.0 or higher recommended) +- Default StorageClass configured + +## Installation + +To install Rancher, run: + +```bash +make install +``` + +## Usage + +After installation, access Rancher: + +### Get the Rancher URL + +```bash +# For LoadBalancer service type +kubectl get svc -n cattle-system + +# For NodePort service type +kubectl get svc -n cattle-system +``` + +### Get the Bootstrap Password + +```bash +kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{ "\n" }}' +``` + +### Access the UI + +1. Open the Rancher URL in your browser +2. Log in with username `admin` and the bootstrap password +3. Follow the setup wizard to configure Rancher + +## Configuration + +### SSL/TLS Configuration + +Rancher supports multiple SSL/TLS configurations: + +- **rancher**: Use Rancher-generated CA certificate (default) +- **letsEncrypt**: Use Let's Encrypt for automatic certificate management +- **secret**: Use your own TLS certificate + +### Service Type + +- **LoadBalancer**: Recommended for production (requires cloud provider or MetalLB) +- **NodePort**: For local/development environments +- **ClusterIP**: For ingress controller configuration + +## Features + +- **Multi-Cluster Management**: Manage multiple Kubernetes clusters from a single interface +- **User Management**: Centralized authentication and RBAC +- **App Catalog**: Deploy applications from Helm charts +- **Monitoring**: Built-in monitoring with Prometheus and Grafana +- **Logging**: Centralized logging with Fluentd +- **Istio Service Mesh**: Deploy and manage Istio +- **CI/CD Pipelines**: Integrated CI/CD with Fleet + +## Customization + +Edit `values.yaml` to configure: + +- `hostname`: The FQDN for Rancher +- `ingress.tls.source`: SSL certificate source +- `replicas`: Number of Rancher replicas +- `resources`: CPU/memory limits +- `auditLog`: Audit logging configuration + +## Important Notes + +1. Rancher should only be installed on a supported Kubernetes cluster +2. The bootstrap password is generated automatically on first install +3. For production, use a proper SSL certificate and hostname +4. Consider using Rancher Backup operator for disaster recovery diff --git a/src/rancher/README.zh.md b/src/rancher/README.zh.md new file mode 100644 index 0000000..3b3e0ca --- /dev/null +++ b/src/rancher/README.zh.md @@ -0,0 +1,88 @@ +# Rancher + +## 简介 + +Rancher 是一个完整的容器管理平台,可让您轻松地在任何地方运行 Kubernetes。它解决了三个主要的运营挑战:在任何基础设施上配置 Kubernetes 集群、将不同的 Kubernetes 集群统一到集中式认证和访问控制下,以及跨集群的工作负载管理。 + +## 前置条件 + +- Kubernetes 集群(RKE2、K3s 或任何经过认证的 Kubernetes 发行版) +- 已安装 cert-manager(建议 v1.8.0 或更高版本) +- 配置了默认 StorageClass + +## 安装 + +安装 Rancher: + +```bash +make install +``` + +## 使用 + +安装完成后,访问 Rancher: + +### 获取 Rancher URL + +```bash +# 对于 LoadBalancer 服务类型 +kubectl get svc -n cattle-system + +# 对于 NodePort 服务类型 +kubectl get svc -n cattle-system +``` + +### 获取引导密码 + +```bash +kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{ "\n" }}' +``` + +### 访问 UI + +1. 在浏览器中打开 Rancher URL +2. 使用用户名 `admin` 和引导密码登录 +3. 按照设置向导配置 Rancher + +## 配置 + +### SSL/TLS 配置 + +Rancher 支持多种 SSL/TLS 配置: + +- **rancher**: 使用 Rancher 生成的 CA 证书(默认) +- **letsEncrypt**: 使用 Let's Encrypt 进行自动证书管理 +- **secret**: 使用您自己的 TLS 证书 + +### 服务类型 + +- **LoadBalancer**: 推荐用于生产环境(需要云提供商或 MetalLB) +- **NodePort**: 用于本地/开发环境 +- **ClusterIP**: 用于 ingress 控制器配置 + +## 功能 + +- **多集群管理**: 从单一界面管理多个 Kubernetes 集群 +- **用户管理**: 集中式认证和 RBAC +- **应用目录**: 从 Helm charts 部署应用程序 +- **监控**: 内置 Prometheus 和 Grafana 监控 +- **日志**: 使用 Fluentd 的集中式日志 +- **Istio 服务网格**: 部署和管理 Istio +- **CI/CD 流水线**: 与 Fleet 集成的 CI/CD + +## 自定义 + +编辑 `values.yaml` 以配置: + +- `hostname`: Rancher 的 FQDN +- `ingress.tls.source`: SSL 证书源 +- `replicas`: Rancher 副本数 +- `resources`: CPU/内存限制 +- `auditLog`: 审计日志配置 + +## 重要提示 + +1. Rancher 只能安装在支持的 Kubernetes 集群上 +2. 引导密码在安装时自动生成 +3. 对于生产环境,使用适当的 SSL 证书和主机名 +4. 考虑使用 Rancher Backup operator 进行灾难恢复 diff --git a/src/rancher/values.yaml b/src/rancher/values.yaml new file mode 100644 index 0000000..ba43e5c --- /dev/null +++ b/src/rancher/values.yaml @@ -0,0 +1,75 @@ +# Default values for Rancher. +# This is a YAML-formatted file. + +# Rancher server hostname (required for production) +hostname: '' + +# Number of Rancher server replicas +replicas: 3 + +# Image configuration +image: + repository: rancher/rancher + tag: v2.9.2 + pullPolicy: IfNotPresent + +# Ingress configuration +ingress: + enabled: true + includeDefaultExtraAnnotations: true + extraAnnotations: {} + # ingressClassName: nginx + tls: + # Options: rancher, letsEncrypt, secret + source: rancher + # secretName: tls-rancher-ingress + +# Service configuration +service: + type: ClusterIP + # type: LoadBalancer + +# Resource limits and requests +resources: + limits: + cpu: 2000m + memory: 2Gi + requests: + cpu: 500m + memory: 1Gi + +# Audit Log configuration +auditLog: + enabled: false + # level: 1 + # maxAge: 10 + # maxBackup: 10 + # maxSize: 100 + # path: /var/log/auditlog/rancher-api-audit.log + +# Extra environment variables +extraEnv: [] +# - name: CATTLE_SERVER_URL +# value: "https://rancher.example.com" + +# Bootstrap password (auto-generated if not set) +# bootstrapPassword: "admin" + +# Private CA certificates +privateCA: false +# cacerts: "" + +# Additional trusted CAs +additionalTrustedCAs: false + +# Debug mode +debug: false + +# Node selector +nodeSelector: {} + +# Tolerations +tolerations: [] + +# Affinity +affinity: {} diff --git a/src/redis/Makefile b/src/redis/Makefile index b0850e5..1b0e7d0 100644 --- a/src/redis/Makefile +++ b/src/redis/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/sealos/Makefile b/src/sealos/Makefile new file mode 100644 index 0000000..6037990 --- /dev/null +++ b/src/sealos/Makefile @@ -0,0 +1,15 @@ +HELM_RELEASE_NAME ?= sealos +HELM_APPLICATION_NAME ?= sealos +HELM_NAMESPACE ?= sealos +HELM_DIR ?= ./helm +HELM_CHART_VERSION ?= +HELM_VALUES_FILE ?= ./values.yaml +HELM_OCI_REGISTRY ?= +HELM_OCI_NAMESPACE ?= +HELM_OCI_USERNAME ?= +HELM_OCI_PASSWORD ?= +HELM_REPO_NAME ?= seal-io +HELM_REPO_URL ?= https://seal-io.github.io/helm-charts +HELM_CHART_REPO ?= seal-io/sealos + +include ../_template/base.mk diff --git a/src/sealos/README.md b/src/sealos/README.md new file mode 100644 index 0000000..5eede9c --- /dev/null +++ b/src/sealos/README.md @@ -0,0 +1,80 @@ +# Sealos + +## Introduction + +Sealos is a cloud-native Kubernetes distribution and cluster management platform that provides: + +- **Kubernetes Lifecycle Management**: Easy installation and management of Kubernetes clusters +- **Application Management**: Deploy and manage applications with a simple command +- **Cloud Shell**: Built-in cloud shell for cluster operations +- **Multi-cluster Management**: Manage multiple Kubernetes clusters from a single interface +- **App Store**: Built-in marketplace for popular applications + +## Installation + +To install Sealos, run: + +```bash +make install +``` + +This will deploy Sealos in the `sealos` namespace. + +## Prerequisites + +- Kubernetes v1.27+ +- Helm v3.14+ +- Cluster-admin privileges + +## Usage + +After installation, verify the deployment: + +```bash +kubectl get pods -n sealos +``` + +To access the Sealos console: + +```bash +kubectl get svc -n sealos +``` + +If you are using LoadBalancer service type, get the external IP: + +```bash +kubectl get svc sealos -n sealos +``` + +Or use port-forward for local access: + +```bash +kubectl port-forward -n sealos svc/sealos 8080:6443 +``` + +Then visit: `http://localhost:8080` + +## Configuration + +You can customize the installation by modifying the `values.yaml` file: + +- `image.repository` and `image.tag`: Change the Sealos image +- `persistence`: Configure persistent storage +- `service.type`: Change service type (ClusterIP, NodePort, LoadBalancer) +- `auth.enableTLS`: Enable TLS for the API endpoint +- `ingress`: Configure ingress for external access + +## Uninstall + +To uninstall Sealos: + +```bash +make uninstall +``` + +## Documentation + +For more information, please refer to the official documentation: + +- [Sealos Documentation](https://sealos.io/docs/) +- [Helm Chart Repository](https://github.com/seal-io/helm-charts) diff --git a/src/sealos/README.zh.md b/src/sealos/README.zh.md new file mode 100644 index 0000000..92493cb --- /dev/null +++ b/src/sealos/README.zh.md @@ -0,0 +1,80 @@ +# Sealos + +## 简介 + +Sealos 是一个云原生 Kubernetes 发行版和集群管理平台,提供以下功能: + +- **Kubernetes 生命周期管理**:轻松安装和管理 Kubernetes 集群 +- **应用管理**:使用简单命令部署和管理应用程序 +- **云终端**:内置云终端用于集群操作 +- **多集群管理**:从单一界面管理多个 Kubernetes 集群 +- **应用商店**:内置流行应用市场 + +## 安装 + +要安装 Sealos,请运行: + +```bash +make install +``` + +这将在 `sealos` 命名空间中部署 Sealos。 + +## 前置条件 + +- Kubernetes v1.27+ +- Helm v3.14+ +- 集群管理员权限 + +## 使用 + +安装完成后,验证部署状态: + +```bash +kubectl get pods -n sealos +``` + +要访问 Sealos 控制台: + +```bash +kubectl get svc -n sealos +``` + +如果您使用的是 LoadBalancer 服务类型,获取外部 IP: + +```bash +kubectl get svc sealos -n sealos +``` + +或者使用 port-forward 进行本地访问: + +```bash +kubectl port-forward -n sealos svc/sealos 8080:6443 +``` + +然后访问:`http://localhost:8080` + +## 配置 + +您可以通过修改 `values.yaml` 文件来自定义安装: + +- `image.repository` 和 `image.tag`:更改 Sealos 镜像 +- `persistence`:配置持久化存储 +- `service.type`:更改服务类型(ClusterIP、NodePort、LoadBalancer) +- `auth.enableTLS`:为 API 端点启用 TLS +- `ingress`:配置外部访问的 ingress + +## 卸载 + +要卸载 Sealos: + +```bash +make uninstall +``` + +## 文档 + +更多信息请参阅官方文档: + +- [Sealos 文档](https://sealos.io/docs/) +- [Helm Chart 仓库](https://github.com/seal-io/helm-charts) diff --git a/src/sealos/values.yaml b/src/sealos/values.yaml new file mode 100644 index 0000000..2bdbcd4 --- /dev/null +++ b/src/sealos/values.yaml @@ -0,0 +1,55 @@ +# Sealos Helm Chart Values +# https://github.com/seal-io/helm-charts + +# Image configuration +image: + repository: sealos + tag: '' + pullPolicy: IfNotPresent + +# Service configuration +service: + type: ClusterIP + port: 6443 + +# Persistence configuration +persistence: + enabled: true + storageClass: '' + accessMode: ReadWriteOnce + size: 10Gi + +# Authentication configuration +auth: + enableTLS: false + tlsSecret: '' + +# Resource configuration +resources: + limits: + cpu: '2' + memory: 4Gi + requests: + cpu: '0.5' + memory: 1Gi + +# Node selector +nodeSelector: {} + +# Tolerations +tolerations: [] + +# Affinity +affinity: {} + +# Ingress configuration +ingress: + enabled: false + className: '' + annotations: {} + hosts: + - host: sealos.local + paths: + - path: / + pathType: Prefix + tls: [] diff --git a/src/valkey/Makefile b/src/valkey/Makefile index 1e16969..0a493be 100644 --- a/src/valkey/Makefile +++ b/src/valkey/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/vault/Makefile b/src/vault/Makefile index d4131e6..7ca281b 100644 --- a/src/vault/Makefile +++ b/src/vault/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= hashicorp HELM_REPO_URL ?= https://helm.releases.hashicorp.com HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk diff --git a/src/vcluster/Makefile b/src/vcluster/Makefile new file mode 100644 index 0000000..9ef47af --- /dev/null +++ b/src/vcluster/Makefile @@ -0,0 +1,15 @@ +HELM_RELEASE_NAME ?= vcluster +HELM_APPLICATION_NAME ?= vcluster +HELM_NAMESPACE ?= vcluster +HELM_DIR ?= ./helm +HELM_CHART_VERSION ?= +HELM_VALUES_FILE ?= ./values.yaml +HELM_OCI_REGISTRY ?= +HELM_OCI_NAMESPACE ?= +HELM_OCI_USERNAME ?= +HELM_OCI_PASSWORD ?= +HELM_REPO_NAME ?= loft-sh +HELM_REPO_URL ?= https://charts.loft.sh +HELM_CHART_REPO ?= $(HELM_REPO_NAME)/$(HELM_APPLICATION_NAME) + +include ../_template/base.mk diff --git a/src/vcluster/README.md b/src/vcluster/README.md new file mode 100644 index 0000000..c39631b --- /dev/null +++ b/src/vcluster/README.md @@ -0,0 +1,125 @@ +# vCluster + +## Introduction + +vCluster (Virtual Cluster) is an open-source tool that allows you to create and manage fully functional Kubernetes clusters within a namespace of another Kubernetes cluster. It provides strong isolation, reduced operational overhead, and better resource utilization compared to separate physical clusters. + +## Features + +- **Lightweight**: Run isolated Kubernetes clusters without the overhead of separate control planes +- **Strong Isolation**: Each vCluster has its own API server and control plane +- **Cost Effective**: Share infrastructure while maintaining isolation +- **RBAC & Network Policies**: Full support for native Kubernetes security features +- **Persistent Storage**: Support for persistent volumes and storage classes +- **Multi-Tenancy**: Ideal for development, testing, and CI/CD pipelines + +## Prerequisites + +- A working Kubernetes cluster (host cluster) +- kubectl configured to access the host cluster +- Default StorageClass configured (for persistent workloads) + +## Installation + +To install vCluster, run: + +```bash +make install +``` + +## Usage + +### Create a Virtual Cluster + +After installing vCluster, create a virtual cluster: + +```bash +# Create a virtual cluster named 'my-vcluster' +vcluster create my-vcluster + +# Or specify a namespace +vcluster create my-vcluster -n vcluster +``` + +### Connect to a Virtual Cluster + +```bash +# Connect to the virtual cluster (updates kubeconfig) +vcluster connect my-vcluster + +# Or get the kubeconfig without switching +vcluster connect my-vcluster --update-current=false +``` + +### List Virtual Clusters + +```bash +vcluster list +``` + +### Delete a Virtual Cluster + +```bash +vcluster delete my-vcluster +``` + +## vCluster CLI Installation + +Install the vCluster CLI tool: + +```bash +# macOS +curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-darwin-amd64" && chmod +x vcluster && sudo mv vcluster /usr/local/bin + +# Linux +curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-amd64" && chmod +x vcluster && sudo mv vcluster /usr/local/bin + +# Windows (PowerShell) +md -Force "$Env:APPDATA\vcluster"; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls,Tls11,Tls12'; Invoke-WebRequest -URI "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-windows-amd64.exe" -outfile "$Env:APPDATA\vcluster\vcluster.exe"; $env:Path += ";" + $Env:APPDATA + "\vcluster"; [Environment]::SetEnvironmentVariable("Path", $env:Path, [EnvironmentVariableTarget]::User); +``` + +## Storage + +vCluster supports: + +- **Ephemeral Storage**: Data is lost when the vCluster is deleted +- **Persistent Storage**: Use PVCs for persistent workloads +- **HostPath**: Direct access to host node storage (not recommended for production) + +## Networking + +vCluster creates an isolated network within the host cluster: + +- Each vCluster has its own ClusterIP services +- Ingress can be configured to route traffic to vCluster services +- Network policies can be used for additional isolation + +## Configuration + +Edit `values.yaml` to configure: + +- vCluster version (Kubernetes version) +- Resource limits +- Storage backend +- Synced resources +- Isolation settings + +## vCluster Platform (Optional) + +For additional features like UI, multi-cluster management, and advanced networking: + +```bash +helm upgrade vcluster-platform vcluster-platform \ + --install \ + --repo https://charts.loft.sh \ + --namespace vcluster-platform \ + --create-namespace +``` + +## Important Notes + +1. vCluster creates lightweight, isolated Kubernetes clusters +2. The host cluster must have sufficient resources +3. Consider using vCluster Platform for enterprise features +4. Persistent storage requires proper StorageClass configuration +5. Network policies can enhance isolation between vClusters diff --git a/src/vcluster/README.zh.md b/src/vcluster/README.zh.md new file mode 100644 index 0000000..49b766e --- /dev/null +++ b/src/vcluster/README.zh.md @@ -0,0 +1,125 @@ +# vCluster + +## 简介 + +vCluster(虚拟集群)是一个开源工具,允许您在另一个 Kubernetes 集群的命名空间中创建和管理功能完整的 Kubernetes 集群。与单独的物理集群相比,它提供了强大的隔离性、减少的运营开销和更好的资源利用率。 + +## 功能 + +- **轻量级**: 无需单独控制平面的开销即可运行隔离的 Kubernetes 集群 +- **强隔离**: 每个 vCluster 都有自己的 API server 和控制平面 +- **成本效益**: 共享基础设施同时保持隔离 +- **RBAC 和网络策略**: 完全支持原生 Kubernetes 安全功能 +- **持久化存储**: 支持持久卷和存储类 +- **多租户**: 适用于开发、测试和 CI/CD 流水线 + +## 前置条件 + +- 一个正常工作的 Kubernetes 集群(主机集群) +- 配置了 kubectl 以访问主机集群 +- 配置了默认 StorageClass(用于持久化工作负载) + +## 安装 + +安装 vCluster: + +```bash +make install +``` + +## 使用 + +### 创建虚拟集群 + +安装 vCluster 后,创建虚拟集群: + +```bash +# 创建一个名为 'my-vcluster' 的虚拟集群 +vcluster create my-vcluster + +# 或指定命名空间 +vcluster create my-vcluster -n vcluster +``` + +### 连接到虚拟集群 + +```bash +# 连接到虚拟集群(更新 kubeconfig) +vcluster connect my-vcluster + +# 或不切换的情况下获取 kubeconfig +vcluster connect my-vcluster --update-current=false +``` + +### 列出虚拟集群 + +```bash +vcluster list +``` + +### 删除虚拟集群 + +```bash +vcluster delete my-vcluster +``` + +## vCluster CLI 安装 + +安装 vCluster CLI 工具: + +```bash +# macOS +curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-darwin-amd64" && chmod +x vcluster && sudo mv vcluster /usr/local/bin + +# Linux +curl -L -o vcluster "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-linux-amd64" && chmod +x vcluster && sudo mv vcluster /usr/local/bin + +# Windows (PowerShell) +md -Force "$Env:APPDATA\vcluster"; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls,Tls11,Tls12'; Invoke-WebRequest -URI "https://github.com/loft-sh/vcluster/releases/latest/download/vcluster-windows-amd64.exe" -outfile "$Env:APPDATA\vcluster\vcluster.exe"; $env:Path += ";" + $Env:APPDATA + "\vcluster"; [Environment]::SetEnvironmentVariable("Path", $env:Path, [EnvironmentVariableTarget]::User); +``` + +## 存储 + +vCluster 支持: + +- **临时存储**: vCluster 删除时数据丢失 +- **持久化存储**: 对持久化工作负载使用 PVC +- **HostPath**: 直接访问主机节点存储(不推荐用于生产环境) + +## 网络 + +vCluster 在主机集群中创建隔离的网络: + +- 每个 vCluster 都有自己的 ClusterIP 服务 +- 可以配置 Ingress 将流量路由到 vCluster 服务 +- 可以使用网络策略进行额外的隔离 + +## 配置 + +编辑 `values.yaml` 以配置: + +- vCluster 版本(Kubernetes 版本) +- 资源限制 +- 存储后端 +- 同步资源 +- 隔离设置 + +## vCluster Platform(可选) + +对于额外的功能,如 UI、多集群管理和高级网络: + +```bash +helm upgrade vcluster-platform vcluster-platform \ + --install \ + --repo https://charts.loft.sh \ + --namespace vcluster-platform \ + --create-namespace +``` + +## 重要提示 + +1. vCluster 创建轻量级、隔离的 Kubernetes 集群 +2. 主机集群必须有足够的资源 +3. 考虑使用 vCluster Platform 获取企业级功能 +4. 持久化存储需要正确的 StorageClass 配置 +5. 网络策略可以增强 vCluster 之间的隔离 diff --git a/src/vcluster/values.yaml b/src/vcluster/values.yaml new file mode 100644 index 0000000..ac98af0 --- /dev/null +++ b/src/vcluster/values.yaml @@ -0,0 +1,128 @@ +# Default values for vCluster. +# This is a YAML-formatted file. + +# vCluster version (Kubernetes version to use) +vcluster: + image: rancher/k3s:v1.30.2-k3s2 + +# Control plane configuration +controlPlane: + distro: + k3s: + enabled: true + # k3s version + image: rancher/k3s:v1.30.2-k3s2 + + # Backing store configuration + backingStore: + etcd: + enabled: true + # embeddedEtcd: + # enabled: false + + # API server configuration + coredns: + enabled: true + # replicas: 1 + +# Sync configuration +sync: + # From host to virtual cluster + toHost: + pods: + enabled: true + secrets: + enabled: true + all: false + configmaps: + enabled: true + all: false + endpoints: + enabled: true + persistentVolumeClaims: + enabled: true + ingresses: + enabled: true + services: + enabled: true + + # From virtual cluster to host + fromHost: + nodes: + enabled: false + # selector: "" + events: + enabled: true + storageClasses: + enabled: true + +# Networking configuration +networking: + # Replicate services from host to virtual cluster + replicateServices: + fromHost: [] + toHost: [] + + # Advanced cluster settings + advanced: + proxyKubelets: + byHostname: false + byIP: false + +# Resource limits +resources: + limits: + cpu: 1000m + memory: 1Gi + requests: + cpu: 200m + memory: 256Mi + +# RBAC configuration +rbac: + clusterRole: + create: true + +# Service account +serviceAccount: + create: true + name: '' + +# Security context +security: + podSecurityStandard: baseline + # Run as user and group + podSecurityContext: {} + containerSecurityContext: {} + +# Persistence configuration +persistence: + enabled: true + size: 5Gi + # storageClass: "" + +# Service configuration +service: + type: ClusterIP + +# Ingress configuration +ingress: + enabled: false + # host: vcluster.example.com + # annotations: {} + # tls: [] + +# Multi-namespace mode +multiNamespaceMode: + enabled: false + +# Isolation settings +isolation: + enabled: false + podSecurityStandard: baseline + # nodeProxyPermission: + # enabled: true + +# Telemetry +telemetry: + disabled: false diff --git a/src/zookeeper/Makefile b/src/zookeeper/Makefile index 25302c1..79d5d3b 100644 --- a/src/zookeeper/Makefile +++ b/src/zookeeper/Makefile @@ -11,6 +11,5 @@ HELM_OCI_PASSWORD ?= HELM_REPO_NAME ?= HELM_REPO_URL ?= HELM_CHART_REPO ?= oci://$(HELM_OCI_REGISTRY)/$(HELM_OCI_NAMESPACE)/$(HELM_APPLICATION_NAME) -HELM_LANE ?= include ../_template/base.mk