Docker_kubernetes_マニュフェストファイル_定義ファイル_設定ファイル

kubernetesはマニュフェストファイル(定義ファイル)(設定ファイル)で登録された内容に従ってPodを作る
マニュフェストファイルをkubernetesにUPするとそれがetcd(データベース)に登録される
それをもとにサーバ環境が望ましい状態にたもたれる

リソースとは
Pod、サービス、デプロイメント、レプリカセットなどのこと

基本マニュフェストファイルは上記のリソースの設定を書くが
ファイルを分けて書いてもよい 「デプロイメントのマニュフェストファイル」「サービスのマニュフェストファイル」など
一つのファイルに書く時はリソースごとに「—」で区切る
ファイル名はなんどもいいが、会社できちんと決めること

「Podとレプリカセットのマニュフェストファイル」は基本作らない
なぜなら「デプロイメントのマニュフェストファイル」の中に設定を書くからである
なぜなら「Pod」の設定はPodのみを作る時に作る
「Pod」の設定項目には自動に設定した数に保たれる設定項目がない
保つ機能はデプロイメントやレプリカセットが担うので
デプロイメントのマニュフェストファイルに入れ子でレプリカセットとPodの設定を書く

■マニュフェストファイルに書く大項目は下記になる
apiVersion
kind
metadata
spec

「apiVersion」と「kind」の値でリソースの種類を設定する

大項目の「metadata」には初心者の内は「name」と「label」を理解しとけばOK
主な大項目のメタデータ

項目 内容
name リソースの名前。一意に識別される文字列
namespace リソースに分散化されるDNSの互換のラベル
uid 一意に識別する番号
resourceVersion リソースバージョン
generation 生成した順序を示す番号
creationTimestamp 作成日時
deletionTimestamp 削除日時
labels 任意のラベル
anotation リソースに対して設定したい値。選択対象にはならない

上記の表のlabelsについて
Podやサービスなどリソースには任意のラベルがつけれる
ラベルは項目(キー)と値のペアでメタデータとして設定する
ラベルとつけておくとセレクター機能(selector)を使って特定のラベルがついたPodだけを配置するなどPodを選択して設定できる
例として犬システム、猫システムといサービスを提供している会社がゴールド、シルバー、ブロンズの会員別にPodを分けてるとします。
ラベルをつけていれば、犬システム関連のみやゴールド会員のみといったPodを指定したアクションが可能になる
サービスにもラベルをつけることができる
同一システムで利用しているサービスに同じラベルをつけておけばセレクター機能を使うことでそのシステムに属するサービスすべてを作り直すことができる

デプロイメントのマニュフェストファイル作成
(Pod設定はここに書く)
/kube_folder/apa000dep.yml

##############################
# apiVersionとkindでリソースの指定をする(どのリソースのマニュフェストファルなのか)
# -----------------------------------------------------------
# リソース      APIグループ/バージョン(apiVersion) 種類(kind)
# -----------------------------------------------------------
# Pod           core/v1(v1と略せる)                Pod
# サービス        core/v1(v1と略せる)               Service
# デプロイメント   apps/v1                          Deployment
# レプリカセット   apps/v1                          ReplicaSet
#
# Podはデプロイメントの中に書くことが多いので使用することは少ない
# 
# デプロイメントとサービスはほぼセットで使用する
# ファイルは別でもOK
# 一緒の場合は「---」で区切る
#
#今回は「apps/v1」と「Deployment」なのでデプロイメント(配置)設定ファイルになる
#
# APIグループとそのバージョン
apiVersion: apps/v1
# リソースの種類
kind: Deployment
##############################
# メタデータ
# リソースの名前やラベルをつける
metadata:
  # デプロイメントの名前
  name: apa000dep
