DevOpsツール入門 #10:Kubernetes基本操作

DevOps Tools Introduction #10: Basic Kubernetes Operations

DevOps Tools Engineer 2.0試験の目標703.2では、「Kubernetesの基本操作」が扱われます。この分野は試験の中でも重要な割合を占めており、Kubernetes上でアプリケーションをデプロイおよび管理する方法について、しっかりとした理解が求められます。受験者は、次のことができる必要があります。

  • 宣言的なYAMLファイルを用いてKubernetesリソースを操作できる
  • Podが基本的な実行単位であることを理解している
  • Deploymentを使ってアプリケーションのライフサイクル(スケーリングやローリングアップデートを含む)を管理できる
  • ServiceやIngressを使ってアプリケーションを公開する方法を理解している
  • PersistentVolumeClaimを用いて永続ストレージを提供できる

この目標は非常に重要であるため、概念の理解だけでなく、Kubernetesクラスターを使った実践的な演習にも十分な時間を割く必要があります。


YAMLファイルを用いたKubernetesリソースの宣言

Kubernetesのリソースは通常、YAMLファイルを用いた宣言的な方法で定義されます。これらのファイルはシステムの「望ましい状態」を記述し、Kubernetesは実際の状態がその定義と一致するように管理します。この宣言的な構成により、バージョン管理、再現性、自動化といったDevOpsの重要な原則を実現できます。

一般的なKubernetesのYAMLファイルには、以下の要素が含まれます。

  • apiVersion:Kubernetesコントローラと通信するAPIのバージョン
  • kind:リソースの種類
  • metadata:名前やラベルなどのリソース情報
  • spec:望ましい状態の定義

以下はシンプルなPod定義の例です。

apiVersion: v1
kind: Pod
metadata:
name: my-pod
labels:
app: web
spec:
containers:
– name: nginx
image: nginx:latest
ports:
– containerPort: 80

リソースを作成するには、次のコマンドを実行します。

$ kubectl apply -f pod.yaml

Podの基本概念

PodはKubernetesにおける最小のデプロイ単位です。1つ以上のコンテナをまとめた単位であり、以下を共有します。

  • 同一のネットワーク名前空間(IPアドレスやポート)
  • 共有ストレージボリューム
  • ライフサイクル管理

Podは本質的に一時的(エフェメラル)な存在であり、通常はDeploymentなどの上位コントローラによって管理されます。

以下は複数コンテナを持つPodの例です。

apiVersion: v1
kind: Pod
metadata:
name: multi-container-pod
spec:
containers:
– name: app
image: myapp:1.0
– name: sidecar
image: log-collector:1.0

このYAMLでは、同一環境内で2つのコンテナが動作します。

  • appコンテナ:メインアプリケーション(myapp:1.0)
  • sidecarコンテナ:ログ収集などの補助機能(log-collector:1.0)

両コンテナはlocalhostで通信可能で、ストレージも共有できます。この構成は「サイドカーパターン」と呼ばれます。


Deploymentの利用方法

DeploymentはPodを管理し、常に指定された数のレプリカが稼働するようにします。主な機能は以下の通りです。

  • 宣言的アップデート
  • 自己修復(Podの再作成)
  • スケーリング
  • ローリングアップデートおよびロールバック

例:

apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
– name: nginx
image: nginx:1.25
ports:
– containerPort: 80

この設定では、常に3つのPodが稼働します。


スケーリング

$ kubectl scale deployment web-deployment –replicas=5

ローリングアップデート

$ kubectl set image deployment/web-deployment nginx=nginx:1.26

停止時間なしで段階的に更新されます。


ロールバック

$ kubectl rollout undo deployment/web-deployment

問題発生時に以前の状態へ戻せます。


サービスの公開方法

Kubernetesでは、内部および外部からアプリケーションにアクセスするために複数の仕組みが用意されています。

Service

ServiceはPod群への安定したアクセス手段を提供します。Podは頻繁に作成・削除されるため、直接IPでの通信は適していません。

主な種類:

  • ClusterIP:クラスタ内部通信
  • NodePort:各ノードのポートで公開
  • LoadBalancer:クラウドのロードバランサを利用

例:

apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
– port: 80
targetPort: 80
type: ClusterIP

Ingress

IngressはHTTP/HTTPSのルーティングを制御します。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
spec:
rules:
– host: example.com
http:
paths:
– path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80

※Ingressの利用にはIngress Controller(例:NGINX)が必要です。


永続ストレージ

コンテナは一時的なため、状態を保持するには永続ストレージが必要です。

主な要素:

  • PersistentVolume(PV):実体ストレージ
  • PersistentVolumeClaim(PVC):ストレージ要求
  • StorageClass:動的プロビジョニング

PVCの例:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
– ReadWriteOnce
resources:
requests:
storage: 1Gi

この設定では、1GBのストレージを要求します。


Podでの利用例

apiVersion: v1
kind: Pod
metadata:
name: storage-pod
spec:
containers:
– name: app
image: nginx
volumeMounts:
– mountPath: /data
name: storage
volumes:
– name: storage
persistentVolumeClaim:
claimName: my-pvc

この設定により、/dataディレクトリに永続データを保存できます。


その他のKubernetesリソース

  • DaemonSet:すべて(または特定)のノードでPodを実行
  • StatefulSet:状態を持つアプリケーション向け
  • Job:一度きりの処理
  • CronJob:定期実行タスク

これらにより、さまざまな用途に対応できます。


DevOpsスキルを高め、コンテナオーケストレーションを習得するうえで、これらの理解は不可欠です。Linux Professional Instituteが提供するDevOps Tools Engineer試験の公式学習教材は無料で利用でき、試験範囲を網羅した非常に有用なリソースとなっています。

<< 本シリーズの前回記事を読む | 次回記事を読む >>

Authors

  • Fabian Thorns

    Fabian Thorns is the Director of Product Development at Linux Professional Institute, LPI. He is M.Sc. Business Information Systems, a regular speaker at open source events and the author of numerous articles and books. Fabian has been part of the exam development team since 2010. Connect with him on LinkedIn, XING or via email (fthorns at www.lpi.org).

  • Uirá Ribeiro

    Uirá Ribeiro is a distinguished leader in the IT and Linux communities, recognized for his vast expertise and impactful contributions spanning over two decades. As the Chair of the Board at the Linux Professional Institute (LPI), Uirá has helped shaping the global landscape of Linux certification and education. His robust academic background in computer science, with a focus on distributed systems, parallel computing, and cloud computing, gives him a deep technical understanding of Linux and free and open source software (FOSS). As a professor, Uirá is dedicated to mentoring IT professionals, guiding them toward LPI certification through his widely respected books and courses. Beyond his academic and writing achievements, Uirá is an active contributor to the free software movement, frequently participating in conferences, workshops, and events organized by key organizations such as the Free Software Foundation and the Linux Foundation. He is also the CEO and founder of Linux Certification Edutech, where he has been teaching online Linux courses for 20 years, further cementing his legacy as an educator and advocate for open-source technologies.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です