k8s で遊ぶ: リソース管理

1 リソース管理の概要

Kubernetesではすべてのコンテンツがリソースに抽象化されており、ユーザーはリソースを操作してKubernetesを管理する必要があります。

Kubernetes は本質的にはクラスター システムであり、ユーザーはクラスター内にさまざまなサービスをデプロイできます。いわゆるデプロイメント サービスとは、実際には Kubernetes クラスター内でコンテナーを 1 つずつ実行し、そのコンテナー内で指定されたプログラムを実行することを意味します。

Kubernetes の最小管理単位はコンテナではなくポッドであるため、コンテナはポッド内にのみ配置できます。Kubernetes は通常、ポッドを直接管理せず、ポッド コントローラを通じてポッドを管理します。

Pod がサービスを提供できるようになったら、Pod 内のサービスにアクセスする方法を検討する必要があり、Kubernetes はこの機能を実装するための Service リソースを提供します。

もちろん、Pod 内のプログラムのデータを永続化する必要がある場合、kubernetes はさまざまなストレージ システムも提供します。

kubernetes の学習の中心は、クラスター上のポッド、ポッド コントローラー、サービス、ストレージなどのさまざまなリソースを操作する方法を学ぶことです。

2 YAML 言語の概要

YAML は、XML や JSON に似たマークアップ言語です。マークアップ言語に焦点を当てず、データ中心であることを強調しています。そのため、YAML 自体の定義は比較的単純であり、「人間化されたデータ形式言語」として知られています。

<heima>
    <age>15</age>
    <address>Beijing</address>
</heima>
heima:
  age: 15
  address: Beijing

YAML の構文は比較的単純で、主に次のものが含まれます。

  • 大文字と小文字を区別
  • インデントを使用して階層関係を示す
  • インデントにはタブは使用できません。スペースのみが使用できます (以前のバージョンの制限)
  • 同じレベルの要素が左揃えである限り、インデントのスペースの数は関係ありません。
  • 「#」はコメントを示します

YAML は次のデータ型をサポートします。

  • スカラー: 単一の割り切れない値
  • オブジェクト: キーと値のペアのコレクション。マッピング/ハッシュ/ディクショナリとも呼ばれます。
  • 配列: 順番に配置された値のセット。シーケンス/リストとも呼ばれます。

# スカラーは、単純な値、文字列、ブール値、整数、浮動小数点数、Null、時刻、日付を指します # 1
ブール型
c1: true (または True)
# 2 整数型
c2: 234
# 3 浮動小数点型
c3: 3.14
# 4 null 型 
c4: ~ # null を表すには ~ を使用します
# 5 日付型
c5: 2018-02-17 # 日付は ISO 8601 形式、つまり yyyy-MM-dd を使用する必要があります
# 6 時刻型
c6: 2018-02 -17T15:02:31+08:00 # 時刻は ISO 8601 形式を使用し、T は時刻と日付を接続するために使用され、最後に + はタイムゾーンを表すために使用されます # 7 文字列型 c7: heima # 単純な記述
方法
、文字列の場合は、値を直接書き込みます。中央に特殊文字があるため、二重引用符または一重引用符で囲む必要があります。 
c8: line1
    line2 # 文字列が多すぎる場合は、複数の行に分割することができ、各行は空間に変換されます。

#オブジェクト
# フォーム 1 (推奨):
heima:
  年齢: 15
  住所: 北京
# フォーム 2 (理解済み):
heima: {年齢: 15,住所: 北京}

# 配列
# 形式 1 (推奨):
アドレス:
  - 順義
  - 昌平  
# 形式 2 (理解):
アドレス: [順義、昌平]

ヒント:   

1 yaml を記述するときは、後ろにスペースを追加することに注意してください。

2 複数の yaml 設定を 1 つのファイルに含める必要がある場合は、--- を使用して区切ります。

3 以下は yaml を json に変換するサイトで、yaml が正しく記述されているかを確認することができます。

https://www.json2yaml.com/convert-yaml-to-json

