広告

kubernetesの基本操作

infrastructure as code

k8sリソースの説明を始まる前に、k8sリソース操作の仕組みを説明しないと、リソースを説明してもどうやって作るの?になって、ピンとこないかもしれないので、まず簡単に仕組みの説明を入れさせていただきたいと思います。

k8sクラスタへの操作

前回k8sのノードについて、説明した通、k8sでは、Kubernetes Masterノードに対して命令を出して、k8sクラスタを操作する流れになります。

Kubernetes MasterのAPIはREST APIで実装されているため、直接RESTAPIでの操作も可能です。
ただ、RESTAPIですべての操作をすると、すごく複雑になってしまいます。

そこで、Kubernetesは専用のコマンドツールが用意されています。
その名は、kubectlコマンドラインです。

kubectlのインストール

kubectlを使うには、まずクライアント(k8s操作に使うPC)にkubectlをインストールする必要があります。
インストール方法はここでは割愛しますが、参考情報をお出しします。

kubectlのインストール

※ GCPの場合は、cloudshellのコンソールにデフォルトで入っていますので、そのまま使用可能です。

k8sクラスタへの接続

GCPのcloudshellを使用してk8sを操作する場合、操作するGKE(k8sクラスタ)を指定するには、以下のコマンドを使用します。

# kubectl の操作対象の GKE を指定する
gcloud container clusters get-credentials <GKEクラスタ名> [--region=<GKEのRegion>] [--zone=<GKEのZone>]

# 操作対象を確認する
kubectl config current-context

※注意:操作対象が間違いのないように、操作対象の確認を心がけましょう。

GKEに関する他のコマンドについて知りたい方は、公式ドキュメントを確認しましょう。

GCP以外の環境は接続方法いが違いますので、環境に合わせて確認してから使いましょう。

k8sリソースの作成について

k8sの接続ができたら、k8sクラスタへの操作ができるようになります。

k8sでは、リソースの作成は作成コマンドで作成する方法と、manifestファイル(設定ファイル)を適用して作成する方法があります。作成コマンドでの作成は、手間がかかりますし、設定内容はわかりずらいなど多くのデメリットがあります。

k8sとしては、後者のmanifestファイルを適用して作成する方法を推奨しています。

manifestファイル(マニフェスト)とは

manifestファイルは、リソースの設定を事前に定義するファイルです。
DockerのDockerfileと似たような感じになります。

このmanifestのおかげで、Infrastructure as Codeやどこでも同じ環境が作れることを実現できるようになります。

では、manifestってどんなものでしょうか?どう書けばいいでしょうか?

manifestファイル の例

manifestはyaml形式で書かれている設定ファイルです。

じゃ、yamlって何なの?って思っている方もいるかと思いますので、簡単に説明すると、ファイル形式の一種です、中身は平分でデータを書かれていて、拡張子がyamlymlのファイルのことです。

ちなみに、JSONファイル(yamlと似ているもう一種類のファイル)と書き方が違うが、用途は似ています。

説明だけではピンとこないと思いますので、k8sのDeploymentリソースを作成に使うmanifestを例でコメントで説明していきます。

#の後ろの内容はコメントです。

サンプルコード

apiVersion: apps/v1  # apiVersion属性の値が apps/v1
kind: Deployment  # kind属性(リソースの種類)の値が Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx  # metadata.labels.app(.は階層構造を意味する)の値が nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

manifestが何なのかはお分かりいただけましたでしょうか。

それでは、続きを行きましょうか。

k8sリソースの作成

k8sで推奨するリソースの作成方法はmanifestファイルを使っての作成ですが、manifestの使い方がわからないと、意味がないですよね。

実は、使い方はすごくシンプルです。方法は以下の2種類があります。

  • manifest通りにリソース作成:kubectl create -f <manifestファイルのパス>
  • manifestを適用する(推奨):kubectl apply -f <manifestファイルのパス>

createとapplyはリソース作成するという意味で、どちらでもリソースの作成が可能です。
ただ、k8sはローリングアップデート可能なプラットフォームとして、以前設定した時の履歴は残すべきです。

createはリソースを作成するだけで、履歴はデフォルトでは残らないに対して、applyの方は履歴を残してくれます。
kubectl create--save-configオプションを付けるとapplyと同じ効果が実現できます。--save-configはannotationに履歴を保存する意味です。

さらに、applyは作成だけではなく、リソースの更新にも使えますので、一つのコマンドだけで何でもできる感じです。

そういうわけで、kubectl apply -f <manifestファイルのパス> はお勧めします。

kubectl applyの仕組み

kubectl applyコマンドは基本前回のmanifest内容(履歴)と今回適用するmanifestの内容を見比べて、追加や更新のリソースがあれば、追加で作成する動作をします。

前回のmanifest内容はmetadata.annotations.kubectl.kubernetes.io/last-applied-configurationに保存されています。

kubectl applyは追加と変更だけ反映しますが、もし減った分も削るようにしたいであれば、以下のオプション付きで実行するといいです。

kubectl apply --prune -f <manifestファイルのパス>

複数のmanifest同時適用

複数manifestファイルを適用する

  • kubectl apply -f <manifestファイルのパス> -f <manifestファイルのパス>...

ディレクトリ内のすべてmanifestファイルを適用する

  • kubectl apply -f <ファイルディレクトリ>

ディレクトリ内再帰的にすべてのmanifestファイルを適用する

  • kubectl apply -f <ファイルディレクトリ> -R

複数のリソースをまとめて一個のmanifestにまとめて書く

manifest内で、---文字でリソースの記述を分けることができます。
作成はmanifest内容の上から下へ順番に作成していきます。

k8sリソースの削除

k8sリソースの削除は基本kubectl deleteコマンドを使用します。

よく使われるパターンを以下でまとめます。

# ファイル(manifest或いはjson)で指定されたタイプと名前を使用してPodを削除します
kubectl delete -f <ファイルのパス>

# 名前が「bar」と「foo」のpodとServiceを削除する
kubectl delete pod,service bar foo

# ラベルが「name=myLabel」のpodとserviceを削除する。-lはラベル指定。
kubectl delete pods,services -l name=myLabel

# 「my-ns」のNamespaceにあるすべてのpodとserviceを削除する。-nはNamespace指定。--allはすべて。
kubectl -n my-ns delete pod,svc --all

# awkコマンドのpattern1またはpattern2に一致するすべてのPodを削除します。
kubectl get pods -n my-ns --no-headers=true | awk '/pattern1|pattern2/{print $1}' | xargs  kubectl delete -n my-ns pod

その他のコマンド

参考:

kubectlチートシート
このページには、一般的によく使われるkubectlコマンドとフラグのリストが含まれています。 Kubectlコマンドの補完 BASH source > ~/.bashrc # bashシェルでのコマンド補完を永続化するために.bashrcに追記します。 また、エイリアスを使用している場合にもkubectlコマンドを補完...

最後に

以上で、k8sで基本な使い方を簡単に説明しました。
kubectlのコマンドは沢山ありますが、環境構築に一番使うのはkubectl applyです。
その他のコマンドについては、今後の説明していくうちに、内容を入れようと思います。

コメント

タイトルとURLをコピーしました