[入門]kubectlの概要
概要
kubectlについて個人的備忘録として下記の公式ドキュメントの内容をまとめていきます。
具体的にはkubectl
の概要、インストール方法、構文、コマンド操作、具体例についてみていきます。
参考
kubectlとは
KubernetesAPIを利用したKubernetes clusterのcontrole planeと通信するためのCLIツールがkubectl
です。
kubectlをインストール
ここではmacOSを対象としたインストール方法についてまとめていきます。
参考
インストール方法
- curlによるkubectl binaryをインストール
- Homebrewを使ったインストール
- Macportsを使ったインストール
今回はHomebrewを使ってインストールしていきます。
$ brew install kubectl
or
$ brew install kubernetes-cli
インストール完了後、バージョンを確認します。
$ kubectl version --client
Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.5", GitCommit:"5c99e2ac2ff9a3c549d9ca665e7bc05a3e18f07e", GitTreeState:"clean", BuildDate:"2021-12-16T08:38:33Z", GoVersion:"go1.16.12", Compiler:"gc", Platform:"darwin/amd64"}
kubectlの設定を検証
Kubernetesクラスターを見つけてアクセスするために、kubeconfig fileが必要です。このファイルはkube-up.shを利用してクラスターを作成した際やMinikube
のデプロイ成功時に自動で作成されます。
デフォルトではkubectlの設定は~/.kube/config
に格納されます。
正しく設定されていることを確かめるには次のコマンドを実行します。
$ kubectl cluster-info
コマンド実行後、URLが返却されれば、クラスタに接続するための設定が正しく行われていることを確認できます。
次のようなメッセージが表示された場合は、正しく設定されていないかKubernetesクラスターにアクセスすることができません。
$ kubectl cluster-info
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
The connection to the server localhost:8080 was refused - did you specify the right host or port?
kubeconfigファイル
kubeconfigファイルはクラスターやユーザー、namespace,そして認証に関する設定を行います。
kubectl
はkubeconfigファイルを利用してクラスターを選択しクラスターのAPIサーバーと通信します。
kubectl
はデフォルトで$HOME/.kube
ディレクトリ下のファイルconfig
を探します。
環境変数KUBECONFIG
または設定フラグ--kubeconfig
を利用してそのほかのkubeconfigファイルを指定することもできます。
次のコマンドで現在のconfigの設定内容を確認できます
$ kubectl config view
複数のクラスター、ユーザー、認証メカニズム
kubeconfigファイルを利用することで、複数のクラスター、ユーザー、namespaceを管理することができます。そして Context
(後述)を利用することでクラスターとnamespaceを素早く切り替えることができます。
Context
kubeconfigファイルのcontext
要素はアクセスパラメータをグループ化するために使われます。
それぞれのcontextは3つのパラメータ:cluster
, namespace
, user
を持ちます。
デフォルトで、kubectl
コマンドはcurrent context
で指定されたパラメータを使ってクラスターと通信します。
current context
を選択するには次のコマンドを実行します
# Contextの一覧を表示
$ kubectl config get-contexts
# 指定したcontextに切り替え
$ kubectl config use-context {Context名}
# 現在のcontextを表示
$ kubectl config current-context
又、--context
オプションを利用することで各コマンドの実行ごとにContextを指定することもできます。
$ kubectl --context {context名} get pod
kubectlの構文
kubectl [command] [TYPE] [NAME] [flags]
-
command
: 1つ以上のリソースに対して実行したオペレーションを指定します。
ex)create
,get
,describe
,delete
-
TYPE
: resorce typeを指定します。リソースタイプは大文字小文字を区別せず、単数形や複数形、省略形を指定できます。例えば次のコマンドは同じ結果になります。
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
-
NAME
: リソース名を指定します。大文字小文字は区別します。nameを省略した場合、全てのリソースの詳細が表示されます。ex)kubectl get pods
複数のリソースに対して操作を行う場合は、各リソースをタイプと名前で指定するか、1つまたは複数のファイルを指定できます。- リソースと名前で指定する場合
- タイプがすべて同じとき、リソースをグループ化するには→
TYPE1 name1 name2 name<#>
とします。
ex)kubectl get pod example-pod1 example-pod2
- 複数のリソースタイプを個別に指定する場合→TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
とします。
ex)kubectl get pod/example-pod1 replicationcontroller/example-rc1
- タイプがすべて同じとき、リソースをグループ化するには→
- リソースを1つ以上のファイルで指定する場合→ -f file1 -f file2 -f file<#>とします。
ex)kubectl get -f ./pod.yaml
- リソースと名前で指定する場合
-
flags
:オプショナルなフラグを指定します。例えば、-s
または--server
フラグでKubernetes API serverのアドレスとポートを指定できます。
操作
以下の表にkubectl
コマンドで利用可能な操作から抜粋したものを紹介します。
操作 | 構文 | 説明 |
---|---|---|
alpha | kubectl alpha SUBCOMMAND [flags] | α版の機能に該当するコマンドを一覧表示します。 |
apply | kubectl api-resources [flags] | ファイルまたは標準入力からリソースの設定変更を適用します |
auth | kubectl auth [flags] [options] | 認可を検査します。 |
config | kubectl config SUBCOMMAND [flags] | kubeconfigファイルを変更します |
create | kubectl create -f FILENAME [flags] | ファイルまたは標準入力から1つ以上のリソースを作成します。 |
delete | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] | ファイル、標準出力、またはラベルセレクター、リソースセレクター、リソースを指定して、リソースを削除します |
describe | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] | 一つ以上のリソースの詳細なステータスを表示します。 |
diff | kubectl diff -f FILENAME [flags] | ファイルまたは標準出力と、現在の設定との差分を表示します。 |
exec | kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [-- COMMAND [args...]] | pod内のコンテナに対してコマンドを実行します |
expose | kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [--port=port] [--protocol=TCP|UDP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [flags] | ReplicationController、Service又はPodを、新しいKubernetesサービスとして公開します。 |
get | kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] | 1つ以上のリソースを表示します。 |
logs | kubectl logs POD [-c CONTAINER] [--follow] [flags] | pod内のコンテナのログを表示します |
top | kubectl top [flags] [options] | リソース (CPU/Memory/Storage) の使用量を表示します |
その他完全の一覧とその詳細は次のそれぞれの資料を参考ください。
- https://kubernetes.io/docs/reference/kubectl/#operations
- https://kubernetes.io/docs/reference/kubectl/kubectl/
一般的な操作例
kubectl apply
# Create a service using the definition in example-service.yaml.
kubectl apply -f example-service.yaml
# Create a replication controller using the definition in example-controller.yaml.
kubectl apply -f example-controller.yaml
# Create the objects that are defined in any .yaml, .yml, or .json file within the <directory> directory.
kubectl apply -f <directory>
kubectl get
# List all pods in plain-text output format.
kubectl get pods
# List all pods in plain-text output format and include additional information (such as node name).
kubectl get pods -o wide
# List the replication controller with the specified name in plain-text output format. Tip: You can shorten and replace the 'replicationcontroller' resource type with the alias 'rc'.
kubectl get replicationcontroller <rc-name>
# List all replication controllers and services together in plain-text output format.
kubectl get rc,services
# List all daemon sets in plain-text output format.
kubectl get ds
# List all pods running on node server01
kubectl get pods --field-selector=spec.nodeName=server01
kubectl describe
# Display the details of the node with name <node-name>.
kubectl describe nodes <node-name>
# Display the details of the pod with name <pod-name>.
kubectl describe pods/<pod-name>
# Display the details of all the pods that are managed by the replication controller named <rc-name>.
# Remember: Any pods that are created by the replication controller get prefixed with the name of the replication controller.
kubectl describe pods <rc-name>
# Describe all pods
kubectl describe pods
kubectl exec
# Get output from running 'date' from pod <pod-name>. By default, output is from the first container.
kubectl exec <pod-name> -- date
# Get output from running 'date' in container <container-name> of pod <pod-name>.
kubectl exec <pod-name> -c <container-name> -- date
# Get an interactive TTY and run /bin/bash from pod <pod-name>. By default, output is from the first container.
kubectl exec -ti <pod-name> -- /bin/bash
kubectl logs
# Return a snapshot of the logs from pod <pod-name>.
kubectl logs <pod-name>
# Start streaming the logs from pod <pod-name>. This is similar to the 'tail -f' Linux command.
kubectl logs -f <pod-name>
kubectl diffs
# Diff resources included in "pod.json".
kubectl diff -f pod.json
# Diff file read from stdin.
cat service.yaml | kubectl diff -f -
Author And Source
この問題について([入門]kubectlの概要), 我々は、より多くの情報をここで見つけました https://zenn.dev/sasakiki/articles/e6f9196f9c463d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol