GH GambleHub

Kubernetes:クラスタとヘルムチャート

Kubernetes: クラスタとヘルムチャート

1)クラスタアーキテクチャ-トップビュー

Control Plane: 'kube-apiserver'、 'etcd'、 'kube-scheduler'、 'kube-controller-manager'、(一部は制御されたクラウドに隠されている)。
Worker: 'kubelet'、 CRIランタイム(containerd/CRI-O)、 CNIプラグイン、kube-proxy/ebpf-proxy。
Intraclusterネットワーク:Pod-to-Pod、 Service-VIP/ClusterIP、 DNS CoreDNS。
ストレージ:CSIドライバ、動的PVC→PVプロビジョニング(StorageClass)。
障害制限:ノード/AZ/リージョン。ゾーンごとにレプリカを配置します(TopologySpreadConstraints/anti-affinity)。

典型的な役割

プラットフォームコマンド:クラスタ、CNI/CSI/Ingress、ポリシー、GitOpsを作成/アップグレードします。
製品チーム:チャート/リリースを入金し、セキュリティポリシーとリソースに従ってください。

2)クラスタライフサイクル

作成:kOps、 kubeadm、 Rancher、 EKS/AKS/GKE。OIDC認証と監査をすぐに有効にします。
アップグレード:マイナーバージョン(コントロールプレーン→ノード)、maxUnavailableで制御、ステージングのテスト。
アドオン(すべてHelm/GitOps経由):CNI (Calico/Cilium)、 CSIドライバ、Ingress Controller (NGINX/Gateway API/Contour/Traefik)、メトリクスサーバ、クラスタオートスカラー、ノード-ローカルDNS、ログ/メトリック/トレース。
バックアップ:etcdスナップショット(自己管理されている場合)、名前空間/PVC用のVelero。

3)ネットワーク、サービスおよび侵入

CNI: Calico (NetworkPolicy)、 Cilium (eBPF/servicemesh-фичи)。
サービス:'ClusterIP'、 'NodePort'、' LoadBalancer '(L4クラウドバランシング)、'ExternalName'。
Ingress/Gateway API: L7ルーティング、TLS、レート制限/WAF履歴。
NetworkPolicy: deny-all+explicit allow by namespace/labelデフォルトで。
StatefulSetおよびサービス検出用のヘッドレスサービス('clusterIP: None')。

4)ストレージ(CSI)と状態

StorageClass: 'ReclaimPolicy'、 'volumeBindingMode'(より良い配置のために'WaitForFirstConsumer')。
StatefulSet:安定した名前/ボリューム('volumeClaimTemplates')、 'podManagementPolicy: Parallel'クイックスキャン用。
ReadWriteMany:分散ファイル(EFS/Filestore)を慎重に使用し、レイテンシーを評価します。
スナップショット:'VolumeSnapshotClass'+cronバックアップ。

5)マルチテナンシーと政治

製品/環境による名前空間。
RBAC:可能であれば、最小限のロール、個別のサービスアカウント、'ClusterRole'の代わりに'Role'/'RoleBinding'。
PSA (Pod Security Admission): 'baseline'/'restricted'モード(PSP置換)。
ResourceQuota/LimitRange: CPU/メモリ/PVC/ロードバランサー。
OPA ゲートキーパー/Kyverno:入場ポリシー(例:禁止':latest'、 requirement 'resources'、 'readOnlyRootFilesystem')。
ImagePolicy/webhooks:イメージ署名検証(cosign/policy-controller)。

6) Observabilityおよび操作

メトリクス:Prometheusスタック、kube-state-metrics、 node exporter。
ログ:Fluent Bit/Vector→object/ES/OpenSearch、ノードの回転。
トレイル:OpenTelemetry Collector。
SLOダッシュボード:入力およびキーサービスのREDモデル。
Autoscale: HPA(アプリケーションメトリック別)、background用VPA、ノード用Cluster-Autoscaler。

7)マニフェストパターン(チートシート)

展開:
yaml apiVersion: apps/v1 kind: Deployment metadata: { name: api, labels: { app: api } }
spec:
replicas: 3 strategy: { type: RollingUpdate, rollingUpdate: { maxUnavailable: 0, maxSurge: 1 } }
selector: { matchLabels: { app: api } }
template:
metadata:
labels: { app: api }
spec:
serviceAccountName: api-sa securityContext: { runAsNonRoot: true, fsGroup: 2000 }
containers:
- name: api image: registry. example. com/api:1. 2. 3 ports: [{ containerPort: 8080 }]
resources: { requests: { cpu: "200m", memory: "256Mi" }, limits: { cpu: "1", memory: "512Mi" } }
readinessProbe: { httpGet: { path: /healthz, port: 8080 }, periodSeconds: 5 }
livenessProbe: { httpGet: { path: /livez,  port: 8080 }, initialDelaySeconds: 20 }
StatefulSet(スニペット):
yaml apiVersion: apps/v1 kind: StatefulSet metadata: { name: db }
spec:
serviceName: db replicas: 3 podManagementPolicy: Parallel selector: { matchLabels: { app: db } }
template:
metadata: { labels: { app: db } }
spec:
containers:
- name: db image: postgres:16-alpine volumeMounts: [{ name: data, mountPath: /var/lib/postgresql/data }]
volumeClaimTemplates:
- metadata: { name: data }
spec:
accessModes: ["ReadWriteOnce"]
resources: { requests: { storage: 100Gi } }
storageClassName: fast-ssd
PDB (PodDisruptionBudget):
yaml apiVersion: policy/v1 kind: PodDisruptionBudget metadata: { name: api-pdb }
spec:
minAvailable: 2 selector: { matchLabels: { app: api } }
Ingress (Nginx、 brief):
yaml apiVersion: networking. k8s. io/v1 kind: Ingress metadata:
name: api annotations:
nginx. ingress. kubernetes. io/proxy-read-timeout: "30"
spec:
tls: [{ hosts: ["api. example. com"], secretName: api-tls }]
rules:
- host: api. example. com http:
paths:
- path: /
pathType: Prefix backend: { service: { name: api, port: { number: 80 } } }

8) ヘルムv 3-基本と構造

チャート=テンプレート+値+メタデータ。


mychart/
Chart. yaml     # name, version (semver), type (application/library), dependencies values. yaml # default values. schema. json # (recommended) validation values templates/# .yaml. gotmpl (Deployment, Service, Ingress, …)
templates/tests/  # helm tests (smoke)
charts/# local dependencies (or OCI dependencies)
チャート。yaml(例):
yaml apiVersion: v2 name: api description: API service type: application version: 1. 4. 0 # chart version (semver)
appVersion: "1. 2. 3" # dependencies application version:
- name: redis version: 17. x.x repository: "oci://registry. example. com/charts"

9)ヘルムテンプレート-プラクティス

'_helpersでヘルパーを使用します。名前/ラベル/注釈のtpl'。
'resources'、 'securityContext'、 'readiness/liveness'をどこでも指定します。
標準化されたスキーム('app。 kubernetes。io/')。
'values' (ingress/hpa/pdb/servicemonitor)を使用して機能をオプションにします。
インクルード'値。スキーマ。json'-正しくない設定から停止します。
機密データの場合-外部演算子(External Secrets、 SOPS)からのシークレットで、値に格納されません。

例'_helpers。tpl'(フラグメント):
gotmpl
{{- define "api. fullname" -}}
{{- printf "%s-%s".Chart. Name. Release. Name      trunc 63      trimSuffix "-" -}}
{{- end -}}
デプロイメント。tpl(フラグメント):
gotmpl apiVersion: apps/v1 kind: Deployment metadata:
name: {{ include "api. fullname". }}
labels: {{- include "api. labels". nindent 4 }}
spec:
replicas: {{.Values. replicaCount }}
strategy:
rollingUpdate:
maxSurge: 1 maxUnavailable: 0 selector:
matchLabels: {{- include "api. selectorLabels". nindent 6 }}
template:
metadata:
labels: {{- include "api. selectorLabels". nindent 8 }}
spec:
serviceAccountName: {{ include "api. serviceAccountName". }}
securityContext: {{- toYaml. Values. podSecurityContext      nindent 8 }}
containers:
- name: {{.Chart. Name }}
image: "{{.Values. image. repository }}:{{.Values. image. tag }}"
imagePullPolicy: IfNotPresent ports: [{ containerPort: {{.Values. service. port }} }]
resources: {{- toYaml. Values. resources      nindent 10 }}
envFrom:
- secretRef: { name: {{.Values. secretsRef }} }

10)依存関係、リポジトリ、OCI

Helm v3はOCIレジスタ'oci ://registry/org/charts'をサポートしています。
依存関係バージョンをロックします('^1。2.0`, `~1.'helm dependency build'を実行します。
チャート(prov)に署名し、アーティファクトをCIアーティファクト・リポジトリに保存します。
ライブラリチャート:再利用のための一般的なテンプレート(ingress/servicemonitor)。

11)ホック、CRDおよび操作の順序

フック: 'pre-install'、 'post-install'、 'pre-upgrade'、 'post-upgrade'、 'test'。ポリシーの追加('before-hook-creation'、 'hook-succeeded')

