Sim*_*mon 6 yaml gcloud kubernetes google-kubernetes-engine
我正在单个集群上开发 Google Kubernetes Engine。集群自动扩展节点数量。我已经创建了三个部署并使用网站设置了自动缩放策略(工作负载 -> 部署 -> 操作 -> 自动缩放),因此无需手动编写 YAML 配置。根据官方指南,我没有犯任何错误。
如果不指定请求,则可以仅根据资源利用率的绝对值(例如 CPU 利用率的 milliCPUs)进行自动缩放。
以下是完整的部署 YAML:
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: student
name: student
namespace: ulibretto
spec:
replicas: 1
selector:
matchLabels:
app: student
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: student
spec:
containers:
- env:
- name: CLUSTER_HOST
valueFrom:
configMapKeyRef:
key: CLUSTER_HOST
name: shared-env-vars
- name: BIND_HOST
valueFrom:
configMapKeyRef:
key: BIND_HOST
name: shared-env-vars
- name: TOKEN_TIMEOUT
valueFrom:
configMapKeyRef:
key: TOKEN_TIMEOUT
name: shared-env-vars
image: gcr.io/ulibretto/github.com/ulibretto/studentservice
imagePullPolicy: IfNotPresent
name: studentservice-1
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
labels:
app: student
name: student-hpa-n3bp
namespace: ulibretto
spec:
maxReplicas: 100
metrics:
- resource:
name: cpu
targetAverageUtilization: 80
type: Resource
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: student
---
apiVersion: v1
kind: Service
metadata:
annotations:
cloud.google.com/neg: '{"ingress":true}'
labels:
app: student
name: student-ingress
namespace: ulibretto
spec:
clusterIP: 10.44.5.59
ports:
- port: 5000
protocol: TCP
targetPort: 5000
selector:
app: student
sessionAffinity: None
type: ClusterIP
Run Code Online (Sandbox Code Playgroud)
问题是 HPA 看不到指标(平均 CPU 利用率),这确实很奇怪(见图)。 HPA 无法读取指标值
我缺少什么?
编辑
你是对的。您不需要像我之前提到的namespace: ulibretto
那样指定scaleTargetRef:
。
当您提供所有 YAML 时,我能够找到正确的根本原因。
如果您检查GKE 文档,您会在代码中找到注释
resources:
# You must specify requests for CPU to autoscale
# based on CPU utilization
requests:
cpu: "250m"
Run Code Online (Sandbox Code Playgroud)
您的部署没有指定resource requests
. 我已经尝试过了(我删除了一些部分,因为我无法部署容器并更改了 HPA 中的 apiVersion):
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: student
name: student
namespace: ulibretto
spec:
replicas: 3
selector:
matchLabels:
app: student
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
app: student
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: studentservice-1
resources:
requests:
cpu: "250m"
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
labels:
app: student
name: student-hpa
namespace: ulibretto
spec:
maxReplicas: 100
minReplicas: 1
targetCPUUtilizationPercentage: 80
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: student
$ kubectl get all -n ulibretto
NAME READY STATUS RESTARTS AGE
pod/student-6f797d5888-84xfq 1/1 Running 0 7s
pod/student-6f797d5888-b7ctq 1/1 Running 0 7s
pod/student-6f797d5888-fbtmd 1/1 Running 0 7s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/student 3/3 3 3 7s
NAME DESIRED CURRENT READY AGE
replicaset.apps/student-6f797d5888 3 3 3 7s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/student-hpa Deployment/student <unknown>/80% 1 100 0 7s
Run Code Online (Sandbox Code Playgroud)
大约 1-5 分钟后,您将收到一些指标。
$ kubectl get all -n ulibretto
NAME READY STATUS RESTARTS AGE
pod/student-6f797d5888-84xfq 1/1 Running 0 95s
pod/student-6f797d5888-b7ctq 1/1 Running 0 95s
pod/student-6f797d5888-fbtmd 1/1 Running 0 95s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/student 3/3 3 3 95s
NAME DESIRED CURRENT READY AGE
replicaset.apps/student-6f797d5888 3 3 3 95s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/student-hpa Deployment/student 0%/80% 1 100 3 95s
Run Code Online (Sandbox Code Playgroud)
如果您想使用 CLI 创建 HPA,情况也是如此:
$ kubectl autoscale deployment student -n ulibretto --cpu-percent=50 --min=1 --max=100
horizontalpodautoscaler.autoscaling/student autoscaled
$ kubectl get hpa -n ulibretto
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
student Deployment/student <unknown>/50% 1 100 0 3s
Run Code Online (Sandbox Code Playgroud)
一段时间后,您将收到0%
而不是<unknown>
$ kubectl get all -n ulibretto
NAME READY STATUS RESTARTS AGE
pod/student-6f797d5888-84xfq 1/1 Running 0 4m4s
pod/student-6f797d5888-b7ctq 1/1 Running 0 4m4s
pod/student-6f797d5888-fbtmd 1/1 Running 0 4m4s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/student 3/3 3 3 4m5s
NAME DESIRED CURRENT READY AGE
replicaset.apps/student-6f797d5888 3 3 3 4m5s
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
horizontalpodautoscaler.autoscaling/student Deployment/student 0%/50% 1 100 3 58s
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4136 次 |
最近记录: |