Help us understand the problem. What is going on with this article?

kubernetes : kubectlコマンド一覧

よく使うkubernetesのkubectlコマンド一覧

1) podを作成

kubectl create --save-config -f [Pod定義ファイル]

または

kubectl apply -f [Pod定義ファイル]

とりあえずapplyにしておくのがベター。
applyの場合は、前回実行時とのyaml設定の差分を抽出して、
その差分を反映するらしく、createたけで作成すると差分抽出の
ための履歴情報がないため、createだけの後のapplyではエラーとなる。
ただし、create --save-configとしておけばcreateでもOK。

2) rs(Replica Set)を作成

kubectl create --save-config -f [rs定義ファイル]

or

kubectl apply -f [rs定義ファイル]

rsを作成すると、複数のpodを一括管理できる。また、いくつpodを起動するかを規定し、podが停止すると、自動的に規定数のpodにリカバリしてくれる。

Replication Controllerは初期のkindで、現在はReplicaSetが代替え。
ただしほとんど機能の差分はない。
さらに、ReplicaSetのラッパー的な上位レイヤーに位置するDeployment
を利用することが推奨されている。
DeploymentはバックエンドでReplicaSetを利用し、さらにローリングアップデート
などをカバーしてくれるらしい。

https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/

3) Serviceを作成

kubectl create -f [Service定義ファイル]

Pod(コンテナ)を外部と通信させる場合はServiceを定義する。Serviceがプロキシとなり、例えばホストアドレス:Portへのアクセスを、Podの接続先内部アドレス:Portに変換し、相互接続が可能となる。

4) pod一覧を確認

kubectl get pod

$ kubectl get pod
NAME                   READY     STATUS    RESTARTS   AGE
jenkins-lf3br          1/1       Running   0          3d

STATUS
Running: 稼働中
Pending: Pod起動待ち
ImageNotReady: dockerイメージ取得中
PullImageError: dockerイメージ取得失敗
CreatingContainer: Pod(コンテナ)起動中
Error: エラー
etc.

-o wide
オプションで、各Podの実行ホストIPも表示できる

-o yaml [pod名]
オプションで、指定podのyamlを確認できる

-L [ラベル名]
オプションで、指定ラベルキーと値も出力

-l [ラベルフィルタ条件]
オプションで、指定ラベル条件でフィルタ可能

-n [NameSpace名]
オプションで、NameSpaceを指定して実行

-A
オプションで、全NameSpaceの結果を取得

5) rs(Replica Set)一覧を確認

Replication Controllerの場合は

kubectl get rs

ReplicaSetの場合は

kubectl get rs

Deploymentの場合は

kubectl get deploy

6) svc(Service)一覧を確認

kubectl get svc

7) podを削除

kubectl delete pod [Pod名]

または

kubectl delete -f [作成時のPod定義ファイル]

強制的にすぐ削除したい場合は以下オプション
—grace-period 0 —force

8) rs(Replica Set)を削除

kubectl delete rs [rs名]

または

kubectl delete -f [作成時のyaml定義ファイル]

※rsで作成されたpodを個別に削除しても、rsがpodを自動再生成するので、rs自体を削除する必要がある

※Replication Controllerの場合は rc

9) svc(Service)を削除

kubectl delete svc [svc名]

または

kubectl delete -f [作成時のsvc定義ファイル]

10) ログの確認

kubectl logs [pod名]

-fオプションで、tail -f 相当のリアルタイムフォロー出力

--sinse=1hオプションで、最新1時間以内を抽出

--tail=10オプションで、最新10件を抽出

--timestamps=trueオプションで、タイムスタンプ付与

11) pod/rc/rs/svcの詳細を確認する

kubectl describe [Pod名/rc名/rs名/svc名]

12) 起動したPodにログインする

kubectl exec -it [コンテナ名] /bin/bash

ログオフする時はexitコマンド
各種オプション
-i:コンテナへ標準入力(STDIN)を渡す
-t:標準入力(STDIN)をTTY(コンソール入力)とする

13) Podの環境変数を確認

kubectl exec [Pod名] env

14) Podのマウントされたボリュームを確認

kubectl exec [Pod名] ls /[Path]

15) Pod(コンテナ)上でコマンドを実行

kubectl exec [Pod名] [コマンド]

例)

$kubectl get pod
NAME                   READY     STATUS           RESTARTS   AGE
nginx                  1/1       Running          0          6m

$kubectl exec nginx echo "Hello"
Hello

16) コンテナ(Pod)の複製数を変更(Scale)する

kubectl scale rs [rs名] --replicas=[数]

現状のレプリカ数が1で、上記で3を指定すると、新たに2個追加される

Replication Controllerの場合は rs → rc
deploymentの場合は rs → deployment

Autoscaleの場合

kubectl autoscale deployment [deployment名] --cpu-percent=[目標CPU%] --min=[最小レプリカ数] --max=[最大レプリカ数]

17) リソース消費量確認(top)

workerノードとpodのリソース消費量(CPU/MEMORY)を確認できる

kubectl top node

kubectl top pod

18) workerノードを安全に切り離し

kubectl drain [ノード名]

稼働中のpodが順次evictedされた後に、切り離される

19) ホストからPod内にファイルをコピー

kubectl cp ./[file] [pod NAME]:[格納先パス]

※docker cpと同じ

20) ワンライナーでコンテナ起動

yamlを使わずにサクッと作りたい場合

①Pod

kubectl run [作成するコンテナ名] --image=[イメージ:タグ]

他にもオプションあり

--restart=[再開ルール:Always, OnFailure, Never]

--port=[ポート]

--replicas=[レプリカ数]

--schedule=[CronTab用のルール]

--limits=[CPU/Memのリソース上限]

などなど

②deployment

kubectl create deployment [名前] --image=[コンテナイメージ]

21) ワンライナーでサービス起動

yamlを使わずにサクッと作りたい場合

kubectl expose deployment [公開対象のコンテナ(deployment)] --type=LoadBalancer

※オプション

ターゲットdeploymentにフォワーディングする際のFrom/ToのPortを指定
--port=80
--target-port=8080

公開対象のdeploymentにLBする外部IPをもつServiceが生成される
外部からアクセスするためのExternalIPは下記で確認可能

$kubectl get services

NAME         TYPE           CLUSTER-IP   EXTERNAL-IP    PORT(S)        AGE
test-app     LoadBalancer   10.0.XX.XX   35.225.XX.XX   80:30133/TCP   1m0s

21) イメージの更新(Rolling Update)

kubectl set image deployment [デプロイメント名] [イメージ名]=[イメージ名]:[タグ]

例)

kubectl set image deployment nginx nginx=nginx:1.9.1

これで、nginxイメージを1.9.1にローリングアップデートしてくれる

https://cloud.google.com/kubernetes-engine/docs/how-to/updating-apps?hl=ja

ただし、yamlベースで管理するなら、kubectl apply で更新した方が良い

suzukihi724
各種備忘録
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした