Kubernetes CORE CONCEPTS – REPLICASETS

ReplicaSetとは 公式サイトでチェック >>> ReplicaSet | Kubernetes

 

■ kubectl get replicaset / kubectl get rs

システム上 ReplicaSetが幾つ存在するか確認。

以下は1つReplicaSetが存在し、new-replica-set に対してPODが4つDESIREDである。

ReplicaSetの出力には次のフィールドが表示:

  • NAMEは、名前空間内にあるReplicaSetの名前の一覧です。
  • DESIREDは、アプリケーションの理想的な レプリカ の値です。これはDeploymentを作成したときに定義したもので、これが 理想的な状態 と呼ばれるものです。
  • CURRENTは現在実行されているレプリカの数です。
  • READYは、ユーザーが使用できるアプリケーションのレプリカの数です。
  • AGEは、アプリケーションが稼働してからの時間です。

 参考 公式サイト>>> Deployment

 

■ kubectl describe replicaset 

Replicasetの詳細を調べるコマンド。Replicasetの名前はnew-replica-setでポッドを作成するために使用されるイメージはbusybox77。

 

■ kubectl describe pod <pod-name>

特定のpod名を指定して詳細を見る。

pod名はkubectl describe replicaset のコマンドでEvents配下のMessageの「Created pod:」に記載されている。

kubectl describe replicaset で「Pods Status: 0 Running」である為、podのEventsの詳細を確認。

Image の”busybox777”が存在しない為エラーとなり、podのステータスがRunningが0となっている。

 

■ kubectl delete pod <pod-name> podを削除した場合どうなるか?

削除されたと思いきや、kubectl get podでpod数を確認すると、減っていないが、削除した名前のpodが無くなっている。

ReplicaSetでは必要な数のPODSが常に実行されるようになっている為削除しても必要な数のpod数に復元される。

 

kubectl create -f <yaml-file> 

既存のYAMLファイルを使用してReplicaSetを作成。

/root配下にあるyamlファイル名を確認

上記の場合version の修正を行う必要がある。

 

■ kubectl explain replicaset version を確認

versionが違うのでviを使用して編集。

再度Replicasetを作成、問題なく作成されるとcreatedと表示される。


新にReplicasetを2のYAMLファイルを使用して作ろうとして以下エラーが表示された場合。

template labelがマッチしないエラーな為、viでtierをnginxに編集すると作成可能。

■kubectl apply -f /root/replicaset-definition-2.yaml

編集したファイルをアプライする場合のコマンド。

 

kubectl delete replicaset/rs <replicaset-name> ReplicaSetの削除

kubectl delete -f <file-name>.yaml

 

kubectl edit rs <replicaset-name> vi以外でも編集可能

上記Readyになってない例としてはimage名を変更すし、既存のpodをすべて削除するとオートで新しいpodが育成されてReadyとなる。

 

■  kubectl scale rs <replicaset-name> --replicas=<replica-number>

Replicaset数の変更

 

Kubernetesのリソース - YAML

YAMLとは?

"Ain’t Markup Language"の略、インデントで構造化データを表現し、ソフトウェアの設定ファイルや異なるソフトウェア間のデータ交換などで使われる。

YAMLの公式サイトは>>> こちら

特徴

  • リスト・ディクショナリから成り立っていてる
  • インデントを用いた階層構造表現
  • インデントにはタブが使えずスペースのみ使用可能でスペース2個単位でインデントすることが多く、推奨されている

YAMLの基礎

Key Value Pair 

Array/List ※-(ダッシュ)とスペースを入れて要素を記入

Array/List ※2スペース無くても良い

Dictionary/Map  ※インデント1つか2必要、タブはダメ

タブの場合、閲覧するエディタによって異なる書式で表示される場合がある為

※注意点

Dictionary/Mapの場合、構成要素の並び順は関係なく、List/Arrayの並びは固定となるので注意。

以下のDictionary/Mapは 同じ。

以下のArray/Listは同じではない。

guestmembersをkeyとしてリスト形式で一列事の情報をディクショナリでまとめた場合はどうなるか?

Kubernetesのリソース

Kubernetes ではリソース管理スケーリングや更新など、アプリケーションのデプロイを管理するため、YAMLでリソースの設定を管理している。

リソースの例↓

  • apiVersion - どのバージョンのKubernetesAPIを利用してオブジェクトを作成するか
  • kind - どの種類のオブジェクトを作成するか   
  • metadata - オブジェクトを一意に特定するための情報、文字列のnameUID、また任意のnamespaceが該当する
  • spec - オブジェクトの望ましい状態

   参考サイト>>> Kubernetesオブジェクトを理解する

以下imageはListになっている為、1つ目のイメージとなる。

Dictionary/Mapの場合、構成要素の並び順は関係ない為、以下2つの定義ファイル内容は同じである。ファイルをダンプし、比較する場合、要注意。

 

 

 

Kubernetes CORE CONCEPTS – PODS

Kubernetes のお勉強方法


どうやって勉強する?

 

UdemyにてCertified Kubernetes Administrator (CKA) with Practice Testsを受講するとKodeKloudのUdemy Labs – Certified Kubernetes Administrator with Practice Tests(99ドル)のハンズオンラボコースが無料になるクーポンコードが付いてくるのである。

 

CORE CONCEPTS – PODS K8s

 

Podとは、KubernetesでDockerコンテナを管理するための最小単位のものでクラスターで実行されるプロセスのことである。Podの概観 は公式サイトでチェック。アプリケーションコンテナだけでなく、ストレージボリュームの集まりでもあるが、Dockerコンテナが一般的である。

 

kubectlコマンドラインツールを使い、Kubernetesクラスターを制御する。

kubectlの概要は公式サイトでチェック。

 

kubectl get pods

podの数を数える。結果は0です。

podが複数表示された場合のREADY 項目は何を表しているのか?
Running Containers in pod / Total Cointainers in pod
podの中で実行されているコンテナ数 / podの中の総コンテナ数

kubectl run nginx –image=nginx
nginxイメージを使用して新しいpodを作成。

kubectl get pods -o wide
podが配置されているノードを確認。以下のpod達はcontrolplaneに配置されている。

kubectl describe pod webapp
webappのpodには幾つのコンテナが含まれているか確認。
Containers配下を確認する。この場合はnginxとagentxがある。
agentxの方のstate(状態)はError もしくはWaiting(待機)状態である。

agentxがError/Waiting状態の理由はkubectl describe pod webappコマンドのEvents配下で確認できます。以下の場合はDockerからイメージのプルが出来なく、レポジトリが無いとの事。

kubectl delete pod webapp
webapp podの削除

kubectl run redis –image=redis123 –dry-run=client -o yaml > redis-definition.yaml
–dry-run=client -o yamlのオプションを使用してマニフェストファイルをYAML形式で作成するコマンド。pod名をredisとし、イメージ名をredis123とする。

“Manifest”ファイルは各種リソース構成や実行するコンテナイメージなどをYAML形式またはJASON形式で記述したファイルのことである。


kubectl create -f redis-definition.yaml

kubectl create -f コマンドにてマニフェストファイルからリソースを作成する。

kubectl get pods で作成したpodを確認。

kubectl edit pod redis
kubectl editコマンドを使用してポッドのイメージ名をredis123からredisに更新。
viまたはNanoエディターを使用。

kubectl apply -f redis-definition.yaml
編集したファイルのアップデートを行う。