初始化project
kubebuilder init --domain demo.io --project-name crscaledemo --repo github.com/demo/crscaledemo
创建api
kubebuilder create api --group apps --kind MyApp --namespaced --resource --version v1alpha1
修改api/v1alpha1/myapp_types.go
MyAppSpec中添加
type MyAppSpec struct {
...
// +kubebuilder:validation:Minimum=1
// +kubebuilder:default=1
Replicas *int32 `json:"replicas"`
...
}
MyAppStatus中添加
type MyAppStatus struct {
...
Replicas int32 `json:"replicas"`
Selector string `json:"selector"`
...
}
MyApp添加注释
...
// +kubebuilder:subresource:scale:specpath=.spec.replicas,statuspath=.status.replicas,selectorpath=.status.selector
...
type MyApp struct {
...
}
创建demo cr
apiVersion: apps.demo.io/v1alpha1
kind: MyApp
metadata:
name: demo
namespace: default
spec:
replicas: 1
image: nginx
验证
kubectl get pod -n default -l app=demo
看到nginx pod有1个
创建demo hpa
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp
namespace: default
spec:
scaleTargetRef:
apiVersion: apps.wsc.io/v1alpha1
kind: MyApp
name: uid1
minReplicas: 2
maxReplicas: 10
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Percent
value: 10
periodSeconds: 60
metrics:
- type: Pods
pods:
metric:
name: requests_per_second
target:
type: AverageValue
averageValue: 100
验证
kubectl get pod -n default -l app=demo
看到nginx pod变成了2个