调用Kubernetes API操作Kubernetes
准备工作
首先要准备一个1.5+版本的Kubernetes,并且开放了API Server的http访问端口8080。本文使用的是1.10的版本,没有环境的可以参考我上一篇文章《在CentOS 7+ 安装Kubernetes入门(单Master)》进行安装。
使用http://master-ip:8080/apis检查API是否能正常访问,这里的master-ip是192.168.132.132。
如果地址无法访问,需要设置Kubernetes开通http访问端口8080。
1. 在Master中进入API Server的启动脚本目录:
cd /etc/kubernetes/manifests/
2. 修改API Server的脚本文件:kube-apiserver.yaml或者kube-apiserver.json。
添加或设置--insecure-bind-address=0.0.0.0、--insecure-port=8080。如下:
重启kubelet:
systemctl daemon-reload
systemctl restart kubelet
3. 打开Swagger(可选)
在kube-apiserver.yaml或者kube-apiserver.json中添加--enable-swagger-ui=true,重启kubelet,然后使用http://master-ip:8080/swagger-ui/进行访问:
更多设置参数请参考:
https://kubernetes.io/docs/reference/generated/kube-apiserver/
创建应用
1. 创建deloyment
nginx-dep.json:
{ "apiVersion": "extensions/v1beta1", "kind": "Deployment", "metadata": { "name": "nginx", "labels": { "app": "nginx" }, "namespace": "default" }, "spec": { "replicas": 1, "template": { "metadata": { "labels": { "app": "nginx" } }, "spec": { "nodeSelector": { "kubernetes.io/role": "node" }, "containers": [ { "name": "nginx", "image": "nginx:1.13", "ports": [ { "containerPort": 80 } ] } ] } } } }
API:POST http://master-ip:8080/apis/extensions/v1beta1/namespaces/{namespace}/deployments:
kubectl get deployment进行检查:
2. 创建service
nginx-svc.json:
{ "kind": "Service", "apiVersion": "v1", "metadata": { "name": "nginx", "labels": { "app": "nginx" }, "namespace": "default" }, "spec": { "selector": { "app": "nginx" }, "type": "NodePort", "ports": [ { "name": "nginx", "nodePort": 30000, "port": 80, "protocol": "TCP", "targetPort": 80 } ] } }
API:POST http://master-ip:8080/api/v1/namespaces/{namespace}/services:
kubectl get service进行检查:
使用Node1的地址http://192.168.132.130:30000/进行访问:
补充说明
Kubernetes高版本其实更建议使用https的协议来操作API Server,即https://master-ip:6443/,而且默认是开放的:
但是https的认证与授权当前我还没有弄清楚,因此,没有写在这篇文章,或许后续会补上。不过,Kubernetes推出了Helm,用Helm可以更方便地操作Kubernetes,我后续会介绍如何使用Helm。