Kubernetes API は、HTTP を介して提供されるリソースベース (RESTful) のプログラミングインターフェイスであり、POST、PUT、PATCH、DELETE、GET などの標準 HTTP メソッドをサポートしています。これらのメソッドを使用して、クラスターリソースのクエリ、作成、更新、および削除を行うことができます。 cURL コマンドまたはその他のプログラミングメソッドを実行することで、Kubernetes API を呼び出すことができます。このトピックでは、cURL コマンドを使用してポッドとデプロイメントを管理する方法について、例を挙げて説明します。
kubeconfig ファイルでクラスタークレデンシャルを取得する
ACK コンソール にログインします。
警告が表示された場合は、[RAM コンソールに移動] をクリックして RAM クイック承認 ページに移動し、[承認] をクリックします。
上記の承認が完了したら、コンソールを更新して ACK を使用します。
左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックするか、[アクション] 列の [詳細] をクリックします。クラスターの詳細ページが表示されます。
クラスターの詳細ページで、[接続情報] タブをクリックします。 [kubeconfig] ファイルにクラスタークレデンシャルがあります。 [kubeconfig] ファイルの内容をコピーし、オンプレミスマシンに保存します。
次のコマンドを実行して、認証局 (CA)、秘密鍵、および API サーバーに関する情報を取得します。
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 を呼び出す
次のコマンドを実行して、クラスター内のすべての名前空間をクエリします。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespacescURL コマンドを使用してポッドとデプロイメントを管理するための一般的な操作は次のとおりです。
ポッドを管理するための一般的な操作
次のコマンドを実行して、デフォルトの名前空間内のすべてのポッドをクエリします。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods次のコマンドを実行して、ポッドを作成します (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次のコマンドを実行して、ポッドを作成します (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次のコマンドを実行して、ポッドのステータスをクエリします。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx次のコマンドを実行して、ポッドのログデータをクエリします。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx/logmetric-server API を使用して、次のコマンドを実行し、ポッドのメトリックを収集します。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx次のコマンドを実行して、ポッドを削除します。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods/nginx -X DELETEデプロイメントを管理するための一般的な操作
次の 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次のコマンドを実行して、デプロイメントをクエリします。
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments複製されたポッドの数を変更することで、デプロイメントを更新するには、次のコマンドを実行します。
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}}'コンテナイメージを変更することで、デプロイメントを更新するには、次のコマンドを実行します。
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"}]}}}}'