k8s/archive_2

オブジェクトの理解

YOOANT 2026. 4. 13. 23:31

[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

日本語