· 20 分で読める · 10,002 文字
CKA認定試験に3ヶ月で合格するスタディプラン:実践的なロードマップ
本記事では、Kubernetes Certified Administrator(CKA)認定試験に効率的に合格するための、実務に基づいた3ヶ月のスタディプランを紹介します。実装演習を中心とした学習アプローチにより、試験の実技問題で即座に対応できるスキルを習得できます。
CKA試験の概要と現状
Kubernetes Certified Administrator(CKA)は、The Linux Foundationが認定するKubernetes技術者向けの資格です。2024年現在、クラウドネイティブエコシステムの業界標準資格として認識されており、DevOps/SREエンジニアのキャリアにおいて大きなアドバンテージとなります。
試験の特徴を理解することが学習計画の第一歩です。以下が主要な特性です:
- 形式:実技試験のみ。ブラウザ環odynamicroc上のターミナルでKubernetes環境を操作
- 時間:2時間
- 問題数:通常15-20問
- 合格点:66%以上
- 試験環境:複数のKubernetes clusterへのアクセス権(Linux上のコマンドライン操作のみ)
実務では、CKAに合格したエンジニアは企業内のKubernetes環境の構築・保守・トラブルシューティングを独立して実行できるレベルと評価されます。筆者の経験上、CKA学習を通じて習得するclusterの診断スキルは、本番環境のインシデント対応で直結して活用できます。
学習前の準備:環境セットアップ
スタディプランを開始する前に、実践的な学習環境を整備することが非常に重要です。模擬試験環境と同じ条件で演習することが合格率を大幅に向上させます。
ローカル開発環境の構築
Docker DesktopまたはMinikubeを使用して、ローカルマシン上でKubernetesクラスタを立ち上げます:
# macOS / Windowsの場合:Docker Desktopに統合されたKubernetesを有効化
# 設定 > Kubernetes > Enable Kubernetesをチェック
# または、Minikubeでクラスタを起動
minikube start --nodes 3 --driver docker
# クラスタの確認
kubectl get nodes
kubectl get pods -A
必須ツールのインストール
CKA試験で直接使用するツールを事前にインストールして習熟します:
# kubectl:Kubernetes CLIツール
# macOSの場合
brew install kubectl
# kubectlのバージョン確認(試験対象バージョンと揃える)
kubectl version --client
# vim/nano:エディタ(試験環境で利用可能)
# 試験中はvimが最速のため、vimの基本操作を習得必須
# その他の有用なツール
brew install kubectx # context/namespace切り替え用
brew install stern # ログ監視用
試験環境の疑似環境構築
実際の試験では複数のクラスタへの切り替えが求められます。以下のコマンドで複数context環境をシミュレートします:
# 複数のクラスタをkubeconfigで管理
kubectl config get-contexts
# contextの切り替え(試験では頻繁に行う)
kubectl config use-context cluster1
kubectl config use-context cluster2
# contextの素早い確認
kubectl config current-context
3ヶ月スタディプラン:月別ロードマップ
効果的な学習を実現するため、以下の3段階のロードマップに従います:
flowchart TD
A["1ヶ月目:基礎構築
Podの作成・管理から始める"] --> B["2ヶ月目:実装スキル
Deployment/Service/Networkingの深掘り"]
B --> C["3ヶ月目:統合演習
複雑なシナリオと模擬試験"]
C --> D["合格"]
1ヶ月目:基礎知識と基本操作の定着
最初の1ヶ月は、Kubernetesの基本概念を理解し、CLIでの基本操作を反復演習します。
週1-2:Podとコンテナ管理
PodはKubernetesにおけるデプロイの最小単位です。この週はkubectl runとkubectl createを使い、多数のPod作成・削除演習を行います。
# Podの直接実行
kubectl run nginx-pod --image=nginx:latest
# Podの詳細確認
kubectl describe pod nginx-pod
# Podのログ確認
kubectl logs nginx-pod
# Pod内でのコマンド実行
kubectl exec -it nginx-pod -- /bin/bash
# Podの削除
kubectl delete pod nginx-pod
実務では、本番環境のトラブルシューティングでkubectl execを使用してコンテナ内を調査する頻度は非常に高いです。実際のシナリオとして、Podが起動しない場合のログ確認とイベント確認を何度も反復してください。
週3-4:Namespace・Label・Selector
複数環境(本番/ステージング/開発)を管理するため、Namespaceの概念は必須です:
# Namespaceの作成
kubectl create namespace production
kubectl create namespace staging
# Namespaceを指定してPodを作成
kubectl run app-pod --image=app:v1 --namespace=production
# すべてのNamespaceのPodを表示
kubectl get pods --all-namespaces
# デフォルトNamespaceの変更
kubectl config set-context --current --namespace=production
Labelは、リソースを分類・検索するKubernetesの重要な機能です。試験では頻繁にLabel selectorで特定のポッドを検索する問題が出題されます:
# Labelを指定してPodを作成
kubectl run web-server --image=nginx --labels="tier=frontend,env=prod"
# Labelで検索
kubectl get pods -l tier=frontend
# 複数のLabelで検索(AND条件)
kubectl get pods -l tier=frontend,env=prod
# Labelで除外検索
kubectl get pods -l tier!=backend
2ヶ月目:ワークロードと通信層の実装
2ヶ月目は、本番環境で実際に使用される主要なリソースの作成・管理を深掘りします。
週5-6:Deployment・ReplicaSet・StatefulSet
Deploymentは、Podの自動スケーリング・ローリングアップデートを管理する最重要リソースです。YAML宣言による定義を習得します:
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
namespace: production
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: web-app:v1
ports:
- containerPort: 8080
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"
このファイルをkubectl apply -f deployment.yamlで適用し、以下の操作を繰り返し練習します:
# Deploymentのステータス確認
kubectl get deployment -o wide
# Deploymentの詳細情報(イベントを含む)
kubectl describe deployment web-app
# ローリングアップデートのシミュレーション
kubectl set image deployment/web-app web-app=web-app:v2 --record
# アップデート履歴の確認
kubectl rollout history deployment/web-app
# 前のバージョンにロールバック
kubectl rollout undo deployment/web-app
実務では、不具合が発生した際にkubectl rollout undoで即座に前バージョンに戻すことが重要です。試験でもロールバック操作は頻出です。
週7-8:Service・Ingress・ネットワークポリシー
Serviceは、Pod群への通信を管理する抽象層です。CKA試験では、Service types(ClusterIP、NodePort、LoadBalancer)の使い分けが問われます:
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: web-service
namespace: production
spec:
type: LoadBalancer
selector:
app: web-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
nodePort: 30080
# Service作成後の動作確認
kubectl get svc -o wide
# Service経由でのPod通信テスト
kubectl run test-pod --image=busybox -it --rm -- wget http://web-service
Ingressは、HTTP/HTTPSレベルでのルーティングを定義します。試験では、複数のドメインを同一clusterで管理するシナリオが出題されることがあります:
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api-service
port:
number: 8080
- host: app.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: app-service
port:
number: 80
3ヶ月目:トラブルシューティング・セキュリティ・本番シナリオ
最終月は、複雑な実装シナリオと試験頻出のトラブルシューティング技法を習得します。
週9-10:クラスタ管理・リソースクォータ・Pod Disruption Budget
本番環境のクラスタでは、リソース使用率の管理が重要です:
# ResourceQuota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
namespace: production
spec:
hard:
requests.cpu: "10"
requests.memory: "20Gi"
limits.cpu: "20"
limits.memory: "40Gi"
pods: "50"
# Pod Disruption Budget(Podの強制削除からの保護)
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: web-app-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: web-app
週11-12:模擬試験と実践問題
最後の2週間は、以下のリソースを活用して模擬試験を複数回実施します。試験本番では時間管理が重要なため、時間を制限した環境下での演習が必須です:
- Linux Foundation公式CKAページ:試験範囲の確認
- Kubernetes公式ドキュメント:完全な参考資料
- 市販のCKA模擬試験プラットフォーム(Udemy「CKA Practice Exams」など)
試験頻出トピックの実装演習
CKA試験で出題頻度が特に高いトピックについて、実装例を示します。
セキュリティコンテキストとRBAC
Podのセキュリティレベルを制御するためのセキュリティコンテキストは、試験で頻出します:
# secure-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: secure-app
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 2000
containers:
- name: app
image: app:v1
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
emptyDir: {}
Role-Based Access Control(RBAC)を使用したアクセス制御も必須です:
# role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
namespace: production
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]
---
# rolebinding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: production
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: pod-reader
subjects:
- kind: ServiceAccount
name: default
namespace: production
ストレージ管理:PersistentVolume・PersistentVolumeClaim
ステートフルなアプリケーションのストレージ管理は、CKA試験で頻出のシナリオです:
# pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-data
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
storageClassName: standard
hostPath:
path: "/mnt/data"
---
# pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-data
namespace: production
spec:
accessModes:
- ReadWriteOnce
storageClassName: standard
resources:
requests:
storage: 5Gi
---
# Pod内での使用例
apiVersion: v1
kind: Pod
metadata:
name: data-app
namespace: production
spec:
containers:
- name: app
image: app:v1
volumeMounts:
- name: storage
mountPath: /data
volumes:
- name: storage
persistentVolumeClaim:
claimName: pvc-data
ジョブとCronJob
一度実行限りのタスク(Job)と定期実行タスク(CronJob)の管理も試験範囲です:
# job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: backup-job
namespace: production
spec:
backoffLimit: 3
completions: 1
parallelism: 1
template:
spec:
containers:
- name: backup
image: backup-tool:v1
command: ["backup.sh"]
restartPolicy: Never
---
# cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: daily-backup
namespace: production
spec:
schedule: "0 2 * * *" # 毎日2時
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: backup-tool:v1
command: ["backup.sh"]
restartPolicy: OnFailure
試験中のハマりポイントと対策
context切り替えの遅延
CKA試験では、複数のクラスタ間を頻繁に切り替える必要があります。ここで重要な落とし穴があります:
# 現在のcontextを確認して、間違ったクラスタで作業するのを防ぐ
kubectl config current-context
# 正しいcontextに切り替えてから作業開始
kubectl config use-context cluster2
# 問題文に「cluster2で実行する」と書かれていても、うっかり前のcontextで作業してしまう
# 対策:毎回の作業前に、必ずcurrent-contextを確認する習慣をつける
試験では問題文を再度確認する時間がもったいないと感じるかもしれませんが、間違ったclusterで操作して時間を無駄にするほうが遥かに損失です。
Namespaceの忘却
問題で「productionネームスペースで実行」と指定されているのに、デフォルトネームスペース(default)で作業してしまうケースは非常に多いです。YAML定義時の対策:
# 常にmetadata内にnamespaceを明記する
apiVersion: v1
kind: Pod
metadata:
name: my-pod
namespace: production # ← 必ず明記
spec:
containers:
- name: app
image: app:v1
エディタでの行末スペース・インデント誤り
Kubernetesマニフェストは厳密なYAML形式が必須です。vimでの編集時にスペースとタブが混在するとパースエラーになります:
# vimの設定ファイル(~/.vimrc)に以下を追加
set expandtab # タブをスペースに変換
set tabstop=2 # スペース2個
set shiftwidth=2 # インデント幅
# 試験環境ではこの設定が利用できない可能性があるため、事前に試験環境と同じ条件で演習
ツール・リソース活用方法
kubectlのオートコンプリーション
試験では、コマンド入力の時間短縮が得点に直結します:
# bash環境でのオートコンプリート設定
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
# zsh環境の場合
source <(kubectl completion zsh)
echo "source <(kubectl completion zsh)" >> ~/.zshrc
kubeconfigの複数環境管理
複数のクラスタを効率的に管理するため、kubeconfigファイルを整理します:
# 複数のkubeconfigマージ
export KUBECONFIG=/path/to/config1:/path/to/config2:/path/to/config3
kubectl config view --merge
# contextの確認
kubectl config get-contexts
クラスタの状態診断
試験シナリオでは、クラスタの問題を素早く診断する能力が求められます:
# ノードの状態確認
kubectl get nodes -o wide
kubectl describe node node-name
# 全リソースの確認
kubectl get all -A
# イベントの確認(トラブルシューティングで最初にすべき作業)
kubectl get events -A --sort-by='.lastTimestamp'
# Podが起動しない場合の診断フロー
kubectl get pods -n namespace
kubectl describe pod pod-name -n namespace
kubectl logs pod-name -n namespace
kubectl logs pod-name -n namespace --previous # クラッシュしたコンテナのログ
スタディプランのモニタリングと調整
学習進捗を定期的に測定し、弱点を特定することが合格率を高めます。以下のチェックリストを2週間ごとに確認してください:
stateDiagram-v2
[*] --> 基礎学習
基礎学習 --> 2週間チェック
2週間チェック --> 理解十分: YES
2週間チェック --> 復習必要: NO
復習必要 --> 基礎学習
理解十分 --> 次のトピック
次のトピック --> [*]
よくある質問
Kubernetesの基本知識(Pod、Deployment、Serviceの概念理解)が必須です。Linux/Unixのコマンドライン操作(viやbash)に習熟していることも重要です。筆者の経験上、事前にLinux基礎試験(LFCA)に合格しておくと、試験本番での操作がスムーズです。
CKA試験は英語のみ対応です。ただし、Google Chromeの翻訳機能を使用できます。事前に英語のKubernetes用語に慣れておくことをお勧めします。試験時間2時間が固定のため、日本語翻訳による時間消費は避けるべきです。
CKA資格は3年間有効です。更新するには、新たに試験に合格する必要があります。Kubernetes自体が急速に進化しているため、3年以内に新バージョン対応の学習を行うことは実務上必須です。
はい。1回目の受験に失敗した場合、14日以内に追加料金なしで再受験できます(ただしサポート体制に依存)。筆者の知人で、1回目落選後2週間で再受験して合格したケースもあります。最初の受験は、本試験の形式と時間管理を学ぶ機会と位置づけるのも戦略です。
まとめ
- 環境準備が重要:Docker Desktop/Minikubeでローカル環境を構築し、試験環境と同じ条件で演習する
- 月別ロードマップに従う:1ヶ月目は基礎、2ヶ月目は実装、3ヶ月目は統合演習というステップで着実に習得できる
- 実装演習を重視:YAMLマニフェストの手作成、kubectl操作の反復が、試験の実技問題への対応力を高める
- トラブルシューティング技法の習得:context確認、ログ確認、イベント確認といった診断フローを体に染み込ませる
- ハマりポイント対策:Namespace忘却、context切り替え失敗は、試験中の時間無駄の主原因。チェックリストを確立する
- 学習期間中の定期評価:2週間ごとに進捗をチェックし、弱点を特定して補強する
- 公式ドキュメントの活用:試験本番ではKubernetes公式ドキュメントへのアクセスが許可されるため、試験対策期間中からドキュメント検索の効率化を練習する
CKA認定試験は、Kubernetes実務スキルの客観的評価基準として、業界で高く認識されています。本スタディプランに沿った継続的な学習により、3ヶ月での合格は十分に達成可能です。試験合格後は、クラウドネイティブインフラの設計・運用という更に高度な領域へのキャリア展開が期待できます。