kubernetes
Kubernetes orchestration for container deployment, scaling, and management
معلومات المصدر
- المستودع
- ffsshhttiikk/opencode-agents-skills
- آخر نشاط في المصدر
- ٢٨ فبراير ٢٠٢٦ في ٢٢:٥٥
- لغة SKILL.md المكتشفة
- الإنجليزية
- النجوم
- ٣
- التفرعات
- ٢
خيارات التثبيت
يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.
مراجعة ملفات المصدر
اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.
عرض SKILL.md
SKILL.md
تعليمات المصدر · معاينة للقراءة فقط- name
- kubernetes
- description
- Kubernetes orchestration for container deployment, scaling, and management
- license
- MIT
- compatibility
- opencode
- metadata
- {"audience":"devops-engineers","category":"systems-administration"}
## What I do
- Create Kubernetes manifests and Helm charts
- Deploy and manage applications on Kubernetes
- Configure pods, deployments, and services
- Implement networking policies and ingress
- Manage secrets and configmaps
- Set up horizontal pod autoscaling
- Configure persistent storage
- Implement RBAC and security policies
- Perform rolling updates and rollbacks
- Debug and troubleshoot cluster issues
## When to use me
When deploying applications to Kubernetes clusters, creating deployment manifests, or managing Kubernetes resources.
## Core Concepts
- Pods, Deployments, StatefulSets, DaemonSets
- Services (ClusterIP, NodePort, LoadBalancer, Ingress)
- ConfigMaps and Secrets
- PersistentVolumes and PersistentVolumeClaims
- Horizontal Pod Autoscaler (HPA)
- Network Policies
- RBAC and ServiceAccounts
- Helm package management
- Operators and Custom Resource Definitions
- Kubernetes networking (CNI, Service mesh)
## Code Examples
### Kubernetes Manifests
```yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api-server
labels:
app: api-server
version: v1
tier: backend
spec:
replicas: 3
revisionHistoryLimit: 5
selector:
matchLabels:
app: api-server
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 0
template:
metadata:
labels:
app: api-server
version: v1
tier: backend
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
spec:
serviceAccountName: api-server
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 1000
containers:
- name: api-server
image: registry.example.com/api-server:v1.2.3
imagePullPolicy: IfNotPresent
ports:
- name: http
containerPort: 8080
protocol: TCP
- name: grpc
containerPort: 9090
protocol: TCP
envFrom:
- configMapRef:
name: api-config
- secretRef:
name: api-secrets
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
resources:
requests:
cpu: 100m
memory: 128Mi
ephemeral-storage: 100Mi
limits:
cpu: 500m
memory: 512Mi
ephemeral-storage: 500Mi
livenessProbe:
httpGet:
path: /health/live
port: http
initialDelaySeconds: 10
periodSeconds: 10
timeoutSeconds: 3
failureThreshold: 3
readinessProbe:
httpGet:
path: /health/ready
port: http
initialDelaySeconds: 5
periodSeconds: 5
timeoutSeconds: 3
failureThreshold: 3
startupProbe:
httpGet:
path: /health/startup
port: http
failureThreshold: 30
periodSeconds: 10
volumeMounts:
- name: tmp
mountPath: /tmp
- name: config
mountPath: /etc/app/config
readOnly: true
volumes:
- name: tmp
emptyDir: {}
- name: config
configMap:
name: api-config
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: api-server
topologyKey: kubernetes.io/hostname
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app: api-server
```
```yaml
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: api-server
labels:
app: api-server
spec:
type: ClusterIP
selector:
app: api-server
ports:
- name: http
port: 80
targetPort: http
protocol: TCP
- name: grpc
port: 9090
targetPort: grpc
protocol: TCP
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 3600
```
```yaml
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
nginx.ingress.kubernetes.io/proxy-body-size: "10m"
nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
nginx.ingress.kubernetes.io/proxy-connect-timeout: "60"
nginx.ingress.kubernetes.io/limit-rps: "100"
nginx.ingress.kubernetes.io/limit-connections: "50"
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
ingressClassName: nginx
tls:
- hosts:
- api.example.com
secretName: api-tls
rules:
- host: api.example.com
http:
paths:
- path: /api/v1
pathType: Prefix
backend:
service:
name: api-server
port:
number: 80
```
### Helm Chart Structure
```yaml
# Chart.yaml
apiVersion: v2
name: api-server
description: A Helm chart for API Server deployment
version: 1.2.3
appVersion: "1.2.3"
kubeVersion: ">=1.20.0-0"
dependencies:
- name: redis
version: "17.x"
repository: "https://charts.bitnami.com/bitnami"
condition: redis.enabled
- name: postgresql
version: "11.x"
repository: "https://charts.bitnami.com/bitnami"
condition: postgresql.enabled
# values.yaml
replicaCount: 3
image:
repository: registry.example.com/api-server
tag: v1.2.3
pullPolicy: IfNotPresent
imagePullSecrets:
- name: registry-secret
service:
type: ClusterIP
port: 80
ingress:
enabled: true
className: nginx
hosts:
- host: api.example.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: api-tls
hosts:
- api.example.com
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 50
targetCPUUtilizationPercentage: 70
targetMemoryUtilizationPercentage: 80
nodeSelector: {}
tolerations: []
affinity: {}
# Values for production environment
production:
replicaCount: 5
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 1000m
memory: 1Gi
autoscaling:
minReplicas: 5
maxReplicas: 100
```
### kubectl Commands
```bash
#!/bin/bash
# Kubernetes management utilities
k8s_deploy() {
local manifest="$1"
kubectl apply -f "$manifest" --record
echo "Deployed: $manifest"
}
k8s_rollback() {
local deployment="$1"
local revision="${2:---previous}"
kubectl rollout undo deployment/"$deployment" --to-revision="$revision"
kubectl rollout status deployment/"$deployment"
}
k8s_debug_pod() {
local pod="$1"
kubectl debug -it "$pod" --image=busybox --target="$pod"
}
k8s_get_resources() {
echo "=== Cluster Resources ==="
echo "Nodes:"
kubectl get nodes -o wide
echo ""
echo "Pods (All namespaces):"
kubectl get pods -A -o wide --sort-by='.metadata.namespace'
echo ""
echo "Top Nodes:"
kubectl top nodes
echo ""
echo "Top Pods:"
kubectl top pods -A
}
k8s_network_debug() {
local pod="$1"
kubectl exec -it "$pod" -- netstat -ant
kubectl exec -it "$pod" -- ss -tunapl
}
k8s_port_forward() {
local deployment="$1"
local local_port="${2:-8080}"
local remote_port="${3:-80}"
kubectl port-forward deployment/"$deployment" "$local_port":"$remote_port"
}
# Generate kubeconfig for service account
k8s_generate_service_config() {
local namespace="${1:-default}"
local serviceaccount="${2:-default}"
local token=$(kubectl get secret -n "$namespace" \
-o jsonpath="{.items[?(@.metadata.ownerReferences[0].name==\"$serviceaccount\")].data.token}" \
| base64 -d)
local ca=$(kubectl get secret -n "$namespace" \
-o jsonpath="{.items[?(@.metadata.ownerReferences[0].name==\"$serviceaccount\")].data['ca\.crt']}" \
| base64 -d)
local context=$(kubectl config current-context)
local cluster=$(kubectl config view -o jsonpath="{.contexts[?(@.name==\"$context\")].context.cluster}")
local server=$(kubectl config view -o jsonpath="{.clusters[?(@.name==\"$cluster\")].cluster.server}")
cat > "kubeconfig-$serviceaccount.yaml" <<EOF
apiVersion: v1
kind: Config
current-context: $serviceaccount-context
clusters:
- name: $cluster
cluster:
certificate-authority-data: $ca
server: $server
contexts:
- name: $serviceaccount-context
context:
cluster: $cluster
namespace: $namespace
user: $serviceaccount
users:
- name: $serviceaccount
user:
token: $token
EOF
}
```
## Best Practices
- Use namespaces to isolate environments and teams
- Implement proper resource requests and limits for all containers
- Use liveness and readiness probes for proper health checking
- Avoid running containers as root
- Use network policies to restrict traffic between pods
- Implement pod anti-affinity for high availability
- Use Helm for templating and managing releases
- Store sensitive data in Secrets (encrypted at rest)
- Use ConfigMaps for configuration, avoid hardcoding
- Implement proper logging and monitoring from the start
عرض على GitHub