Kubernetes API は、GET、POST、PUT、PATCH、DELETE をサポートする、リソースベースの RESTful な HTTP インターフェイスです。kubectl を使用せずに、プログラムでクラスターリソースのクエリと管理ができます。クライアント証明書で認証し、cURL を使用して API を呼び出し、Pod と Deployment を管理します。
前提条件
開始する前に、以下をご確認ください。
-
ACK クラスターが作成済みであること
-
ACK コンソールにアクセスするための権限があること
-
ローカルマシンに cURL がインストールされていること
kubeconfig からの認証情報の抽出
-
ACK コンソールにログインします。
-
[Go to RAM console] をクリックして、Resource Access Management のクイック承認ページに移動し、[Confirm Authorization Policy] をクリックします。承認後、ACK コンソールを更新します。
-
左側メニューで、[クラスター] をクリックします。
-
[クラスター] ページで、クラスター名をクリックするか、[操作] 列の [詳細] をクリックします。
-
[接続情報] タブをクリックします。[kubeconfig] の内容をコピーし、ローカルに
./kubeconfigとして保存します。 -
kubeconfig ファイルからクライアント証明書、プライベートキー、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}'`これらのコマンドは、証明書データをデコードし、API サーバーの URL を
$APISERVERに格納します。これ以降のすべての cURL コマンドは、これらの認証情報と$APISERVER変数を使用します。
-kフラグは TLS サーバー検証をスキップします。本番環境では、サーバー ID を検証して中間者攻撃を防ぐため、-kを--cacert <path-to-ca.pem>に置き換えます。
Pod の管理
すべての Pod API 呼び出しは、パス $APISERVER/api/v1/namespaces/<namespace>/pods を使用します。
| 操作 | HTTP メソッド | パス |
|---|---|---|
| すべての名前空間を一覧表示 | GET | /api/v1/namespaces |
| すべての Pod を一覧表示 | GET | /api/v1/namespaces/default/pods |
| Pod の作成 | POST | /api/v1/namespaces/default/pods |
| Pod のステータスを取得 | GET | /api/v1/namespaces/default/pods/nginx |
| Pod のログを取得 | GET | /api/v1/namespaces/default/pods/nginx/log |
| Pod のメトリクスを取得 | GET | /apis/metrics.k8s.io/v1beta1/namespaces/default/pods/nginx |
| Pod の削除 | DELETE | /api/v1/namespaces/default/pods/nginx |
クラスター内のすべての名前空間を一覧表示:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces
default 名前空間内のすべての Pod を一覧表示:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/api/v1/namespaces/default/pods
JSON マニフェストから Pod を作成:
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 マニフェストから Pod を作成:
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
Metrics Server API を使用して Pod のメトリクスを取得:
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 API 呼び出しは、パス $APISERVER/apis/apps/v1/namespaces/<namespace>/deployments を使用します。
Deployment の作成:
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
default 名前空間内のすべての Deployment を一覧表示:
curl --cert ./client-cert.pem --key ./client-key.pem -k $APISERVER/apis/apps/v1/namespaces/default/deployments
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": {"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"}]}}}}'
次のステップ
プログラムから cURL 以外でアクセスするには、公式の Kubernetes クライアントライブラリを使用します。
| 言語 | クライアントライブラリ | 例 |
|---|---|---|
| Go | client-go | 参照 |
| Python | client-python | 参照 |
| Java | client-java | 参照 |
サポートされている言語の完全なリストについては、Kubernetes クライアントライブラリをご参照ください。
代替のアクセス方法については、「Kubernetes API を使用したクラスターへのアクセス」をご参照ください。