3 リソース管理方法

  • 命令型オブジェクト管理: コマンドを直接使用して Kubernetes リソースを操作します
kubectl run nginx-pod --image=nginx:1.17.1 --port=80
  • 命令的なオブジェクト構成: コマンド構成と構成ファイルを通じて kubernetes リソースを操作します。
kubectl create/patch -f nginx-pod.yaml
  • 宣言型オブジェクト構成: 適用コマンドと構成ファイルを通じて Kubernetes リソースを操作します。
kubectl apply -f nginx-pod.yaml
タイプ 操作対象 適用環境 アドバンテージ 欠点がある
必須のオブジェクト管理 物体 テスト 単純 アクティブなオブジェクトのみを操作でき、監査や追跡はできません
命令的なオブジェクト構成 書類 開発する 監査と追跡が可能 プロジェクトが大きくなると設定ファイルも多くなり操作が面倒になります。
宣言的なオブジェクト構成 目次 開発する ディレクトリ操作のサポート 予期せぬ状況でのデバッグが困難

3.1 命令的なオブジェクト管理

kubectlコマンド

kubectl は kubernetes クラスター用のコマンド ライン ツールで、クラスター自体を管理し、コンテナー化されたアプリケーションをクラスターにインストールおよびデプロイできます。kubectl コマンドの構文は次のとおりです。

kubectl [command] [type] [name] [flags]

コマンド: リソースに対して実行する操作 (作成、取得、削除など) を指定します。

type: デプロイメント、ポッド、サービスなどのリソースタイプを指定します。

name: 指定されたリソースの名前。名前は大文字と小文字が区別されます。

flags: 追加のオプションパラメータを指定します

# 查看所有pod

kubectl get pod 
​
# 查看某个pod

kubectl get pod pod_name
​
# 查看某个pod,以yaml格式展示结果

kubectl get pod pod_name -o yaml

リソースの種類

Kubernetes のすべてのコンテンツはリソースに抽象化されており、次のコマンドで表示できます。

kubectl api-resources

頻繁に使用されるリソースには次のようなものがあります。

リソースの分類 リソース名 略語 リソースの役割
クラスターレベルのリソース ノード いいえ クラスタコンポーネント
名前空間 ns ポッドの分離
ポッドリソース ポッド 積載コンテナ
ポッドリソースコントローラー レプリケーションコントローラー ラジコン ポッドリソースの制御
レプリカセット rs ポッドリソースの制御
導入 展開する ポッドリソースの制御
デーモンセット DS ポッドリソースの制御
仕事 ポッドリソースの制御
クロンジョブ CJ ポッドリソースの制御
水平ポッドオートスケーラー hpa ポッドリソースの制御
ステートフルセット sts ポッドリソースの制御
サービス検出リソース サービス サービス 統合されたポッド外部インターフェイス
進入 している 統合されたポッド外部インターフェイス
ストレージリソース ボリューム添付ファイル ストレージ
永続ボリューム PV ストレージ
永続的なボリューム要求 ポリ塩化ビニール ストレージ
リソースの構成 構成マップ cm 構成
秘密 構成

操作

Kubernetes ではリソースに対するさまざまな操作が可能で、--help を通じて詳細な操作コマンドを表示できます。

kubectl --help

一般的に使用される操作には次のようなものがあります。

コマンドの分類 注文 翻訳する コマンド機能
基本的なコマンド 作成する 作成する リソースを作成する
編集 編集 リソースを編集する
得る 得る リソースを取得する
パッチ 更新する リソースを更新する
消去 消去 リソースを削除する
説明する 説明する リソースドキュメントの表示
実行してデバッグする 走る 走る クラスター内で指定されたイメージを実行します
さらす 露出 リソースをサービスとして公開する
説明する 説明する リソースの内部情報を表示する
ログ ログ Pod内のコンテナのログを出力する
付ける 麻ひも 実行中のコンテナに入る
実行する 埋め込む コンテナ内でコマンドを実行する
CP コピー ポッド内外のファイルをコピーする
ロールアウトする 最初の表示 リソースのリリースを管理する
規模 規模 Podの数を拡張(縮小)する
自動スケール 自動調整 Pod の数を自動的に調整する
高度なコマンド 適用する ラジコン ファイルを介してリソースを構成する
ラベル ラベル リソースのタグを更新する
その他のコマンド クラスター情報 クラスター情報 クラスター情報を表示する
バージョン バージョン 現在のサーバーとクライアントのバージョンを表示します

以下は、名前空間/ポッドの作成と削除を使用したコマンドの使用方法の簡単なデモンストレーションです。

# 创建一个namespace
[root@master ~]# kubectl create namespace dev
namespace/dev created
​
# 获取namespace
[root@master ~]# kubectl get ns
NAME              STATUS   AGE
default           Active   21h
dev               Active   21s
kube-node-lease   Active   21h
kube-public       Active   21h
kube-system       Active   21h
​
# 在此namespace下创建并运行一个nginx的Pod

[root@master ~]# kubectl run pod --image=nginx:latest -n dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/pod created
​
# 查看新创建的pod

[root@master ~]# kubectl get pod -n dev
NAME  READY   STATUS    RESTARTS   AGE
pod   1/1     Running   0          21s
​
# 删除指定的pod

[root@master ~]# kubectl delete pod pod-864f9875b9-pcw7x
pod "pod" deleted
​
# 删除指定的namespace

[root@master ~]# kubectl delete ns dev
namespace "dev" deleted

3.2 命令的なオブジェクト構成

命令的なオブジェクト構成では、コマンドと構成ファイルを使用して Kubernetes リソースを操作します。

1) 次の内容を含む nginxpod.yaml を作成します。

apiVersion: v1
kind: Namespace
metadata:
  name: dev
​
---
​
apiVersion: v1
kind: Pod
metadata:
  name: nginxpod
  namespace: dev
spec:
  containers:
  - name: nginx-containers
    image: nginx:latest

2) create コマンドを実行してリソースを作成します。

[root@master ~]# kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginxpod created

この時点で、namespace と pod という 2 つのリソース オブジェクトが作成されていることがわかりました。

3) get コマンドを実行してリソースを表示します。

[root@master ~]#  kubectl get -f nginxpod.yaml
NAME            STATUS   AGE
namespace/dev   Active   18s
​
NAME            READY   STATUS    RESTARTS   AGE
pod/nginxpod    1/1     Running   0          17s

これにより、2 つのリソース オブジェクトの情報が表示されます

4)执行delete命令,删除资源:

[root@master ~]# kubectl delete -f nginxpod.yaml
namespace "dev" deleted
pod "nginxpod" deleted

此时发现两个资源对象被删除了

总结:

命令式对象配置的方式操作资源,可以简单的认为:命令  +  yaml配置文件(里面是命令需要的各种参数)

3.3 声明式对象配置

声明式对象配置跟命令式对象配置很相似,但是它只有一个命令apply。

# 首先执行一次kubectl apply -f yaml文件,发现创建了资源
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
​
# 再次执行一次kubectl apply -f yaml文件,发现说资源没有变动
[root@master ~]#  kubectl apply -f nginxpod.yaml
namespace/dev unchanged
pod/nginxpod unchanged

总结:

其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态)

使用apply操作资源:
        如果资源不存在,就创建,相当于 kubectl create
        如果资源已存在,就更新,相当于 kubectl patch

扩展:kubectl可以在node节点上运行吗 ?

kubectl的运行是需要进行配置的,它的配置文件是$HOME/.kube,如果想要在node节点运行此命令,需要将master上的.kube文件复制到node节点上,即在master节点上执行下面操作:

scp  -r  HOME/.kube   node1: HOME/

使用推荐: 三种方式应该怎么用 ?

创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml

删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml

查询资源 使用命令式对象管理 kubectl get(describe) 资源名称

おすすめ

転載: blog.csdn.net/duansamve/article/details/131407006