使用Kubernetes API
Kubernetes API通過HTTP提供基于資源(RESTful)的編程接口,支持通過標(biāo)準(zhǔn)HTTP請求(POST、PUT、PATCH、DELETE、GET)進(jìn)行查詢、創(chuàng)建、更新和刪除各類集群資源。您可以通過curl命令或其他編程方式使用Kubernetes API。本文通過示例介紹如何通過curl命令管理Pod和Deployment。
獲取集群訪問憑證KubeConfig
單擊前往RAM進(jìn)行授權(quán)進(jìn)入云資源訪問授權(quán)頁面,然后單擊同意授權(quán)。
完成以上授權(quán)后,刷新控制臺(tái)即可使用容器服務(wù)ACK。
在控制臺(tái)左側(cè)導(dǎo)航欄,單擊集群。
在集群列表頁面,單擊目標(biāo)集群名稱或者目標(biāo)集群右側(cè)操作列下的詳情。
單擊連接信息頁簽,查看集群訪問憑證(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
執(zhí)行以下命令查看當(dāng)前集群中所有Namespaces。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces
通過curl命令管理Pod和Deployment常見示例操作如下。
Pod常見操作
執(zhí)行以下命令查看default命名空間下的所有Pods。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods
執(zhí)行以下命令創(chuàng)建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
執(zhí)行以下命令創(chuàng)建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
執(zhí)行以下命令查詢Pod狀態(tài)。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx
執(zhí)行以下命令查詢Pod日志。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx/log
執(zhí)行以下命令查詢Pod的metrics數(shù)據(jù)(通過metric-server API)。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx
執(zhí)行以下命令刪除Pod。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx -X DELETE
Deployment常見操作
創(chuàng)建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
執(zhí)行以下命令查看Deployment。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments
執(zhí)行以下命令更新Deployment(修改replicas副本數(shù)量)。
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}}'
執(zhí)行以下命令更新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"}]}}}}'