[入門]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 -
ヘルプを表示
# ヘルプ表示
$ kubectl -h
kubectl controls the Kubernetes cluster manager.
Find more information at: https://kubernetes.io/docs/reference/kubectl/overview/
Basic Commands (Beginner):
create Create a resource from a file or from stdin
expose Take a replication controller, service, deployment or pod and expose it as a new Kubernetes service
run Run a particular image on the cluster
set Set specific features on objects
Basic Commands (Intermediate):
explain Get documentation for a resource
get 1つまたは複数のリソースを表示する
edit Edit a resource on the server
delete Delete resources by file names, stdin, resources and names, or by resources and label selector
Deploy Commands:
rollout Manage the rollout of a resource
scale Set a new size for a deployment, replica set, or replication controller
autoscale Auto-scale a deployment, replica set, stateful set, or replication controller
Cluster Management Commands:
certificate Modify certificate resources.
cluster-info Display cluster information
top Display resource (CPU/memory) usage
cordon Mark node as unschedulable
uncordon Mark node as schedulable
drain Drain node in preparation for maintenance
taint Update the taints on one or more nodes
Troubleshooting and Debugging Commands:
describe Show details of a specific resource or group of resources
logs Print the logs for a container in a pod
attach Attach to a running container
exec Execute a command in a container
port-forward Forward one or more local ports to a pod
proxy Run a proxy to the Kubernetes API server
cp Copy files and directories to and from containers
auth Inspect authorization
debug Create debugging sessions for troubleshooting workloads and nodes
Advanced Commands:
diff Diff the live version against a would-be applied version
apply Apply a configuration to a resource by file name or stdin
patch Update fields of a resource
replace Replace a resource by file name or stdin
wait Experimental: Wait for a specific condition on one or many resources
kustomize Build a kustomization target from a directory or URL.
Settings Commands:
label リソースのラベルを更新する
annotate リソースのアノテーションを更新する
completion Output shell completion code for the specified shell (bash or zsh)
Other Commands:
api-resources Print the supported API resources on the server
api-versions Print the supported API versions on the server, in the form of "group/version"
config kubeconfigを変更する
plugin Provides utilities for interacting with plugins
version Print the client and server version information
Usage:
kubectl [flags] [options]
Use "kubectl <command> --help" for more information about a given command.
Use "kubectl options" for a list of global command-line options (applies to all commands).
kubectl explain
: リソースのドキュメントを表示します
# リソース「deployment」のドキュメントを表示
$ kubectl explain deployment
KIND: Deployment
VERSION: apps/v1
DESCRIPTION:
Deployment enables declarative updates for Pods and ReplicaSets.
FIELDS:
apiVersion <string>
APIVersion defines the versioned schema of this representation of an
object. Servers should convert recognized schemas to the latest internal
value, and may reject unrecognized values. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
kind <string>
Kind is a string value representing the REST resource this object
represents. Servers may infer this from the endpoint the client submits
requests to. Cannot be updated. In CamelCase. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
metadata <Object>
Standard object's metadata. More info:
https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
spec <Object>
Specification of the desired behavior of the Deployment.
status <Object>
Most recently observed status of the Deployment.
# 利用可能なAPIリソースの一覧を表示
$ kubectl api-resources
Discussion