使用V Kube API

Pod相关的部署和监控服务可以借由API实现完成。但是涉及pod相关的信息API调用需要在请求的header里添加secret来做权限验证(阅读V-Kube-Service快速上手了解secret的获取和使用),其他的API则不需要验证例如 对镜像的验证,特定区域的端口验证和获取可选区域列表。

  1. 查看可选区域
  2. 查看镜像是否存在
  3. 查看端口是否可以使用
  4. 查看订单信息
  5. 部署pod
  6. 查看pod日志
  7. 查看pod的状态

查看可选区域

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是在kubeletpod拉取容器镜像之前
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 PodDNS 配置可让用户对PodDNS 设置进行控制。
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 enrtypointarguments,如果没有提供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进口的带宽限制
上次更新: 6/4/2021, 1:46:49 AM