[1] 環境構成
▶ master nodeに接続し、ディレクトリの作成
# mkdir -p /root/k8s-local-volume/1231
▶Dashboardにアクセス → Namespace[すべてのnamespace]を選択 → [+]ボタンをクリック → [入力から作成]を選択 → YAMLファイルを貼り付け → アップロード

▶ Namespace
apiVersion: v1
kind: Namespace
metadata:
name: anotherclass-123
labels:
part-of: k8s-anotherclass
managed-by: dashboard
▶ Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: anotherclass-123
name: api-tester-1231
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: dashboard
spec:
selector:
matchLabels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
replicas: 2
strategy:
type: RollingUpdate
template:
metadata:
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
spec:
nodeSelector:
kubernetes.io/hostname: k8s-master
containers:
- name: api-tester-1231
image: 1pro/api-tester:v1.0.0
ports:
- name: http
containerPort: 8080
envFrom:
- configMapRef:
name: api-tester-1231-properties
startupProbe:
httpGet:
path: "/startup"
port: 8080
periodSeconds: 5
failureThreshold: 36
readinessProbe:
httpGet:
path: "/readiness"
port: 8080
periodSeconds: 10
failureThreshold: 3
livenessProbe:
httpGet:
path: "/liveness"
port: 8080
periodSeconds: 10
failureThreshold: 3
resources:
requests:
memory: "100Mi"
cpu: "100m"
limits:
memory: "200Mi"
cpu: "200m"
volumeMounts:
- name: files
mountPath: /usr/src/myapp/files/dev
- name: secret-datasource
mountPath: /usr/src/myapp/datasource
volumes:
- name: files
persistentVolumeClaim:
claimName: api-tester-1231-files
- name: secret-datasource
secret:
secretName: api-tester-1231-postgresql
▶ Service
apiVersion: v1
kind: Service
metadata:
namespace: anotherclass-123
name: api-tester-1231
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: dashboard
spec:
selector:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
ports:
- port: 80
targetPort: http
nodePort: 31231
type: NodePort
▶ Configmap, Secret
apiVersion: v1
kind: ConfigMap
metadata:
namespace: anotherclass-123
name: api-tester-1231-properties
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: dashboard
data:
spring_profiles_active: "dev"
application_role: "ALL"
postgresql_filepath: "/usr/src/myapp/datasource/postgresql-info.yaml"
---
apiVersion: v1
kind: Secret
metadata:
namespace: anotherclass-123
name: api-tester-1231-postgresql
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: dashboard
stringData:
postgresql-info.yaml: |
driver-class-name: "org.postgresql.Driver"
url: "jdbc:postgresql://postgresql:5431"
username: "dev"
password: "dev123"
▶ PVC, PV
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
namespace: anotherclass-123
name: api-tester-1231-files
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: kubectl
spec:
resources:
requests:
storage: 2G
accessModes:
- ReadWriteMany
selector:
matchLabels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231-files
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: api-tester-1231-files
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231-files
version: 1.0.0
managed-by: dashboard
spec:
capacity:
storage: 2G
volumeMode: Filesystem
accessModes:
- ReadWriteMany
local:
path: "/root/k8s-local-volume/1231"
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In, values: [k8s-master]}
▶ HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
namespace: anotherclass-123
name: api-tester-1231-default
labels:
part-of: k8s-anotherclass
component: backend-server
name: api-tester
instance: api-tester-1231
version: 1.0.0
managed-by: dashboard
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-tester-1231
minReplicas: 2
maxReplicas: 4
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
behavior:
scaleUp:
stabilizationWindowSeconds: 120
[2] オブジェクトを図にしながら理解
▶ Object

▶ Label / Selector / Naming (1)

k8sでは、オブジェクト数が増加するにつれて管理が複雑になる。このような場合、適切にラベリングが施されていれば、アプリケーションの情報を迅速に識別することができる。また、k8sではラベルベースのリソース管理が推奨されている。
- Cluster labels
| label key | 説明 | 例 |
| app.kubernetes.io/part-of | アプリケーションが属するシステム全体の名称 | kube-prometheus |
| app.kubernetes.io/component | アーキテクチャ内での役割(レイヤー区分) | prometheus、exporter、grafana |
| app.kubernetes.io/name | アプリケーション自体の名称 | prometheus、kube-state-metrics、node-exporter |
| app.kubernetes.io/instance | 同一アプリケーション内で異なるデプロイインスタンスを識別するための一意の名称 | prometheus-k8s |
| app.kubernetes.io/version | ソフトウェアのバージョン | 2.44.0 |
※k8sの推奨ラベリングには「Managed-by」も含まれる。どのツールによってデプロイされたかを示すツール名を記載する。
▶ Label / Selector / Naming (2)

- labels
| Object名 | Selectorを持つリソース | 対象(labels) |
| Deployment | Deployment | ReplicaSet |
| ReplicaSet | ReplicaSet | Pod |
| Service | Service | Pod |
| Pod | Pod(nodeSelector) | Master Node |
| PVC | PVC | PV |
| PV | PV(nodeAffinity) | Master Node |
| Master Node | - | Pod、PV |
※Selectorに定義されたすべてのkey/valueは、対象リソースのlabelsに必ず含まれている必要がある。一方で、labelsにはversionのようにSelectorに含まれていない追加の項目が存在しても問題ない。
各オブジェクトによってSelectorの記述形式やサポート範囲が異なるため、それぞれの特性に応じて適切に記述する必要がある。
'k8s > archive_2' 카테고리의 다른 글
| Probe,Service,Secret,HPA (0) | 2026.04.18 |
|---|---|
| PV/PVC、Deployment、Service (0) | 2026.04.16 |
| Configmap、Secret (0) | 2026.04.15 |
| Probe (0) | 2026.04.15 |
| Kubernetesの利便性 (0) | 2026.04.13 |