我正在为K8s REST API使用kubernetes-client java库。我想探索这里描述的资源监控功能 https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
我在创建像这样的部署
时设置了Pod的资源// ******************* RESOURCES*********************
Quantity memLimit = new Quantity();
memLimit.setAmount("400");
Map<String, Quantity> memMap = new HashMap<String,Quantity>();
memMap.put("memory", memLimit);
ResourceRequirements resourceRequirements = new ResourceRequirementsBuilder()
.withRequests(memMap)
.build();
// ******************* DEPLOYMENT *********************
Deployment deployment = new DeploymentBuilder()
.withNewMetadata()
.withName("first-deployment")
.endMetadata()
.withNewSpec()
.withReplicas(3)
.withNewTemplate()
.withNewMetadata()
.addToLabels(namespaceID, "hello-world-example")
.endMetadata()
.withNewSpec()
.addNewContainer()
.withName("nginx-one")
.withImage("nginx")
.addNewPort()
.withContainerPort(80)
.endPort()
.withResources(resourceRequirements)
.endContainer()
.endSpec()
.endTemplate()
.endSpec()
.build();
deployment = client.extensions().deployments().inNamespace(namespace).create(deployment);
我现在怎么知道,pod的已分配内存使用了多少内存? 文档说明了pod状态的一部分,但pod状态的格式为
(conditions=
[PodCondition
(lastProbeTime=null, lastTransitionTime=2018-01-09T15:53:28Z,
message=null, reason=null,
status=True, type=PodScheduled,
additionalProperties={})],
containerStatuses=[], hostIP=null,
initContainerStatuses=[],
message=null, phase=Pending, podIP=null,
qosClass=Burstable, reason=null,
startTime=null, additionalProperties={})
容器状态
(containerID=null, image=nginx,
imageID=, lastState=ContainerState(running=null, terminated=null, waiting=null, additionalProperties={}),
name=nginx-one, ready=false, restartCount=0, state=ContainerState(running=null, terminated=null, waiting=
ContainerStateWaiting(message=null, reason=ContainerCreating, additionalProperties={}), additionalProperties={}),
additionalProperties={})
是否有监控Pod上资源的示例?
答案 0 :(得分:0)
花一小时观看视频:Load Testing Kubernetes: How to Optimize Your Cluster Resource Allocation in Production,其中介绍了有关如何根据负载测试调整资源配置大小的技巧和建议。视频中的示例利用了cAdvisor,因此一旦您的Pod /容器启动并运行,您就可以利用该机制至少捕获容器所占资源量的基本视图。
答案 1 :(得分:0)
我不确定k8 api-server是否提供端点来获取与性能相关的指标,但是使用fabric8,即使Pod处于运行状态,也不应该监视资源消耗。
{
"kind": "Pod",
"apiVersion": "v1",
"metadata": {
"name": "nginx-41cbe3-10-json-9cc655bcc-w576m",
"generateName": "nginx-41cbe3-10-json-9cc655bcc-",
"namespace": "default",
"selfLink": "/api/v1/namespaces/default/pods/nginx-41cbe3-10-json-9cc655bcc-w576m",
"uid": "e14a955f-18b7-11e8-a642-42010a800090",
"resourceVersion": "12765988",
"creationTimestamp": "2018-02-23T16:37:47Z",
"labels": {
"app": "nginx",
"cliqr": "99911519403865240",
"pod-template-hash": "577211677"
},
"annotations": {
"kubernetes.io/created-by": "{\"kind\":\"SerializedReference\",\"apiVersion\":\"v1\",\"reference\":{\"kind\":\"ReplicaSet\",\"namespace\":\"default\",\"name\":\"nginx-41cbe3-10-json-9cc655bcc\",\"uid\":\"e1493bd0-18b7-11e8-a642-42010a800090\",\"apiVersion\":\"extensions\",\"resourceVersion\":\"12765971\"}}\n",
"kubernetes.io/limit-ranger": "LimitRanger plugin set: cpu request for container nginx"
},
"ownerReferences": [
{
"apiVersion": "extensions/v1beta1",
"kind": "ReplicaSet",
"name": "nginx-41cbe3-10-json-9cc655bcc",
"uid": "e1493bd0-18b7-11e8-a642-42010a800090",
"controller": true,
"blockOwnerDeletion": true
}
]
},
"spec": {
"volumes": [
{
"name": "default-token-zrhj5",
"secret": {
"secretName": "default-token-zrhj5",
"defaultMode": 420
}
}
],
"containers": [
{
"name": "nginx",
"image": "nginx:latest",
"ports": [
{
"containerPort": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": "100m"
}
},
"volumeMounts": [
{
"name": "default-token-zrhj5",
"readOnly": true,
"mountPath": "/var/run/secrets/kubernetes.io/serviceaccount"
}
],
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "Always"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"serviceAccountName": "default",
"serviceAccount": "default",
"nodeName": "gke-rishi-k8-cluster-default-pool-6ca1467e-xtmw",
"securityContext": {},
"schedulerName": "default-scheduler",
"tolerations": [
{
"key": "node.alpha.kubernetes.io/notReady",
"operator": "Exists",
"effect": "NoExecute",
"tolerationSeconds": 300
},
{
"key": "node.alpha.kubernetes.io/unreachable",
"operator": "Exists",
"effect": "NoExecute",
"tolerationSeconds": 300
}
]
},
"status": {
"phase": "Running",
"conditions": [
{
"type": "Initialized",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2018-02-23T16:37:47Z"
},
{
"type": "Ready",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2018-02-23T16:37:53Z"
},
{
"type": "PodScheduled",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2018-02-23T16:37:47Z"
}
],
"hostIP": "10.240.0.23",
"podIP": "10.20.3.164",
"startTime": "2018-02-23T16:37:47Z",
"containerStatuses": [
{
"name": "nginx",
"state": {
"running": {
"startedAt": "2018-02-23T16:37:52Z"
}
},
"lastState": {},
"ready": true,
"restartCount": 0,
"image": "nginx:latest",
"imageID": "docker-pullable://nginx@sha256:600bff7fb36d7992512f8c07abd50aac08db8f17c94e3c83e47d53435a1a6f7c",
"containerID": "docker://2c227a901bcde4705c5b79aedf1963079dfb345fae5849616d29e8cc7af0fd74"
}
],
"qosClass": "Burstable"
}
}