CRD: 'crds/'(テンプレートに設定)を入れ、即座にCRDの更新を避けます-別途移行します。
データベースの移行/初期化-idempotencyとタイムアウトのジョブフック。

12)図表およびCIのテスト

'helm lint'+スキームの検証。
Helm unittest (unit)、 chart-testing (ct)-CIのkind/minikubeでのアセンブリ/インストール。

テンプレートのスナップショットテスト('helm template'→テンプレートと比較)

スモークテスト'ヘルムテスト'(チェックで'Pod'を上げます)。

13) GitOps (Argo CD/Flux)

真実の源はリポジトリです。グラフは、HelmRelease/HelmChart (Flux)またはApplication (Argo)として保存されます。
シンクポリシー:プルーン/セルフヒール、ステータス、ヘルスチェックと自動同期します。
プロモーションバージョン:tag-bots/semver-range、 PR-flow。
repoをapps (charts)とenv (overrides/values)に分割します。
秘密管理:SOPS (年齢/KMS)、外部秘密。

14)安全: 最低必要

PSA制限:特権なし、hostPathなし、制限された機能、読み取り専用ルートfs。
ImagePolicy-署名された/信頼されたイメージのみ。
NetworkPolicy:「デフォルトでロックされています」。
RBAC:アプリごとのサービスアカウント、名前空間における'Role'/'RoleBinding'。
入場管理:ゲートキーパー/Kyvernoルール(リソース/制限、ラベル、最新のものはありません)。
秘密:SOPS/外部秘密;values/plain Gitに秘密を入れないでください。

15)アンチパターン

チャートと画像の':latest';「価値」の欠如。スキーマ。json'。
モジュラーの代わりに「すべてのために」1つの巨大なチャート。
CRDはアップグレード時に'templates/'→chaosのテンプレートで更新されます。
テンプレート内のハードコードされた名前/ポート/名前空間。
リソース/制限とサンプルの欠如→レイテンシードリフトと不安定性。
ドレイン/アップグレードでPDB→ゼロのダウンタイムは不可能です。
暗号化なしでGitの秘密;チェックポリシーなしでマニフェストします。

16)実装チェックリスト(0-45日)

0-10日

'_helpersで基本的なグラフのスケルトンを作成します。tpl'、ラベル、プローブ、リソース、PDB/Ingressオプション。
PSAが制限されたВключить、 NetworkPolicy deny-all、 ResourceQuota/LimitRange。
GitOps (Argo/Flux)、プライベートレジスタ、イメージ/チャート署名を設定します。

11-25日

グラフをモジュール/依存関係に分割し、値を追加します。スキーマ。json'、tests('helm lint'、unit、 ct)。
Observability (ServiceMonitor/PodMonitor)、ログエージェント、OTelを接続します。
アップグレードプロセスを入力します。ステージング→カナリア→prod、ロールバック付きフック移行。

26-45日

依存関係の更新を自動化する(bots/semver-ranges+PR)。
Gatekeeper/KyvernoポリシーとポリシーレポートをCIに追加します。
クラスタアップグレードランブック、DRプロシージャ(Velero/etcdスナップショット)を文書化します。

17)成熟度の指標

アプリケーションの100%はHelm/GitOpsを介して、'kubectl apply'を手動で使用せずに枯渇します。
すべてのチャートには「値」があります。スキーマ。json'、tests、 signature、およびコミットされた依存関係のバージョン。
PSA制限/ネットワークポリシーは、すべての名前空間で有効になります。
PDBとHPAは、すべての重要なサービスに存在します。
SOPS/External Secrets、最新のポリシー、画像署名。
クラスタとチャートのアップグレードはダウンタイム(カナリア/ブルーグリーン)なしで実行され、リストアテストは定期的に行われます。

18)結論

強力なKubernetes foundation=堅牢なクラスタアーキテクチャ+厳格なポリシー+産業品質GitOpsによって管理されるHelmチャート。テンプレートを標準化し、PSA/NetworkPolicy/RBAC環境を保護し、値を検証し、テスト、署名、プロモーションを自動化します。その後、アップグレードやリリースが予測可能になり、プラットフォームは安定して製品チームにとって便利になります。

Contact

お問い合わせ

ご質問やサポートが必要な場合はお気軽にご連絡ください。いつでもお手伝いします!

Telegram
@Gamble_GC
統合を開始

Email は 必須。Telegram または WhatsApp は 任意

お名前 任意
Email 任意
件名 任意
メッセージ 任意
Telegram 任意
@
Telegram を入力いただいた場合、Email に加えてそちらにもご連絡します。
WhatsApp 任意
形式:+国番号と電話番号(例:+81XXXXXXXXX)。

ボタンを押すことで、データ処理に同意したものとみなされます。