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