赞
踩
k8s API Server提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。
kubernetes API Server的功能:
kube-apiserver工作原理图
配置文件(/etc/kubernetes/manifests/kube-apiserver.yaml)
ks8官网文档
由于k8s的Api是基于REST的设计思想,因此,不同种类的HTTP请求也就对应了不同的操作。比较常用的对应关系是:
有多种方式可以访问 Kubernetes 提供的 REST API。
# 可以看到"serverAddress":"192.168.0.113:6443"
$ kubectl get --raw /api/
$ kubectl get --raw /api/v1
$ kubectl get --raw /api/v1/namespaces
# 先起代理端口
$ kubectl proxy --port=8080 &
# 查看
$ curl http://localhost:8080/api/ '{"versions": ["v1"]}'
1、创建管理员用户,授权,获取token
$ cat << EOF > CreateServiceAccountRoleBinding.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
EOF
执行
$ kubectl apply -f CreateServiceAccountRoleBinding.yaml
$ kubectl get sa -n kube-system admin-user
获取token
$ kubectl describe secret -n kube-system `kubectl get secret -n kube-system|grep admin-user|awk '{print $1}'`|grep '^token:'|awk '{print $2}'
2、生成变量
$ TOKEN=$(kubectl describe secret -n kube-system `kubectl get secret -n kube-system|grep admin-user|awk '{print $1}'`|grep '^token:'|awk '{print $2}')
3、curl请求示例(https)
加-k处理证书问题
# -k 允许curl使用非安全的ssl连接并且传输数据(证书不受信)
$ curl -k --header "Authorization: Bearer $TOKEN" https://192.168.0.113:6443/api
postman下载地址
链接:https://pan.baidu.com/s/1SW86b9LrO7V2ebN0Eb2yhA
提取码:8888
1、取到的token,去访问api
$ kubectl describe secret -n kube-system `kubectl get secret -n kube-system|grep admin-user|awk '{print $1}'`|grep '^token:'|awk '{print $2}'
2、设置Token
3、禁用SSL证书校验(跟上面的curl -k一样)
File->setting->General
4、验证
$ CACERT=/etc/kubernetes/pki/ca.crt
$ curl --cacert $CACERT --header "Authorization: Bearer $TOKEN" https://192.168.0.113:6443/api
1、【增】 创建POST请求:
创建namespace: /api/v1/namespaces
【示例】
$ curl -XPOST -H 'Content-Type:application/json' -d@test001.json -k --header "Authorization: Bearer $TOKEN" https://192.168.0.113:6443/api/v1/namespaces/
json文件
# cat test001.json
{
"kind": "Namespace",
"apiVersion": "v1",
"metadata": {
"name": "test001",
"labels": {
"app": "test001"
}
}
}
验证
$ kubectl get ns test001
2、【删】 删除DELETE请求:
删除namespace: /api/v1/namespaces/{name}
【示例】
$ curl -XDELETE -H 'Content-Type:application/json' -k --header "Authorization: Bearer $TOKEN" https://192.168.0.113:6443/api/v1/namespaces/test001
上面显示命名空间还在,但是是终止的状态,如果想立马删除,可以使用下面的语句删除。
强制删除命名空间,如果命名空间不是test001,记得修改哦。
$ kubectl get namespace test001 -o json \
| tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
| kubectl replace --raw /api/v1/namespaces/test001/finalize -f -
3、【改】 修改PUT/PATCH请求:
修改指定的命名空间: /api/v1/namespaces/{name}
修改指定名称空间的状态: /api/v1/namespaces/{name}/status
如果部分更新可以用 PATCH
【示例】将上面的命名空间修改成test002
# cat test002.yaml
{
"apiVersion": "v1",
"kind": "Namespace",
"metadata": {
"name": "test001",
"labels": {
"name": "development"
}
},
"spec": {
"finalizers": [
"openshift.com/origin",
"kubernetes"
]
},
"status": {
"phase": "Active"
}
}
执行
$ curl -XPUT -H 'Content-Type:application/json' -d@test002.json -k --header "Authorization: Bearer $TOKEN" https://192.168.0.113:6443/api/v1/namespaces/test001
$ kubectl describe ns test001
4、【查】 查询GET请求:
查询全部: /api/v1/namespaces
查询指定namespace: /api/v1/namespaces/{name}
$ curl -XGET -H 'Content-Type:application/json' -k --header "Authorization: Bearer $TOKEN" https://192.168.0.113:6443/api/v1/namespacestest001/
不仅支持json格式,还支持yaml格式
【注意】-H ‘Content-Type: application/yaml’
【示例】
$ curl -XPOST -H 'Content-Type: application/yaml' --data '
apiVersion: v1
kind: Namespace
metadata:
name: test003
' -k --header "Authorization: Bearer $TOKEN" https://192.168.0.113:6443/api/v1/namespaces/
以下讲解的资源api操作,跟上面的类似,就不一一提供示例了。
1、【增】 创建POST请求:
创建pod: /api/v1/namespaces/{namespace}/pods
2、【删】 删除 DELETE请求:
删除pod: /api/v1/namespaces/{namespace}/pods/{name}
3、【改】 修改PUT/PATCH请求:
替换指定的pod: /api/v1/namespaces/{namespace}/pods/{name}
4、【查】(查询) GET请求:
查询全部: /api/v1/namespaces/{namespace}/pods
查询指定pod: /api/v1/namespaces/{namespace}/pods/{name}
1、【增】 创建POST请求:
创建node: /api/v1/nodes
2、【删】 删除 DELETE请求:
删除node: /api/v1/nodes/{name}
3、【改】 修改PUT/PATCH请求:
替换指定的node: /api/v1/nodes/{name}
替换指定node的状态: /api/v1/nodes/{name}/status
4、【查】 查询GET请求:
查询全部: /api/v1/nodes
查询指定node: /api/v1/nodes/{name}
查询指定节点内所有Pod的信息: /api/v1/nodes/{name}/pods/
查询指定节点内物理资源的统计信息: /api/v1/nodes/{name}/stats/
查询指定节点的概要信息: /api/v1/nodes/{name}/spec/
1、【增】 创建POST请求:
创建service: /api/v1/namespaces/{namespace}/services
2、【删】 删除DELETE请求:
删除service: /api/v1/namespaces/{namespace}/services/{name}
3、【改】 修改PUT/PATCH请求:
替换指定的service: /api/v1/namespaces/{namespace}/services/{name}
4、【查】 查询GET请求:
查询全部: /api/v1/namespaces/{namespace}/services
查询指定service: /api/v1/namespaces/{namespace}/services/{name}
~~~ 这里只列举了一小部分常用的接口,更多接口,请查看官方文档 ~~~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。