[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EFA9XG2HTQJ66TYKJWB8QG":3,"skill-same:01M6EFA9XG2HTQJ66TYKJWB8QG":53},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":26,"linkOnly":27,"markdownContent":28,"markdownBody":28,"frontMatter":29,"refName":30,"commitSha":31,"skillDirectory":32,"forksCount":33,"repositoryHtmlUrl":34,"repositoryHomepageUrl":35,"ownerHtmlUrl":36,"ownerBlogUrl":6,"ownerDescription":37,"updatedAt":38,"install":39,"resources":52},"01M6EFA9XG2HTQJ66TYKJWB8QG","kubernetes-helm",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fkubernetes-helm\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[23,24,25],"kubernetes","helm","kubernetes helm","2026-11-10 10:12:30",false,"# Kubernetes & Helm\n\n## Overview\n\nWrites Kubernetes manifests and Helm charts, deploys and manages applications on Kubernetes clusters, debugs workloads, configures networking and storage, sets up autoscaling and observability, and implements GitOps workflows.\n\n## Instructions\n\n### 1. Core Workloads\n\n**Deployment:**\n```yaml\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: api-server\n  namespace: app\nspec:\n  replicas: 3\n  selector:\n    matchLabels: { app: api-server }\n  strategy:\n    type: RollingUpdate\n    rollingUpdate: { maxUnavailable: 1, maxSurge: 1 }\n  template:\n    metadata:\n      labels: { app: api-server, version: v1 }\n    spec:\n      containers:\n        - name: api\n          image: registry.example.com\u002Fapi:1.2.3\n          ports: [{ containerPort: 8080, name: http }]\n          env:\n            - name: DATABASE_URL\n              valueFrom: { secretKeyRef: { name: db-credentials, key: url } }\n          resources:\n            requests: { cpu: 250m, memory: 256Mi }\n            limits: { cpu: 500m, memory: 512Mi }\n          readinessProbe:\n            httpGet: { path: \u002Fhealth\u002Fready, port: http }\n            initialDelaySeconds: 5\n            periodSeconds: 10\n          livenessProbe:\n            httpGet: { path: \u002Fhealth\u002Flive, port: http }\n            initialDelaySeconds: 15\n          lifecycle:\n            preStop:\n              exec: { command: [\"\u002Fbin\u002Fsh\", \"-c\", \"sleep 10\"] }\n      terminationGracePeriodSeconds: 30\n```\n\n**StatefulSet (databases):**\n```yaml\napiVersion: apps\u002Fv1\nkind: StatefulSet\nmetadata:\n  name: redis\nspec:\n  serviceName: redis\n  replicas: 3\n  selector:\n    matchLabels: { app: redis }\n  template:\n    spec:\n      containers:\n        - name: redis\n          image: redis:7-alpine\n          ports: [{ containerPort: 6379 }]\n          volumeMounts: [{ name: data, mountPath: \u002Fdata }]\n  volumeClaimTemplates:\n    - metadata: { name: data }\n      spec:\n        accessModes: [\"ReadWriteOnce\"]\n        storageClassName: gp3\n        resources: { requests: { storage: 10Gi } }\n```\n\n**CronJob:**\n```yaml\napiVersion: batch\u002Fv1\nkind: CronJob\nmetadata:\n  name: db-backup\nspec:\n  schedule: \"0 2 * * *\"\n  concurrencyPolicy: Forbid\n  jobTemplate:\n    spec:\n      backoffLimit: 2\n      template:\n        spec:\n          restartPolicy: OnFailure\n          containers:\n            - name: backup\n              image: registry.example.com\u002Fdb-backup:latest\n              envFrom: [{ secretRef: { name: backup-credentials } }]\n```\n\n### 2. Networking\n\n**Service + Ingress:**\n```yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: api-server\nspec:\n  type: ClusterIP\n  selector: { app: api-server }\n  ports: [{ port: 80, targetPort: http }]\n---\napiVersion: networking.k8s.io\u002Fv1\nkind: Ingress\nmetadata:\n  name: api-ingress\n  annotations:\n    cert-manager.io\u002Fcluster-issuer: letsencrypt-prod\nspec:\n  ingressClassName: nginx\n  tls: [{ hosts: [api.example.com], secretName: api-tls }]\n  rules:\n    - host: api.example.com\n      http:\n        paths:\n          - path: \u002F\n            pathType: Prefix\n            backend: { service: { name: api-server, port: { number: 80 } } }\n```\n\n### 3. Autoscaling\n\n```yaml\napiVersion: autoscaling\u002Fv2\nkind: HorizontalPodAutoscaler\nmetadata:\n  name: api-server\nspec:\n  scaleTargetRef: { apiVersion: apps\u002Fv1, kind: Deployment, name: api-server }\n  minReplicas: 3\n  maxReplicas: 20\n  metrics:\n    - type: Resource\n      resource: { name: cpu, target: { type: Utilization, averageUtilization: 70 } }\n  behavior:\n    scaleUp: { stabilizationWindowSeconds: 60, policies: [{ type: Pods, value: 4, periodSeconds: 60 }] }\n    scaleDown: { stabilizationWindowSeconds: 300 }\n```\n\n### 4. Helm Charts\n\n**Chart structure:**\n```\ncharts\u002Fapi-server\u002F\n├── Chart.yaml\n├── values.yaml\n├── templates\u002F\n│   ├── _helpers.tpl\n│   ├── deployment.yaml\n│   ├── service.yaml\n│   ├── ingress.yaml\n│   └── hpa.yaml\n```\n\n**values.yaml:**\n```yaml\nreplicaCount: 2\nimage:\n  repository: registry.example.com\u002Fapi\n  tag: latest\nservice: { type: ClusterIP, port: 80 }\ningress:\n  enabled: false\n  className: nginx\nresources:\n  requests: { cpu: 250m, memory: 256Mi }\n  limits: { cpu: 500m, memory: 512Mi }\nautoscaling:\n  enabled: false\n  minReplicas: 2\n  maxReplicas: 10\n```\n\n**Commands:**\n```bash\nhelm upgrade --install api-server .\u002Fcharts\u002Fapi-server -n app --create-namespace -f values-prod.yaml --set image.tag=1.2.3\nhelm diff upgrade api-server .\u002Fcharts\u002Fapi-server -f values-prod.yaml\nhelm rollback api-server 1 -n app\nhelm template api-server .\u002Fcharts\u002Fapi-server -f values-prod.yaml  # debug\n```\n\n### 5. Debugging\n\n```bash\nkubectl describe pod \u003Cname> -n \u003Cns>        # Check events\nkubectl logs \u003Cpod> -n \u003Cns> --previous       # Crashed container logs\nkubectl exec -it \u003Cpod> -n \u003Cns> -- \u002Fbin\u002Fsh   # Shell into pod\nkubectl port-forward svc\u002Fapi-server 8080:80 -n app\nkubectl top pods -n app\n```\n\nCommon issues:\n- `ImagePullBackOff` → Check image name, tag, registry auth (imagePullSecrets)\n- `CrashLoopBackOff` → Check logs (`--previous`), probes, resource limits\n- `Pending` → Check node resources, PVC binding, taints\n- `OOMKilled` → Increase memory limits\n\n### 6. GitOps with ArgoCD\n\n```yaml\napiVersion: argoproj.io\u002Fv1alpha1\nkind: Application\nmetadata:\n  name: api-server\n  namespace: argocd\nspec:\n  source:\n    repoURL: https:\u002F\u002Fgithub.com\u002Fcompany\u002Fk8s-manifests\n    targetRevision: main\n    path: overlays\u002Fproduction\n  destination:\n    server: https:\u002F\u002Fkubernetes.default.svc\n    namespace: app\n  syncPolicy:\n    automated: { prune: true, selfHeal: true }\n    syncOptions: [CreateNamespace=true]\n```\n\n## Examples\n\n### Example 1: Full Application Stack\n\n**Input:** \"Deploy: Node.js API (3 replicas), React frontend, PostgreSQL, Redis, background worker. Include ingress, TLS, autoscaling, persistent storage.\"\n\n**Output:** Namespace with quotas, API Deployment with HPA (3-20 on CPU\u002Fmemory) and probes, frontend Deployment with nginx ConfigMap, PostgreSQL StatefulSet (50Gi PVC), Redis Deployment, Worker Deployment with KEDA scaling, Ingress with cert-manager TLS and path routing, Secrets via external-secrets-operator.\n\n### Example 2: Helm Chart for Multi-Tenant SaaS\n\n**Input:** \"Helm chart deploying per-tenant isolation: own namespace, database schema, subdomain. Single `helm install` per tenant.\"\n\n**Output:** Chart with parameterized namespace, tenant-specific env vars, PostgreSQL schema init job, Ingress with `{{ .Values.tenant.slug }}.app.example.com`, NetworkPolicy isolation, resource quotas by plan (starter\u002Fpro\u002Fenterprise).\n\n## Guidelines\n\n- Always set resource requests and limits on every container\n- Use `RollingUpdate` with `maxUnavailable: 1` and `preStop` sleep for zero-downtime deploys\n- Configure both readiness and liveness probes\n- Pin image tags — never use `latest` in production\n- Use Helm for parameterized deployments, Kustomize for environment overlays\n- Use `helm diff` before every upgrade\n- Prefer `ClusterIP` + Ingress over `LoadBalancer` services\n- Use PodDisruptionBudgets for production workloads\n- Never run containers as root; drop all capabilities; use read-only root filesystem\n- Use NetworkPolicies to restrict pod-to-pod traffic\n- Scan images with Trivy in CI before deploying\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fkubernetes-helm",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":40,"prompt":50,"zipAvailable":51},[41,44,47],{"tool":42,"command":43},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill kubernetes-helm",{"tool":45,"command":46},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill kubernetes-helm",{"tool":48,"command":49},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill kubernetes-helm","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fkubernetes-helm\u002FSKILL.md",true,[],[54,66,76,85,91,98],{"skillNo":55,"name":56,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":62,"publishedAt":26},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[59],{"categoryNo":60,"categoryName":61,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[63,64,65],"model","model hierarchy","model hierarchy skill",{"skillNo":67,"name":68,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":72,"publishedAt":26},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[71],{"categoryNo":60,"categoryName":61,"taxonomyType":20,"taxonomyTypeDesc":21},[73,74,75],"MCP","zoom","zoom mcp",{"skillNo":77,"name":78,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":26},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[82,83,84,74],"sdk","zoom apps sdk","apps",{"skillNo":86,"name":87,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":26},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[87],{"skillNo":92,"name":93,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":97,"publishedAt":26},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[96],{"categoryNo":60,"categoryName":61,"taxonomyType":20,"taxonomyTypeDesc":21},[93],{"skillNo":99,"name":100,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":26},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[100]]