Kubernetes Cookbook 编程指南 中文版教程
创建时间:2018-12-07  访问量:3665  7  0

Kubernetes Cookbook 编程指南 中文版教程

RESTful API的使用

Kubernetes管理员可以通过kubectl命令控制Kubernetes集群;它支本地和远程执行。然而,一些管理员或操作员可能需要集成一个程序来控制Kubernetes Master。

Kubernetes有一个与kubectl命令相似的RESTful API可以允许控制Kubernetes集群。

开始

当我们启动了API服务器时黙认打开了RESTful API;你以通过curl命令来访问RESTful API,如下所示:

//assume API server is running at localhost port number 8080
# curl http://localhost:8080/api
{
    "kind": "APIVersions",
    "versions": [
    	"v1"
    ]
}

我们来使用以下JSON格式配置创建一个副本控制器:

#catnginx-rc.json{
	"apiVersion": "v1",
	"kind": "ReplicationController",
	"metadata": {
		"name": "my-first-rc"
	},
	"spec": {
		"replicas": 2,
		"template": {
			"spec": {
				"containers": [{
					"image": "nginx",
					"name": "my-nginx"
				}]
			},
			"metadata": {
				"labels": {
					"app": "nginx"
				}
			}
		},
		"selector": {
			"app": "nginx"
		}
	}
}

提交请求来创建一个副本控制,如下所示:

# curl -XPOST -H "Content-type: application/json" -d @nginx-rc.json
http://localhost:8080/api/v1/namespaces/default/replicationcontrollers

然后,kubectl get rc命令应该如下所示:

# kubectl get rc
CONTROLLER CONTAINER(S) IMAGE(S) SELECTOR REPLICAS AGE
my-first-rc my-nginx nginx app=nginx 2 10s

当然,使用curl命令来检查一下RESTful API,如下所示:

# curl -XGET http://localhost:8080/api/v1/namespaces/default/
replicationcontrollers

删除也可以通过RESTful API完成,如下所示:

# curl -XDELETE http://localhost:8080/api/v1/namespaces/default/
replicationcontrollers/my-first-rc

我们写一个程来执行上述相同的过程。下面是使用Python2.7代码创建一个相同的副本控制器:

# cat nginx-rc.py

import httplib
import json
k8s_master_url = "localhost"
k8s_master_port = 8080
namespace="default"

headers = {"Content-type": "applicaiton/json"}
rc = {}
rc["apiVersion"] = "v1"
rc["kind"] = "ReplicationController"
rc["metadata"] = {"name" : "my-second-rc"}
rc["spec"] = {
    "replicas": 2,
    "selector": {"app": "nginx"},
    "template": {
        "metadata": {"labels": {"app": "nginx"}},
        "spec": {
            "containers" :[
                {"name": "my-nginx", "image": "nginx"}
            ]
        }
    }
}

h1 = httplib.HTTPConnection(k8s_master_url, k8s_master_port)
h1.request("POST", "/api/v1/namespaces/%s/replicationcontrollers" %
namespace, json.dumps(rc), headers)
res = h1.getresponse()

print "return code = %d" % res.status

你可以使用Python解释器运行这个代码,如下所示:

# python nginx-rc.py
return code = 201

//HTTP return code 201 meant "Created"

它是如何工作的...

RESTful API允许CRUD(Create,Read,Update和Delete)操作,这与现代Web应用程序后端的概念类似。关于更多的信息,请参考 https://en.wikipedia.org/wiki/Create,read,update_and_delete 。

Kubernetes RESTful API示例与相关的HTTP方法如下所示:

Operation HTTP Method Example
Create POST POST /api/v1/namespaces/default/services
Read GET GET /api/v1/componentstatuses
Update PUT PUT /api/v1/namespaces/default/ replicationcontrollers/my-first-rc
Delete DELETE DELETE /api/v1/namespaces/default/pods/my nginx

完整的Kubernetes RESTful API由Swagger(http://swagger.io/)定义。你可以通过这个链接http://<API Server IP Address>:<API Serverport>/swagger-ui 查看详细描述。

还可以参考

本节描述了如何通过一个程序来使用Kubernetes RESTful API。它对于远程自动化程序集成非常重要。关更详细的参数与安全增强,请参考以下章节:

  • 第3章玩转容器,配置文件的使用这一节

  • 第7章高级集群管理,认证与授权这一节