Kubernetes API通过HTTP提供基于资源(RESTful)的编程接口,支持通过标准HTTP请求(POST、PUT、PATCH、DELETE、GET)进行查询、创建、更新和删除各类集群资源。您可以通过curl命令或其他编程方式使用Kubernetes API。本文通过示例介绍如何通过curl命令管理Pod和Deployment。
获取集群访问凭证KubeConfig
登录容器服务管理控制台。
单击前往RAM进行授权进入云资源访问授权页面,然后单击同意授权。
完成以上授权后,刷新控制台即可使用容器服务ACK。
在控制台左侧导航栏,单击集群。
在集群列表页面,单击目标集群名称或者目标集群右侧操作列下的详情。
单击连接信息页签,查看集群访问凭证(KubeConfig),将KubeConfig文件保存到本地。
使用以下命令从KubeConfig文件中提取CA、Key和APIServer信息。
cat ./kubeconfig |grep client-certificate-data | awk -F ' ' '{print $2}' |base64 -d > ./client-cert.pem cat ./kubeconfig |grep client-key-data | awk -F ' ' '{print $2}' |base64 -d > ./client-key.pem APISERVER=`cat ./kubeconfig |grep server | awk -F ' ' '{print $2}'`
使用curl命令操作Kubernetes API
执行以下命令查看当前集群中所有Namespaces。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces
通过curl命令管理Pod和Deployment常见示例操作如下。
Pod常见操作
执行以下命令查看default命名空间下的所有Pods。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods
执行以下命令创建Pod(JSON格式)。
cat nginx-pod.json
{
"apiVersion":"v1",
"kind":"Pod",
"metadata":{
"name":"nginx",
"namespace": "default"
},
"spec":{
"containers":[
{
"name":"nginx",
"image":"nginx:alpine",
"ports":[
{
"containerPort": 80
}
]
}
]
}
}
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods -X POST --header 'content-type: application/json' -d@nginx-pod.json
执行以下命令创建Pod(YAML格式)。
cat nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: default
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods -X POST --header 'content-type: application/yaml' --data-binary @nginx-pod.yaml
执行以下命令查询Pod状态。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx
执行以下命令查询Pod日志。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx/log
执行以下命令查询Pod的metrics数据(通过metric-server API)。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx
执行以下命令删除Pod。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx -X DELETE
Deployment常见操作
创建Deployment示例YAML文件如下。
cat nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80
resources:
requests:
cpu: "2"
memory: "4Gi"
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments -X POST --header 'content-type: application/yaml' --data-binary @nginx-deploy.yaml
执行以下命令查看Deployment。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments
执行以下命令更新Deployment(修改replicas副本数量)。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments/nginx-deploy -X PATCH -H 'Content-Type: application/strategic-merge-patch+json' -d '{"spec": {"replicas": 4}}'
执行以下命令更新Deployment(修改容器镜像)。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments/nginx-deploy -X PATCH -H 'Content-Type: application/strategic-merge-patch+json' -d '{"spec": {"template": {"spec": {"containers": [{"name": "nginx","image": "nginx:1.7.9"}]}}}}'