metrics-server
修改metrics-server-deployment.yaml中镜像
apiVersion: v1
kind: ServiceAccount
metadata:
name: metrics-server
namespace: kube-system
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: metrics-server
namespace: kube-system
labels:
k8s-app: metrics-server
spec:
selector:
matchLabels:
k8s-app: metrics-server
template:
metadata:
name: metrics-server
labels:
k8s-app: metrics-server
spec:
imagePullSecrets: # 注意
- name: docker-image-resposity
serviceAccountName: metrics-server
volumes:
# mount in tmp so we can safely use from-scratch images and/or read-only containers
- name: tmp-dir
emptyDir: {}
containers:
- command:
- /metrics-server
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
name: metrics-server
# 注意
image: hub-dev.rockontrol.com/rk-ai-tools/metrics-server@sha256:0122b32b24dcb04ac5131cecdefd8abce0c8a3359605dd17b394acc9fc49de1d
imagePullPolicy: Always
volumeMounts:
- name: tmp-dir
mountPath: /tmp
其他的yaml
auth-delegator.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: metrics-server:system:auth-delegator
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:auth-delegator
subjects:
- kind: ServiceAccount
name: metrics-server
namespace: kube-system
auth-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: RoleBinding
metadata:
name: metrics-server-auth-reader
namespace: kube-system
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccount
name: metrics-server
namespace: kube-system
metrics-apiservice.yaml
apiVersion: apiregistration.k8s.io/v1beta1
kind: APIService
metadata:
name: v1beta1.metrics.k8s.io
spec:
service:
name: metrics-server
namespace: kube-system
group: metrics.k8s.io
version: v1beta1
insecureSkipTLSVerify: true
groupPriorityMinimum: 100
versionPriority: 100
metrics-server-service.yaml
apiVersion: v1
kind: Service
metadata:
name: metrics-server
namespace: kube-system
labels:
kubernetes.io/name: "Metrics-server"
spec:
selector:
k8s-app: metrics-server
ports:
- port: 443
protocol: TCP
targetPort: 443
resource-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: system:metrics-server
rules:
- apiGroups:
- ""
resources:
- pods
- nodes
- nodes/stats
- namespaces
verbs:
- get
- list
- watch
- apiGroups:
- "extensions"
resources:
- deployments
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: system:metrics-server
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:metrics-server
subjects:
- kind: ServiceAccount
name: metrics-server
namespace: kube-system
以上文件全部需要
执行
kubectl create -f .
测试节点数据
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes" | jq .
如果没有jq,请下载
apt-get install -y jq
测试pods数据
kubectl get --raw "/apis/metrics.k8s.io/v1beta1/pods" | jq .
至此已经配置成功
实例tomcat
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-tomcat
namespace: nginx-ingress
labels:
app: demo-tom
spec:
replicas: 1
selector:
matchLabels:
app: demo-tomcat-pod
template:
metadata:
labels:
app: demo-tomcat-pod
spec:
imagePullSecrets:
- name: docker-image-resposity
containers:
- name: demo-tomcat
image: tomcat:latest。 # 注意这里
ports:
- containerPort: 8080
resources: # 注意这里
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: tomcat-test-svc
namespace: nginx-ingress
spec:
type: NodePort
ports:
- port: 8080
targetPort: 8080
selector:
app: demo-tomcat-pod
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: tomcat-test-ingress
namespace: nginx-ingress
labels:
ingres-controller: nginx
annotations:
kubernets.io/ingress.class: nginx
spec:
rules:
- host: www.lijiacai.cnba
http:
paths:
- path: /
backend:
serviceName: tomcat-test-svc
servicePort: 8080
配置自动扩容
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: demo-tomcat
namespace: nginx-ingress
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: demo-tomcat
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
- type: Resource
resource:
name: memory
target:
type: AverageValue
averageValue: 200Mi
查看实验结果
[ ~ ]# kubectl create -f .
[ ~ ]# kubectl get hpa
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
podinfo Deployment/podinfo 2826240 / 200Mi, 15% / 80% 2 10 2 5m