一个简单的例子通过hpa扩缩容cr

初始化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个

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容