如何从 REST 创建 Pod API
How to create Pod from REST API
如何使用 REST 创建 Pod API?
我查看了 Kubernetes API 文档:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/#-strong-write-operations-strong--54
他们正在写作需要使用POST请求:
POST /api/v1/namespaces/{namespace}/pods
我有这个简单的 nginx pod 的 YAML:
cat > nginx-pod.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: nginx1
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
EOF
需要将 YAML 文件转换为 JSON 文件:
cat > nginx-pod.json <<EOF
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "nginx1"
},
"spec": {
"containers": [
{
"name": "nginx",
"image": "nginx:1.7.9",
"ports": [
{
"containerPort": 80
}
]
}
]
}
}
EOF
像这样使用 curl 命令:
curl -k -v -X POST -H "Authorization: Bearer <JWT_TOKEN>" -H "Content-Type: application/json" https://127.0.0.1:6443/api/v1/namespaces/default/pods -d@nginx-pod.json
当然,您使用的token应该有创建pod的权限。
如果有人有办法在不转换为 JSON 的情况下做到这一点,请分享。
根据作者的要求添加答案。
我们可以直接使用Yaml文件如下。
curl -k -X POST -H 'Content-Type: application/yaml' \
-H "Authorization: Bearer <JWT_TOKEN>" --data '
apiVersion: v1
kind: Pod
metadata:
name: nginx1
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
' "https://127.0.0.1:6443/api/v1/namespaces/default/pods"
一件奇怪的事情是,如果我尝试在 curl 的数据 (@file.yaml) 中传递 YAML 文件,它会抛出一个错误。似乎 YAML 内容类型不接受二进制因此我使用 cat
来传递内容。
所以下面的也行。
curl -k -X POST -H 'Content-Type: application/yaml' -H "Authorization: Bearer <JWT_TOKEN>"\
--data "$(cat nginx-pod.yaml)" "https://127.0.0.1:6443/api/v1/namespaces/default/pods"
参考:
- Kubernetes API reference
- Kubernetes Deployment curl example - 示例1是基于此创建的。
如何使用 REST 创建 Pod API?
我查看了 Kubernetes API 文档:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/#-strong-write-operations-strong--54
他们正在写作需要使用POST请求:
POST /api/v1/namespaces/{namespace}/pods
我有这个简单的 nginx pod 的 YAML:
cat > nginx-pod.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
name: nginx1
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
EOF
需要将 YAML 文件转换为 JSON 文件:
cat > nginx-pod.json <<EOF
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"name": "nginx1"
},
"spec": {
"containers": [
{
"name": "nginx",
"image": "nginx:1.7.9",
"ports": [
{
"containerPort": 80
}
]
}
]
}
}
EOF
像这样使用 curl 命令:
curl -k -v -X POST -H "Authorization: Bearer <JWT_TOKEN>" -H "Content-Type: application/json" https://127.0.0.1:6443/api/v1/namespaces/default/pods -d@nginx-pod.json
当然,您使用的token应该有创建pod的权限。
如果有人有办法在不转换为 JSON 的情况下做到这一点,请分享。
根据作者的要求添加答案。
我们可以直接使用Yaml文件如下。
curl -k -X POST -H 'Content-Type: application/yaml' \
-H "Authorization: Bearer <JWT_TOKEN>" --data '
apiVersion: v1
kind: Pod
metadata:
name: nginx1
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
' "https://127.0.0.1:6443/api/v1/namespaces/default/pods"
一件奇怪的事情是,如果我尝试在 curl 的数据 (@file.yaml) 中传递 YAML 文件,它会抛出一个错误。似乎 YAML 内容类型不接受二进制因此我使用 cat
来传递内容。
所以下面的也行。
curl -k -X POST -H 'Content-Type: application/yaml' -H "Authorization: Bearer <JWT_TOKEN>"\
--data "$(cat nginx-pod.yaml)" "https://127.0.0.1:6443/api/v1/namespaces/default/pods"
参考:
- Kubernetes API reference
- Kubernetes Deployment curl example - 示例1是基于此创建的。