Kubernetes(k8s) マイメモ
Kubernate用語
node
Kubernateのクラスターは複数のノードから構成される。
・ワーカーノード
・マスターノード→クラスター内のワーカーノードとPodを管理
PVC(PersistentVolumeClaim)
PVを利用するために必要
k8sの主なリソースに関して
Pod(ポッド)
「コンテナ」を管理するリソースで、複数のコンテナを1つのPodに含めることもできる。
ReplicaSet(レプリカセット)
Podの数を管理することが可能!!
(スケールアウトが容易になる。)
マニュフェストで管理する場合、Podオブジェクトに「ラベル」を付与しておき、selectorでラベルが付いたPodをセットしておく。
Deployment
レプリカセットの上位概念
デプロイ戦略を管理することが可能
Service
ClusterIP☛PodからPodへの通信を可能にする
kubectl
kubernetes APIを使用してKubernetesクラスターのコントロールプレーンと通信するためのコマンドラインツール
役割
Kubernetesクラスターを制御
インストール
操作の前に
namespaceで区切られている場合は-nで指定しておく
kubectl -n <namespace名称> .....
Action(操作)
kubectl config current-context
kubectl config get-contexts
A.名前空間
※namespaceもリソース
※kube-systemはシステムコンポーネント用のnamespace
★名前空間の取得
kubectl get namespace
kubectl get ns
★名前空間の作成
kubectl create namespace <作成した名前空間>
kubectl create -f <〇〇.yaml>
apiVersion: v1
kind: Namespace
metadata:
name: test
★名前空間の切り替え
kubens <切り替えたい名前空間>
※-nオプションで毎回namespaceを指定する必要がなくなる。逆に言えばkubectlコマンドで同じことは実現できる。
A.リソースの作成/更新
クラスター内のリソースを作成および更新
あらかじめマニュフェストファイルを作成しておく(yaml)
kubectl apply -f <yamlファイル>
A.リソースの確認
kuberctl get pods
kubecrtl get pods -o wide
kubectl get pod [pod name] -o yaml
kubectl describe pod <podの名称>
A.リソースの削除
kubectl delete pod <podの名称>
A.起動したPodに入る
kubectl exec -it <podの名称> /bin/sh
kubernetesのマニュフェスト
・「マニフェスト」と呼ばれる形式で各種リソースを定義する(yaml)
・独自のイメージを利用したい場合はdockerfileを作成しておき、
docker build -t (イメージ名):(タグ名)
でイメージを作成しておけば良い。
apiVersion: v1
kind: Pod
metadata:
name: ubuntu
spec:
containers:
- name: ubuntu
image: ubuntu:20.04
imagePullPolicy: IfNotPresent
command: ["sleep", "infinity"]
command: ["sleep", "infinity"]
がないと、即時終了してまた再起動を繰り返してしまう。
他のリソースから参照される場合
apiVersion: v1
kind: Pod
metadata:
name: ubuntu
labels:
app: ubuntuos
他のリソース(service)などから参照される場合はつけておく
GPUを利用する
GPUが利用できるk8sの場合 containersにreesourcesを追加する。
(省略)
spec:
containers:
- name: ubuntu
image: ubuntu:20.04
imagePullPolicy: IfNotPresent
resources:
limits:
nvidia.com/gpu: 1
command: ["sleep", "infinity"]
Podの中に入り、「nvidia-smi」で確認すると良い。
イメージ部分
〇ローカル(ワークノード側!)からイメージを探す(imagePullPolicy: Never)
spec:
containers:
- name: ubuntuos
image: ubuntu
imagePullPolicy: Never
環境変数の設定
環境変数はenvを使ってname-valueの形で定義できる。
spec:
containers:
- name: ubuntu
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
env:
- name: "discovery.type"
value: "single-node"
- name: "network.host"
value: "0.0.0.0"
- name: "ES_JAVA_OPTS"
value: "-Xms512m -Xmx512m"
volumeの利用
〇Pod内のディスクを使用(emptyDir)
→Pod削除時にボリューも削除
〇Node内のディスクを使用(hostPass)
→ 異なるNodeのpodは共有不可
〇PV
→PVC経由で利用
kubeflow
コンテナレポジトリを用意する(Harbor)
K8s上で運用することができるコンテナレポジトリ
Discussion