# リソースの中身
# どんなリソースにするか
spec:
  # 特定のラベルがついたPodをデプロイメントが管理するための設定
  # ようは管理対象を設定する
  selector:
    # ラベルを記述
    # 「template」の中の「metadata」で設定したラベル名を指定する
    matchLabels:
      app: apa000kube
  # Pod数
  replicas: 3
  # 作成するPodの情報
  template:
    metadata:
      # 「matchLabels」と同じラベル名
      labels:
        app: apa000kube
    spec:
      # コンテナの情報
      containers:
        # コンテナの名前
        - name: apa000ex91
          image: httpd
          # image: nginx
          ports:
          - containerPort: 80

デプロイメントのマニュフェストファイルを kubernetesに読み込ませその内容を反映させる

kubectl apply -f /kube_folder/apa000dep.yml

deployment.apps/apa000dep createdが表示される

確認
3つのPodができていればOK

kubectl get pods

サービスのマニュフェストファイル作成
/kube_folder/apa000ser.yml

##############################
# apiVersionとkindでリソースの指定をする(どのリソースのマニュフェストファイルなのか)
# -----------------------------------------------------------
# リソース      APIグループ/バージョン(apiVersion) 種類(kind)
# -----------------------------------------------------------
# Pod           core/v1(v1と略せる)                Pod
# サービス        core/v1(v1と略せる)               Service
# デプロイメント   apps/v1                          Deployment
# レプリカセット   apps/v1                          ReplicaSet
#
# Podはデプロイメントの中に書くことが多いので使用することは少ない
# 
# デプロイメントとサービスはほぼセットで使用する
# ファイルは別でもOK
# 一緒の場合は「---」で区切る
# 
#今回は「v1」と「Service」なのでサービスになる
#
# APIグループとそのバージョン
apiVersion: v1
# リソースの種類
kind: Service
##############################
# メタデータ
# リソースの名前やラベルをつける
metadata:
  # サービスの名前
  name: apa000ser
spec:
  # ClusterIP ClusterIPでServiceにアクセス(外からはアクセスできない)
  # NodePort  ワーカーノードのIPでServiceにアクセス
  # LoadBalancer ロードバランサーのIPでServerにアクセス
  # ExternalName Podからサービスを通じて外を出るための設定
  #
  # 外とサービスの間の通信をどのIPアドレス(もしくはDNS)で
  # アクセスするかを設定
  type: NodePort
  ports:
  # サービスのポート
  - port: 8099
    # コンテナのポート
    targetPort: 80
    # 通信に使うプロトコル
    protocol: TCP
    # ワーカーノードのポート
    nodePort: 30080
  # 特定のラベルがついたPodをデプロイメントが管理するための設定
  # ようは管理対象を設定する
  selector:
    # 管理対象のラベル
    # デプロイメントファイルのラベル名と同一
    # 「matchLabels」と「metadata」の「labels」の値のこと
    app: apa000kube

サービスのマニュフェストファイルを kubernetesに読み込ませその内容を反映させる

kubectl apply -f /kube_folder/apa000ser.yml

service/apa000ser createdが表示されればOK

サービス一覧確認
「kubernetes」と「apa000ser」があればOK
「kubernetes」はkubernetesが自動に作ったサービス

kubectl get services

下記にアクセスしてApacheの初期画面がでればOK
http://localhost:30080/

Podを一つづつ消す
kubectl get pods コマンドでNAME確認して削除するPodを指定

kubectl delete pod apa000dep-◯◯◯

kubectl get podsコマンドを実行して確認すると新しいPodが一つ作られていればOK

デプロイメントを削除

kubectl delete -f /kube_folder/apa000dep.yml

deployment.apps “apa000dep” deleted が表示される

デプロイメントがなくなっているかの確認

kubectl get deployment

No resources found in default namespace.が出ればOK

サービスを削除する

kubectl delete -f /kube_folder/apa000ser.yml

service “apa000ser” deletedが表示される

サービスがなくなっているかの確認

kubectl get service
Author: gaa

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です