トークンが定期的に失効・ローテーションしても再デプロイ不要にする。 - anthropic.authMode: credentials(新既定) ~/.claude/.credentials.json 全体(refreshToken 込み)を Secret に格納。 セッション Pod にはファイルとしてマウントし $HOME/.claude へコピー(書き込み可)、 セッション内 claude が refreshToken で自己更新 - anthropic.refresher CronJob(credentials 時・既定有効, files/token-refresher.py) Secret 内 refreshToken で OAuth トークンを更新し Secret を書き戻す。 専用 SA + resourceNames 限定 Role で該当 Secret の get/patch のみ。 tokenUrl/clientId は Claude Code CLI の非公式値(values 上書き可) - manager.py build_pod: credentials は envFrom を使わずファイルマウント + SEED_CREDENTIALS_FILE。apiKey/oauth は従来どおり envFrom - Secret に helm.sh/resource-policy: keep(credentials 時)で refresher の書込を保持 - fix: values.schema.json の $schema 行を削除(一部の Helm で "no schema with key or ref https://json-schema.org/draft-07/schema#" エラー) - helm lint / template(credentials/apiKey/oauth)検証済み
290 lines
9.5 KiB
JSON
290 lines
9.5 KiB
JSON
{
|
|
"title": "claude-code Helm chart values",
|
|
"type": "object",
|
|
"additionalProperties": true,
|
|
"properties": {
|
|
"nameOverride": { "type": "string" },
|
|
"fullnameOverride": { "type": "string" },
|
|
|
|
"image": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["gateway", "manager", "session"],
|
|
"properties": {
|
|
"gateway": { "$ref": "#/definitions/image" },
|
|
"manager": { "$ref": "#/definitions/image" },
|
|
"session": { "$ref": "#/definitions/image" }
|
|
}
|
|
},
|
|
"imagePullSecrets": {
|
|
"type": "array",
|
|
"items": { "type": "object", "required": ["name"], "properties": { "name": { "type": "string" } } }
|
|
},
|
|
|
|
"gateway": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"replicaCount": { "type": "integer", "minimum": 1 },
|
|
"port": { "type": "integer", "minimum": 1, "maximum": 65535 },
|
|
"resources": { "type": "object" }
|
|
}
|
|
},
|
|
|
|
"manager": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"logLevel": { "type": "string", "enum": ["debug", "info", "warning", "error"] },
|
|
"resources": { "type": "object" }
|
|
}
|
|
},
|
|
|
|
"sessionsNamespace": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"name": { "type": "string" },
|
|
"create": { "type": "boolean" },
|
|
"podSecurityLevel": { "type": "string", "enum": ["privileged", "baseline", "restricted"] },
|
|
"resourceQuota": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"hard": { "type": "object" }
|
|
}
|
|
},
|
|
"limitRange": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"max": { "type": "object" },
|
|
"default": { "type": "object" },
|
|
"defaultRequest": { "type": "object" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"auth": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["mode"],
|
|
"properties": {
|
|
"mode": { "type": "string", "enum": ["token", "basic", "forward", "none"] },
|
|
"token": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"value": { "type": "string" },
|
|
"existingSecret": { "type": "string" },
|
|
"existingSecretKey": { "type": "string" }
|
|
}
|
|
},
|
|
"basic": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"users": { "type": "array", "items": { "type": "string" } },
|
|
"existingSecret": { "type": "string" },
|
|
"existingSecretKey": { "type": "string" }
|
|
}
|
|
},
|
|
"forward": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"url": { "type": "string" },
|
|
"signInUrl": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"anthropic": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["authMode"],
|
|
"properties": {
|
|
"authMode": { "type": "string", "enum": ["apiKey", "oauth", "credentials"] },
|
|
"apiKey": { "type": "string" },
|
|
"oauthToken": { "type": "string" },
|
|
"credentialsJson": { "type": "string" },
|
|
"existingSecret": { "type": "string" },
|
|
"existingSecretKeyApiKey": { "type": "string" },
|
|
"existingSecretKeyOauthToken": { "type": "string" },
|
|
"existingSecretKeyCredentials": { "type": "string" },
|
|
"extraEnv": { "type": "object" },
|
|
"refresher": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"schedule": { "type": "string" },
|
|
"refreshIfExpiresInSeconds": { "type": "integer", "minimum": 60 },
|
|
"tokenUrl": { "type": "string" },
|
|
"clientId": { "type": "string" },
|
|
"resources": { "type": "object" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"git": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["allowedHosts"],
|
|
"properties": {
|
|
"allowedHosts": { "type": "array", "items": { "type": "string" } },
|
|
"allowArbitraryRepos": { "type": "boolean" },
|
|
"defaultAuthorName": { "type": "string" },
|
|
"defaultAuthorEmail": { "type": "string" },
|
|
"identities": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["type"],
|
|
"properties": {
|
|
"type": { "type": "string", "enum": ["ssh", "https-token"] },
|
|
"sshPrivateKey": { "type": "string" },
|
|
"knownHosts": { "type": "string" },
|
|
"username": { "type": "string" },
|
|
"token": { "type": "string" },
|
|
"existingSecret": { "type": "string" },
|
|
"existingSecretKeyPrivateKey": { "type": "string" },
|
|
"existingSecretKeyKnownHosts": { "type": "string" },
|
|
"existingSecretKeyToken": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"session": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"autoStartClaude": { "type": "boolean" },
|
|
"workspaceDir": { "type": "string" },
|
|
"ttydPort": { "type": "integer", "minimum": 1, "maximum": 65535 },
|
|
"extraApkPackages": { "type": "array", "items": { "type": "string" } },
|
|
"claudeCodeVersion": { "type": "string" },
|
|
"resources": { "type": "object" },
|
|
"idleTimeoutSeconds": { "type": "integer", "minimum": 60 },
|
|
"maxLifetimeSeconds": { "type": "integer", "minimum": 300 },
|
|
"reaper": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"intervalSeconds": { "type": "integer", "minimum": 10 },
|
|
"cronjob": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"schedule": { "type": "string" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"maxSessions": { "type": "integer", "minimum": 1 },
|
|
"verifyCommand": { "type": "string" },
|
|
"autoPush": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"branchPrefix": { "type": "string" },
|
|
"protectedBranches": { "type": "array", "items": { "type": "string" } }
|
|
}
|
|
},
|
|
"podLabels": { "type": "object" },
|
|
"podAnnotations": { "type": "object" },
|
|
"nodeSelector": { "type": "object" },
|
|
"tolerations": { "type": "array" },
|
|
"priorityClassName": { "type": "string" }
|
|
}
|
|
},
|
|
|
|
"networkPolicy": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"dnsNamespaceSelector": { "type": "object" },
|
|
"allowInternetHttps": { "type": "boolean" },
|
|
"allowSshGit": { "type": "boolean" },
|
|
"blockedEgressCIDRs": { "type": "array", "items": { "type": "string" } },
|
|
"sessionEgressExtra": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "object",
|
|
"required": ["cidr", "ports"],
|
|
"properties": {
|
|
"cidr": { "type": "string" },
|
|
"ports": { "type": "array" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
"ingress": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"className": { "type": "string" },
|
|
"annotations": { "type": "object" },
|
|
"hosts": { "type": "array" },
|
|
"tls": { "type": "array" }
|
|
}
|
|
},
|
|
|
|
"service": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"type": { "type": "string", "enum": ["ClusterIP", "NodePort", "LoadBalancer"] },
|
|
"port": { "type": "integer", "minimum": 1, "maximum": 65535 },
|
|
"nodePort": { "type": ["integer", "null"], "minimum": 1, "maximum": 65535 },
|
|
"annotations": { "type": "object" },
|
|
"loadBalancerIP": { "type": "string" },
|
|
"loadBalancerClass": { "type": "string" },
|
|
"loadBalancerSourceRanges": { "type": "array", "items": { "type": "string" } },
|
|
"externalTrafficPolicy": { "type": "string", "enum": ["", "Cluster", "Local"] },
|
|
"labels": { "type": "object" }
|
|
}
|
|
},
|
|
|
|
"podSecurityContext": { "type": "object" },
|
|
"containerSecurityContext": { "type": "object" },
|
|
"commonLabels": { "type": "object" },
|
|
"commonAnnotations": { "type": "object" },
|
|
"podDisruptionBudget": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"enabled": { "type": "boolean" },
|
|
"minAvailable": { "type": ["integer", "string"] }
|
|
}
|
|
}
|
|
},
|
|
"definitions": {
|
|
"image": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["registry", "repository", "tag"],
|
|
"properties": {
|
|
"registry": { "type": "string" },
|
|
"repository": { "type": "string" },
|
|
"tag": { "type": "string" },
|
|
"pullPolicy": { "type": "string", "enum": ["Always", "IfNotPresent", "Never"] }
|
|
}
|
|
}
|
|
}
|
|
}
|