使用V Kube API
Pod相关的部署和监控服务可以借由API实现完成。但是涉及pod相关的信息API调用需要在请求的header里添加secret来做权限验证(阅读V-Kube-Service快速上手了解secret的获取和使用),其他的API则不需要验证例如 对镜像的验证,特定区域的端口验证和获取可选区域列表。
查看可选区域
GET /k8s/regions
response
Status: 200 OK
[
"region1",
"region2",
"region3"
]
Error Response
Status: 200 OK
[]
查看镜像是否存在
GET /k8s/images?image=nginx&tag=stable
请求参数
query params
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
image | true | String | 所要查看的镜像名 |
tag | true | String | 所要查看镜像的标签号 |
response
Status: 200 OK
{
"status": "OK"
}
Error response
Status Code | Response | Cause |
---|---|---|
404 | {"error":{"code":404,"message":"image does not exist."}} | 输入的image:tag不存在docker hub中 |
400 | {"error":{"code":400,"message":"image format not allow.Format: image:tag"}} | 输入的格式不对,需要填写镜像名和标签号 |
查看端口是否可以使用
查看输入的端口是否被占用
POST /k8s/checkports
请求参数
json body
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
region | true | String | 所选端口所在的区域 |
ports | true | Value | 所要查看的端口号 |
example:
{
"region":"ausrine",
"ports":[22,3306,1234,1111]
}
Response
Status: 200 OK
Status | Occupied | Cause |
---|---|---|
NoResource | "occupied:[]" | 没有对应的资源,例如所选的区域不存在 |
InternalErr | "occupied:[]" | 系统出错 |
PortsOccupied | 列出被占用的端口,"occupied:[22,3306]" | 所选的端口部分或全部被占用 |
NotOccupied | "occupied:[]" | 所选的端口全都可用 |
example:
{
"occupied": [
22,
3306
],
"status": "PortsOccupied"
}
Error Response
Status Code | Response | Cause |
---|---|---|
400 | {"error":{"code":400,"message":"item field empty"}} | 缺少请求的字段,例如,缺少region或者ports |
查看订单信息
查看secret的订单信息
GET /k8s/order
请求参数
Headers
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
secret | true | String | 关于用户服务的secret,需要通过secret才能进行一些敏感操作 |
example
curl --location --request GET 'http://$Endpoint/api/v1/k8s/order' \
--header 'secret: 2Vu3Kdxxxxxxxxxxxxxxxxxxxxxxxx'
Response
Status: 200 OK
{
"createdAt": 1620962741,
"updatedAt": 1620962788,
"duration": 100,
"serviceExpiredDate": "",
"amount": 18000,
"amountPaid": 18000,
"serviceID": "9xxxxxx0xxx6exxxxxxxxx",
"service": "Container Service",
"serviceCategoryID": "xxxxxxxxxxxxxxxxxxxxxxxx",
"provider": "v-kube-service",
"address": "xxxxxxxxxxxxxxxxxxxxxxxx",
"recipient": "xxxxxxxxxxxxxxxxxxxxxxxx",
"id": "xxxxxxxxxxxxxxxxxxxxxxxx",
"serviceOptions": {
"portSpecification": "User Specified Service Port",
"resourceUnit": "2-Unit-Resource"
},
"status": "OrderFiled",
"publicKey": ""
}
Fileds of response
Fileds Name | Type | Explanation |
---|---|---|
createdAt | Value | 订单创建的时间 |
updatedAt | Value | 订单更新的时间 |
duration | Value | 订单可使用时间 |
serviceExpiredDate | String | 服务过期的日期 |
amount | Value | 订单需要付款数目 |
amountPaid | Value | 订单已付款数目 |
serviceID | String | 所购买的服务ID |
service | String | 所购买的服务名称 |
serviceCategoryID | String | 服务所属类别ID |
provider | String | 服务供应商名称 |
address | String | 交易发送者地址 |
recipient | String | 交易接收者地址,即供应商地址 |
id | String | 订单ID |
serviceOptions | Object | 所选的服务选项 |
status | String | 订单状态 |
publicKey | String | 下单时的publicKey |
Error response
Status | Response | Cause |
---|---|---|
500 | server errror | 服务内部出错 |
部署pod
使用secret部署一个pod
POST /api/v1/k8s/deploy
请求参数
Headers
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
secret | true | string | 关于用户服务的secret,需要通过secret才能进行一些敏感操作 |
json body
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
nodeSelector | true | Object | region选择器的对象 |
nodeSelector :region | true | String | 选择部署的pod在特定region |
containers | true | Array-Object | container对象,可以是多个 |
containers :name | true | String | container的名字 |
containers :imageName | true | String | 部署的container的镜像名 |
containers :ports | false | Array-Object | 部署的container port与宿主机的端口映射关系 |
containers :ports :containerPort | false | value | 部署的container 端口号 |
containers :ports :hostPort | false | value | 部署的container与宿主机映射的端口号 |
containers :resource | true | Object | container的资源对象 |
containers :resource :memory | true | String | container的内存资源,全部的总额小于等于所购的订单服务,单位为Mi,Gi |
containers :command | false | String | container的command,格式为"command":"/bin/sh\n-c\ntail -f /dev/null" |
containers :args | false | String | container的argment,格式为"args":"--vm\n1\n--vm-bytes\n500M\n--vm-hang\n1" |
example
{
"nodeSelector":{
"region":"ausrine"
},
"containers": [
{
"name": "container1",
"imageName": "nginx",
"ports": [
{
"containerPort": 80,
"hostPort":2999
}
],
"resource": {
"memory": "100Mi"
}
}
]
}
查看pod日志
使用secret查看一个pod的日志
GET /k8s/pod/log
请求参数
Headers
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
secret | true | string | 关于用户服务的secret,需要通过secret才能进行一些敏感操作 |
Response
Status: 200 OK
"/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration\n/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/\n/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh\n10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf\n10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf\n/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh\n/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh\n/docker-entrypoint.sh: Configuration complete; xxx
Error response
Status | Response | Cause |
---|---|---|
500 | server errror | 服务内部出错 |
查看pod的状态
使用secret查看所deploy的pod的状态信息
GET /k8s/pod/status
请求参数
Headers
参数 | 必选 | 类型 | 说明 |
---|---|---|---|
secret | true | String | 关于用户服务的secret,需要通过secret才能进行一些敏感操作 |
Resonse
Status:200 OK
{
"name": "71b60598-exxxxxxxxxxxxxxxxxxxxxxx7f44868-s7drh",
"podStatus": {
"phase": "Running",
"conditions": [
{
"type": "Initialized",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2021-05-13T08:37:46Z"
},
{
"type": "Ready",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2021-05-13T08:37:52Z"
},
{
"type": "ContainersReady",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2021-05-13T08:37:52Z"
},
{
"type": "PodScheduled",
"status": "True",
"lastProbeTime": null,
"lastTransitionTime": "2021-05-13T08:37:46Z"
}
],
"hostIP": "xxxxxxxxxxxxxxxxxxxxxx",
"podIP": "xxxxxxxxxxxxxxxxxxxxxx",
"podIPs": [
{
"ip": "xxxxxxxxxxxxxxxxxxxxxx"
}
],
"startTime": "2021-05-13T08:37:46Z",
"containerStatuses": [
{
"name": "nginx-test",
"state": {
"running": {
"startedAt": "2021-05-13T08:37:52Z"
}
},
"lastState": {},
"ready": true,
"restartCount": 0,
"image": "docker.io/library/nginx:latest",
"imageID": "docker.io/library/nginx@sha256:df13abe416e37eb3db4722840dd479b00ba193ac6606e7902331dcea50f4f1f2",
"containerID": "containerd://xxxxxxxxxxxxxxxxxxxxxx061bd12c2c6e50eb86403f",
"started": true
}
],
"qosClass": "Burstable"
},
"podSpec": {
"volumes": [
{
"name": "xxxxxxxxxxxxxxxxxxxxxx",
"secret": {
"secretName": "xxxxxxxxxxxxxxxxxxxxxx",
"defaultMode": 420
}
}
],
"containers": [
{
"name": "nginx-test",
"image": "nginx",
"ports": [
{
"hostPort": 2999,
"containerPort": 80,
"protocol": "TCP"
}
],
"resources": {
"limits": {
"memory": "2Gi"
},
"requests": {
"cpu": "513m",
"memory": "2Gi"
}
},
"volumeMounts": [
{
"name": "xxxxxxxxxxxxxxxxxxxxxx",
"readOnly": true,
"mountPath": "xxxxxxxxxxxxxxxxxxxxxx"
}
],
"terminationMessagePath": "/dev/termination-log",
"terminationMessagePolicy": "File",
"imagePullPolicy": "Always"
}
],
"restartPolicy": "Always",
"terminationGracePeriodSeconds": 30,
"dnsPolicy": "ClusterFirst",
"nodeSelector": {
"region": "giltine"
},
"serviceAccountName": "default",
"serviceAccount": "default",
"nodeName": "giltine",
"securityContext": {},
"imagePullSecrets": [
{
"name": "xxxxxxxxxxxxxxxxxxxxxx"
}
],
"schedulerName": "default-scheduler",
"tolerations": [
{
"key": "node.kubernetes.io/not-ready",
"operator": "Exists",
"effect": "NoExecute",
"tolerationSeconds": 300
},
{
"key": "node.kubernetes.io/unreachable",
"operator": "Exists",
"effect": "NoExecute",
"tolerationSeconds": 300
}
],
"priority": 0,
"enableServiceLinks": true,
"preemptionPolicy": "PreemptLowerPriority"
},
"annotations": {
"cni.projectcalico.org/podIP": "xxxxxxxxxxxxxxxxxxxxxx",
"cni.projectcalico.org/podIPs": "xxxxxxxxxxxxxxxxxxxxxx",
"kubernetes.io/egress-bandwidth": "1024M",
"kubernetes.io/ingress-bandwidth": "1024M"
}
}
Field Name | Type | Explanation |
---|---|---|
name | String | pod的名称 |
podStatus | Object | pod的状态 |
podSpec | Object | pod的描述说明 |
annotations | Object | pod的注解 |
Field of podStatus
Field | Type | Explanation |
---|---|---|
phase | String | pod生命周期的一个简单、高度抽象的总结 |
conditions | Array-Object | 当前pod的服务情况 |
hostIP | String | pod所在宿主机的ip地址 |
podIP | String | 分配给pod的ip地址,至少在集群内是可路由的 |
podIPs | Array-Object | 分配给pod的ip地址,至少在集群内是可路由的 |
startTime | String | startTime 是在kubelet 为pod 拉取容器镜像之前 |
containerStatuses | Array-Object | 容器状态 |
qosClass | String | 服务质量是由分配给pod的计算资源而进行的分类类别 |
Filed of conditions
Field | Type | Explanation |
---|---|---|
type | String | conditions 的类型 |
status | String | condition 的状态 |
lastProbeTime | null | 上一次探询condition 的时间 |
lastTransitionTime | String | 上一次探询condition 的变化的时间 |
Field of podIPs
Field | Type | Explanation |
---|---|---|
ip | String | 分配给pod的ip地址 |
Field of containerStatus
Field | Type | Explanation |
---|---|---|
name | String | 容器的名字,在pod内唯一,不可更改 |
state | Object | 关于容器的当前的状况细节 |
lastState | Object | 关于容器的上一次的状况细节 |
ready | Boolean | 指定容器是否已经通过准备就绪探针 |
restartCount | Value | 容器重启的次数 |
image | String | 容器正在运行的镜像名 |
imageID | String | 容器镜像的镜像ID |
containerID | String | 容器ID,格式为 'docker://<container_id>'. |
started | Boolean | 指定容器是否已经通过启动探针 |
Field of state
Field | Type | Explanation |
---|---|---|
running | Object | 正在运行的容器的详细信息 |
terminated | Object | 已经终止的容器的详细信息 |
waiting | Object | 正在等待的容器的详细信息 |
Field of running
Field | Type | Explanation |
---|---|---|
startedAt | String | 上一次容器启动或者重启的时间 |
Field of terminated
Field | Type | Explanation |
---|---|---|
containerID | String | 容器ID,格式为 'docker://<container_id>'. |
existCode | Value | 上一次容器终止的退出状态 |
finishedAt | String | 上一次容器终止的时间 |
message | String | 关于上一次容器终止的信息 |
reason | String | 上一次容器终止的简短原因描述 |
signal | Value | 上一次容器终止的信号 |
startedAt | String | Time at which previous execution of the container started |
Field of waiting
Field | Type | Explanation |
---|---|---|
message | String | 关于为什么容器没能启动的信息描述 |
reason | String | 容器没能运行的简短原因描述 |
Field of podSpec
Field | Type | Explanation |
---|---|---|
activeDeadlineSeconds | Value | Pod 可以运行的最长时间,达到设置的该值后,Pod 会自动停止 |
affinity | Object | 在scheduling 时,可使用affinity 设置与node 的亲和度,调度到合适的node 上启动 |
automountServiceAccountToken | Boolean | |
containers | Array-Object | 隶属于此pod的容器 |
dnsConfig | Object | Pod 的 DNS 配置可让用户对Pod 的 DNS 设置进行控制。 |
dnsPolicy | String | 可以设置特定 Pod 的 DNS 策略,默认为"ClusterFirst" |
enableServiceLinks | Boolean | pod服务的信息是否注入到pod的环境变量中。默认是true |
ephemeralContainers | Array-Object | 运行在pod中的临时容器。临时容器可能会在一个存在的pod中执行用户初始化动作,比如debugging。 |
hostAliases | Array-Object | 在非宿主机网络模式下的pod,可以通过hostAliases 设置ip的别名 |
hostIPC | Array-Obejct | 使用宿主机的IPC命令空间。默认为false |
hostNetwork | Boolean | 如果设置为true,该pod将会共用宿主机的网络命令空间,发送到宿主机的请求,该pod会接收。默认为false。 |
hostPID | Boolean | 控制 Pod 中容器是否可以共享宿主上的进程 ID 空间。默认为false |
hostname | String | 可通过hostname 设置pod的hostname |
imagePullSecrets | Array-Object | 在同一个命令空间内,可使用secret拉取特定的私有仓库下的任何镜像 |
initContainers | Array-Object | Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 |
nodeName | String | pod被调度到的节点名字 |
nodeSelector | Object | 可以把pod调度到与节点标签相匹配的节点上 |
overhead | Object | POD 开销 是一个特性,用于计算 Pod 基础设施在容器请求和限制之上消耗的资源。 |
preemptionPolicy | String | PreemptionPolicy 是一种可以以低优先级权限抢占pods 的策略 |
priority | Value | 优先级权限值,值越高就有越高的权限 |
priorityClassName | String | 如果设定了,则指定了该pod 的优先级权限 |
readinessGates | Array-Obejct | 设置 Pod 规约中的 readinessGates 列表,为 kubelet 提供一组额外的状况供其评估 Pod 就绪态时使用。 |
restartPolicy | String | 针对pod内的所有容器的重启策略,包含有Always , OnFailure ,Never |
runtimeClassName | String | RuntimeClass 是一个用于选择容器运行时配置的特性,容器运行时配置用于运行 Pod 中的容器。 |
schedulerName | String | 如果设置了schedulerName ,pod 指派被指定的scheduler ,如果没有设置,那么pod 会被默认的scheduler 指派 |
securityContext | Object | 定义 Pod 或 Container 的特权与访问控制设置 |
serviceAccountName | String | serviceAccountNam 字段设置为你想用的服务账户名称 |
shareProcessNamespace | Boolean | 在pod中的所有容器共享一个单进程命名空间 |
subdomain | String | subdomain 字段,可以用来指定 Pod 的子域名,组合为"<hostname>.<subdomain>.<pod namespace>.svc.<cluster domain>" |
terminationGracePeriodSeconds | Value | 在所设定的时间内,pod可平缓关闭 |
tolerations | Array-Object | 容忍度(Tolerations)是应用于 Pod 上的,允许(但并不要求)Pod 调度到带有与之匹配的污点的节点上。 |
topologySpreadConstraints | Array-Object | 使用拓扑分布约束(Topology Spread Constraints) 来控制Pods在集群内故障域之间的分布,例如区域(Region)、可用区(Zone)、节点和其他用户自定义拓扑域。 这样做有助于实现高可用并提升资源利用率。 |
volumes | Array-Object | 可挂载volumes到容器中,不同容器的volume都属于同一个pod |
Field of volumes
Field | Type | Explanation |
---|---|---|
name | String | volume 的名词 |
secret | Object | secret 可作为挂载到一个或多个容器上的卷中的文件 |
Field of secret
Field | Type | Explanation |
---|---|---|
secretName | String | secret名字 |
defaultMode | Value | 默认为0644的读写权限 |
Field of containers
Field | Type | Explanation |
---|---|---|
name | String | 容器名称 |
image | String | 镜像名称 |
ports | Array-Object | 容器暴露的端口 |
resources | Object | 容器的计算资源 |
volumeMounts | Array-Object | pod的volumes挂载到容器的文件系统 |
terminationMessagePath | Value | Kubernetes 从容器的 terminationMessagePath 字段中指定的终止消息文件中检索终止消息, 默认值为 /dev/termination-log 。 |
terminationMessagePolicy | String | 设置容器的 terminationMessagePolicy 字段, 此字段默认为 "File ",表明仅从终止消息文件中检索终止消息。 |
imagePullPolicy | String | 拉取镜像的策略。有Always , Never ,IfNotPresent . Defaults to Always |
args | Array-String | enrtypoint 的arguments ,如果没有提供args 时,会使用docker镜像的CMD |
Field of ports
Field | Type | Explanation |
---|---|---|
hostPort | Value | 宿主机的暴露的端口,范围为0-65536 |
containerPort | Value | pod暴露的端口,范围为0-63336 |
protocol | String | 端口的协议,默认为TCP |
Field of resources
Field | Type | Explanation |
---|---|---|
limits | Object | 程序最大可被允许的计算资源 |
requests | Object | 程序最小所需要的计算资源 |
Field of limits
Field | Type | Explanation |
---|---|---|
cpu | String | cpu 资源,单位:m |
memory | String | memory 资源,单位:Ki |Mi |Gi |Ti |Pi |Ei |
Field of requests
Field | Type | Explanation |
---|---|---|
cpu | String | cpu 资源,单位:m |
memory | String | memory 资源,单位:Ki |Mi |Gi |Ti |Pi |Ei |
Field of volumeMounts
Field | Type | Explanation |
---|---|---|
name | String | 匹配Volume 的名字 |
readOnly | Boolean | 只读模式 |
mountPath | String | 挂载到容器内的路径 |
Field of nodeSelector
Filed | Type | Explanation |
---|---|---|
region | String | 节点所在的区域 |
Field of imagePullSecrets
Field | Type | Explanation |
---|---|---|
name | String | 所使用secret`的名称 |
Field of tolerations
Field | Type | Explanation |
---|---|---|
key | String | 设置污点的键值 |
operator | String | 指明值与key之间的关系,比如Equal ,Exisit |
effect | String | 指明匹配上污点的作用效果,可以指定NoSchedule ,PreferNoSchedule ,NoExecute |
tolerationSeconds | Value | 如果 Pod 存在一个 effect 值为 NoExecute 的容忍度指定了可选属性 tolerationSeconds 的值,则表示在给节点添加了上述污点之后, Pod 还能继续在节点上运行的时间。 |
Field of annotations
Field | Type | Explanation |
---|---|---|
cni.projectcalico.org/podIP | String | podIP的注解 |
cni.projectcalico.org/podIPs | String | podIPs的注解 |
kubernetes.io/egress-bandwidth | String | pod出口的带宽限制 |
kubernetes.io/ingress-bandwidth | String | pod进口的带宽限制 |