ViktorUJ/cks

GitHub: ViktorUJ/cks

基于 AWS 和 Terraform 构建的 Kubernetes 认证考试实操与模拟平台,覆盖 CKA/CKS/CKAD/ICA/LFCS 等多项认证。

Stars: 1403 | Forks: 266

# 欢迎来到 SRE Learning Platform!

SRE Learning Platform

**SRE Learning Platform** 是一个开源中心,旨在帮助 IT 工程师有效准备 **CKA (Certified Kubernetes Administrator)**、**CKS (Certified Kubernetes Security Specialist)**、**CKAD (Certified Kubernetes Application Developer)** 和 **LFCS (Linux Foundation Certified System Administrator)** 考试。此外,该平台还提供了 **AWS EKS (Elastic Kubernetes Service)** 的宝贵实践经验,为用户提供实际应用的实用见解。无论您的目标是验证技能、提升 Kubernetes 管理、安全或应用开发方面的职业前景,还是深入研究 AWS EKS,该平台都提供动手实验、模拟测试和专家指导,助您成功通过认证。 - 准备 **CKA**:[Certified Kubernetes Administrator Exam](https://training.linuxfoundation.org/certification/certified-kubernetes-administrator-cka/) - 提升 **CKS** 技能:[Certified Kubernetes Security Specialist Exam](https://training.linuxfoundation.org/certification/certified-kubernetes-security-specialist/) - 在 **CKAD** 中脱颖而出:[Certified Kubernetes Application Developer Exam](https://training.linuxfoundation.org/certification/certified-kubernetes-application-developer-ckad/) - 在 **ICA** 中脱颖而出: [Istio Certified Associate Exam](https://training.linuxfoundation.org/certification/istio-certified-associate-ica/) - 准备 **KCNA**:[Kubernetes and Cloud Native Associate](https://training.linuxfoundation.org/certification/kubernetes-cloud-native-associate/) - 准备 **KCSA**:[Kubernetes and Cloud Native Security Associate](https://training.linuxfoundation.org/certification/kubernetes-and-cloud-native-security-associate-kcsa/) - 准备 **LFCS**:[Linux Foundation Certified System Administrator](https://training.linuxfoundation.org/certification/linux-foundation-certified-sysadmin-lfcs/) - 准备 **KCNA**:[Kubernetes and Cloud Native Associate](https://training.linuxfoundation.org/certification/kubernetes-cloud-native-associate/) - 准备 [AWS Certified AI Practitioner](https://aws.amazon.com/certification/certified-ai-practitioner/) 通过 **SRE Learning Platform** 掌握 Kubernetes 概念,获得实践经验,并在 CKA、CKS 和 CKAD 考试中脱颖而出。 ## 快速开始 [通过 docker 运行](docs%2Frun_from_docker.MD) [![视频教程](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/5f60cd0de7212108.gif)](https://youtu.be/Xh6sWzafBmw "run via docker")
环境要求 - [GNU Make](https://www.gnu.org/software/make/) >= 4.2.1 - [terrafrom](https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli) >= v1.6.6 - [terragrunt](https://terragrunt.gruntwork.io/docs/getting-started/install/) >= v0.54.8 - [jq](https://jqlang.github.io/jq/download/) >= 1.6 - [aws IAM user](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html) + [Access key](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) (或 [IAM role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) ) 且具有 [VPC, EC2, IAM, EKS 的管理员权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) - [AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-version.html) > 2.2.30 - [aws profile](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html) **或者您可以** [通过 docker 运行](docs%2Frun_from_docker.MD) ( [视频教程](https://youtu.be/Xh6sWzafBmw) )
仓库结构 本仓库由以下几个部分组成: - **[Makefile](Makefile)** - 包含用于启动动手实验和模拟考试场景的文件。 - **[tasks](tasks)** - 包含实验场景和模拟考试脚本的目录。 - **[cka](tasks%2Fcka)** - 包含与 CKA 相关的所有内容的目录。 - **[labs](tasks%2Fcka%2Flabs)** - 包含 CKA 考试动手实验的目录。 - **[mock](tasks%2Fcka%2Fmock)** - 包含 CKA 考试模拟脚本的目录。 - **[cks](tasks%2Fcks)** - 包含与 CKS 相关的所有内容的目录。 - **[labs](tasks%2Fcks%2Flabs)** - 包含 CKS 考试动手实验的目录。 - **[mock](tasks%2Fcks%2Fmock)** - 包含 CKS 考试模拟脚本的目录。 - **[terraform](terraform)** - 包含模块和 Terraform 环境的目录。 - **[environments](terraform%2Fenvironments)** - 包含 terragrunt (terraform) 环境的目录。 - **[modules](terraform%2Fmodules)** - 包含 terraform 模块的目录。
关于 CKA, CKS, CKAD 场景 - 该平台使用 **aws** 创建以下资源:**vpc**、**subnets**、**security groups**、**ec2** (spot )、**s3** - 启动场景后,平台将创建所有必要的资源并授予对 k8s 集群的访问权限。 - 为了创建集群,平台使用 **kubeadm** - 您可以使用现有的 terraform 模块 [k8s_self_managment](terraform%2Fmodules%2Fk8s_self_managment) 轻松添加您自己的场景 - [k8s_self_managment](terraform%2Fmodules%2Fk8s_self_managment) 模块支持以下版本: ``` k8s version : [ 1.21 , 1.34 ] https://kubernetes.io/releases/ Rintime : docker [1.21 , 1.23] cri-o [1.21 , 1.29] containerd [1.21 , 1.33] # cks, cka default 1.33 containerd_gvizor [1.21 , 1.33] OS for nodes : ubuntu : 20.04 LTS , 22.04 LTS # cks default 22.04 LTS CNI : calico ,culium ```
## 配置 - 在 [terraform/environments/terragrunt.hcl](terraform%2Fenvironments%2Fterragrunt.hcl#L4) 中修改 **backend_bucket** ( 可选:**region** , **backend_region** ) : ## 命令 每个命令都应从项目的根目录运行。
CMDB - ``make cmdb_get_env_all`` - 获取 CMDB 中所有资源的列表 - ``USER_ID='myuser' ENV_ID='01' make cmdb_get_user_env_data`` - 显示用户 **myuser** 在环境 **01** 中所有已创建的资源 - ``USER_ID='myuser' ENV_ID='01' make cmdb_get_user_env_lock`` - 显示用户 **myuser** 在环境 **01** 中所有锁定的资源 - ``USER_ID='myuser' ENV_ID='01' make cmdb_get_user_env_lock`` - 显示用户 **myuser** 在环境 **01** 中所有锁定的资源 - ``USER_ID='myuser' make cmdb_get_user_env_lock`` - 显示用户 **myuser** 在 **所有** 环境中所有锁定的资源 - ``USER_ID='myuser' make cmdb_get_user_env_data`` - 显示用户 **myuser** 在 **所有** 环境中所有数据资源 - ``CMDB_ITEM='CMDB_data_myuser_02_k8s_cluster1' make cmdb_get_item`` - 获取关于 **CMDB_data_myuser_02_k8s_cluster1** 资源的详细信息。
CKA ### cka 任务 - ``TASK=01 make run_cka_task`` - 创建编号为 01 的 cka [动手实验](docs%2Flabs.MD#cka-labs) - ``TASK=01 make delete_cka_task`` - 删除 cka 动手实验 - ``TASK=01 make run_cka_task_clean`` - 运行 cka_task 并清理 cka_task 的 terragrunt 缓存 - ``make output_cka_task `` - 显示 **cka_task** 的 **输出** ### cka 模拟 - ``TASK=01 make run_cka_mock`` - 创建 [编号 01](tasks%2Fcka%2Fmock%2F01) 的 CKA 模拟考试 - ``make delete_cka_mock`` - 删除 CKA 模拟考试 - ``TASK=01 make run_cka_mock_clean`` - 创建 [编号 01](tasks%2Fcka%2Fmock%2F01) 的 CKA 模拟考试并清理 terragrunt 缓存 - ``make output_cka_mock `` - 显示 **cka_mock** 的 **输出**
CKAD ### ckad 模拟 - ``TASK=01 make run_ckad_mock`` - 创建 [编号 01](tasks%2Fckad%2Fmock%2F01) 的 CKAD 模拟考试 - ``make delete_ckad_mock`` - 删除 CKAD 模拟考试 - ``TASK=01 make run_ckad_mock_clean`` - 创建 [编号 01](tasks%2Fckad%2Fmock%2F01) 的 CKAD 模拟考试并清理 terragrunt 缓存 - ``make output_ckad_mock `` - 显示 **ckad_mock** 的 **输出**
CKS ### cks 任务 - ``TASK=10 make run_cks_task`` - 创建编号为 10 的 cks [动手实验](docs%2Flabs.MD#cks-labs) - ``TASK=10 make delete_cks_task`` - 删除 cks 动手实验 - ``TASK=10 make run_cks_task_clean`` - 运行 cks_task 并清理 cks_task 的 terragrunt 缓存 - ``make output_cks_task `` - 显示 **cks_task** 的 **输出** ### cks 模拟 - ``TASK=01 make run_cks_mock`` - 创建 [编号 01](tasks%2Fcks%2Fmock%2F01) 的 CKS 模拟考试 - ``make delete_cks_mock`` - 删除 CKS 模拟考试 - ``TASK=01 make run_cks_mock_clean`` - 创建 [编号 01](tasks%2Fcks%2Fmock%2F01) 的 CKS 模拟考试并清理 terragrunt 缓存 - ``make output_cks_mock `` - 显示 **cks_mock** 的 **输出**
ICA ### cks 任务 - ``TASK=10 make run_ica_task`` - 创建编号为 10 的 cks [动手实验](docs%2Flabs.MD#cks-labs) - ``TASK=10 make delete_ica_task`` - 删除 cks 动手实验 - ``TASK=10 make run_ica_task_clean`` - 运行 cks_task 并清理 cks_task 的 terragrunt 缓存 - ``make output_cks_task `` - 显示 **cks_task** 的 **输出** ### cks 模拟 - ``TASK=01 make run_ica_mock`` - 创建 [编号 01](tasks%2Fcks%2Fmock%2F01) 的 CKS 模拟考试 - ``make delete_ica_mock`` - 删除 CKS 模拟考试 - ``TASK=01 make run_ica_mock_clean`` - 创建 [编号 01](tasks%2Fcks%2Fmock%2F01) 的 CKS 模拟考试并清理 terragrunt 缓存 - ``make output_ica_mock `` - 显示 **cks_mock** 的 **输出**
LFCS ### lfcs 模拟 - ``TASK=01 make run_lfcs_mock`` - 创建 [编号 01](tasks/lfcs/mock/01/) 的 LFCS 模拟考试 - ``make delete_lfcs_mock`` - 删除 LFCS 模拟考试 - ``TASK=01 make delete_lfcs_mock_clean`` - 删除 [编号 01](tasks/lfcs/mock/01/) 的 LFCS 模拟考试并清理 terragrunt 缓存 - ``make output_lfcs_mock`` - 显示 **lfcs_mock** 的 **输出**
KCNA ### KCNA - 在 [kcna](tasks%2Fkcna) 目录中查看示例问题
KCSA - 在 [kcsa](tasks%2Fkcsa) 目录中查看示例问题
HR - ``TASK=01 make run_hr_mock`` - 创建 [编号 01](tasks%2Fhr%2Fmock%2F01) 的 hr 模拟考试 - ``make delete_hr_mock`` - 删除 hr 模拟考试 - ``TASK=01 make run_hr_mock_clean`` - 创建 [编号 01](tasks%2Fhr%2Fmock%2F01) 的 CKS 模拟考试并清理 terragrunt 缓存 - ``make output_hr_mock `` - 显示 **hr_mock** 的 **输出**
EKS - ``TASK={lab_number} make run_eks_task`` 创建动手实验 - ``make delete_eks_task`` 删除 eks 实验集群
DEV - ``make lint`` 在项目上运行 linter
## 使用场景
AWS Certified AI Practitioner ### **AWS Certified AI Practitioner** 考试示例问题 - 在 [AWS Certified AI Practitioner](tasks/aws_AI_practitioner) 目录中查看示例问题
CKA 动手实验 - 选择一个 [动手实验](docs%2Flabs.MD#cka-labs) 编号 - 创建 cka 实验集群 ``TASK={lab_number} make run_cka_task`` - 在 terraform output 中找到 {master_external_ip} - 通过 ssh 登录到 master 节点 ``ssh ubuntu@{master_external_ip} -i {key}`` - 检查初始化日志 `` tail -f /var/log/cloud-init-output.log `` - 阅读 ``{lab_number}/README.MD`` 中的实验描述 - 在 ``{lab_number}/SOLUTION.MD`` 中查看解决方案 - 删除 cka 实验集群 ``make delete_cka_task`` - 清理 cka 实验集群的 ``.terraform`` 文件夹 ``make clean_cka_task ``
CKA 模拟考试 [启动 **CKA 模拟考试** 的视频教程](https://www.youtube.com/watch?v=P-YYX4CTWIg) - 选择一个 [模拟考试](tasks%2Fcka%2Fmock) 编号 - 如有需要,在 ``{mock_number}/env.hcl`` 中将实例类型从 ``spot`` 更改为 ``ondemand`` - 创建 CKA 模拟考试 ``TASK={mock_number} make run_cka_mock`` - 在 ``terraform output`` 中找到 ``worker_pc_ip`` - 使用您的 ssh 密钥和用户 ``ubuntu`` 连接到 ``worker_pc_ip`` - 打开问题列表 ``{mock_number}/README.MD`` 并完成任务 - 从 work pc 使用 ``ssh {kubernetes_nodename}`` 连接到节点 - 在 work pc 上运行 ``time_left`` 以检查时间 - 在 work pc 上运行 ``check_result`` 以检查结果 - 删除 CKA 模拟考试 `make delete_cka_mock` - 在 ``{mock_number}/worker/files/solutions)`` 中查找考试解决方案,以及 [模拟 01](tasks%2Fcka%2Fmock%2F01) 的 *[视频](https://youtu.be/IZsqAPpbBxM)*。 - 在 ``{mock_number}/worker/files/tests.bats)`` 中查找考试测试
CKS 动手实验 - 选择 [CKS 实验](docs%2Flabs.MD#cks-labs) 编号 - 如果您更改了 **region**,请修改 ``{lab_number}/scripts/terragrunt.hcl`` 中的 **ami_id** - 创建 cka 实验集群 ``TASK={lab_number} make run_cks_task`` - 在 terraform output 中找到 {master_external_ip} - 通过 ssh 登录到 master 节点 ``ssh ubuntu@{master_external_ip} -i {key}`` - 检查初始化日志 `` tail -f /var/log/cloud-init-output.log `` - 阅读 ``{lab_number}/README.MD`` 中的实验描述 - 在 ``{lab_number}/SOLUTION.MD`` 中查看解决方案 - 删除 cks 实验集群 ``make delete_cks_task`` - 清理 cks 实验集群的 ``.terraform`` 文件夹 ``make clean_cks_task ``
CKS 模拟考试 [启动 **CKS 模拟考试** 的视频教程](https://youtu.be/_GbsBOMaJ9Q) ### CKS 模拟考试 - 选择一个 [模拟考试](tasks%2Fcks%2Fmock) 编号 - 如有需要,在 ``{mock_number}/env.hcl`` 中修改 **ubuntu_version** - 如有需要,在 ``{mock_number}/env.hcl`` 中将实例类型从 ``spot`` 更改为 ``ondemand`` - 创建 CKS 模拟考试 ``TASK={mock_number} make run_cks_mock`` 或 ``TASK={mock_number} make run_cks_mock_clean``(如果您希望使用**干净的** terragrunt 缓存运行) - 在 ``terraform output`` 中找到 ``worker_pc_ip`` - 使用您的 ssh 密钥和用户 ``ubuntu`` 连接到 ``worker_pc_ip`` - 打开问题列表 ``{mock_number}/README.MD`` 并完成任务 - 从 work pc 使用 ``ssh {kubernetes_nodename}`` 连接到节点 - 在 work pc 上运行 ``time_left`` 以检查时间 - 在 work pc 上运行 ``check_result`` 以检查结果 - 删除 CKS 模拟考试 `make delete_cks_mock` - 在 ``{mock_number}/worker/files/solutions`` 中查找考试解决方案 [模拟 1 解决方案](tasks%2Fcks%2Fmock%2F01%2Fworker%2Ffiles%2Fsolutions) 和 [视频](https://youtu.be/I8CPwcGbrG8) - 在 ``{mock_number}/worker/files/tests.bats`` 中查找考试测试
ICA 模拟考试 ### ICA 模拟考试 - 选择一个 [模拟考试](tasks%2Fica%2Fmock) 编号 - 如有需要,在 ``{mock_number}/env.hcl`` 中修改 **ubuntu_version** - 如有需要,在 ``{mock_number}/env.hcl`` 中将实例类型从 ``spot`` 更改为 ``ondemand`` - 创建 CKS 模拟考试 ``TASK={mock_number} make run_ica_mock`` 或 ``TASK={mock_number} make run_ica_mock_clean``(如果您希望使用**干净的** terragrunt 缓存运行) - 在 ``terraform output`` 中找到 ``worker_pc_ip`` - 使用您的 ssh 密钥和用户 ``ubuntu`` 连接到 ``worker_pc_ip`` - 打开问题列表 ``{mock_number}/README.MD`` 并完成任务 - 从 work pc 使用 ``ssh {kubernetes_nodename}`` 连接到节点 - 在 work pc 上运行 ``time_left`` 以检查时间 - 在 work pc 上运行 ``check_result`` 以检查结果 - 删除 CKS 模拟考试 `make delete_ica_mock` - 在 ``{mock_number}/worker/files/solutions`` 中查找考试解决方案 [模拟 1 解决方案](tasks%2Fica%2Fmock%2F01%2Fworker%2Ffiles%2Fsolutions) 和 [视频](https://youtu.be/I8CPwcGbrG8) - 在 ``{mock_number}/worker/files/tests/`` 中查找考试测试
CKAD 模拟考试 [启动 **CKAD 模拟考试** 的视频教程](https://youtu.be/7X4Y9QhbTsk) ### CKAD 模拟考试 - 选择一个 [模拟考试](tasks%2Fckad%2Fmock) 编号 - 如有需要,在 ``{mock_number}/env.hcl`` 中修改 **ubuntu_version** - 如有需要,在 ``{mock_number}/env.hcl`` 中将实例类型从 ``spot`` 更改为 ``ondemand`` - 创建 CKAD 模拟考试 ``TASK={mock_number} make run_ckad_mock`` 或 ``TASK={mock_number} make run_ckad_mock_clean``(如果您希望使用**干净的** terragrunt 缓存运行) - 在 ``terraform output`` 中找到 ``worker_pc_ip`` - 使用您的 ssh 密钥和用户 ``ubuntu`` 连接到 ``worker_pc_ip`` - 打开问题列表 ``{mock_number}/README.MD`` 并完成任务 - 从 work pc 使用 ``ssh {kubernetes_nodename}`` 连接到节点 - 在 work pc 上运行 ``time_left`` 以检查时间 - 在 work pc 上运行 ``check_result`` 以检查结果 - 删除 CKAD 模拟考试 `make delete_ckad_mock` - 在 ``{mock_number}/worker/files/solutions`` 中查找考试解决方案 [模拟 1 解决方案](tasks%2Fckad%2Fmock%2F01%2Fworker%2Ffiles%2Fsolutions) 和 [视频](https://youtu.be/yQK7Ca8d-yw) - 在 ``{mock_number}/worker/files/tests.bats`` 中查找考试测试
KCNA ### KCNA 考试示例问题 - 在 [kcna](tasks%2Fkcna) 目录中查看示例问题
KCSA ### KCSA 考试示例问题 - 在 [kcsa](tasks%2Fkcsa) 目录中查看示例问题
HR 模拟考试 [启动 **HR 模拟考试** 的视频教程](https://youtu.be/4CTC1jl8lxE) ### HR 模拟考试 - 选择一个 [模拟考试](tasks%2Fhr%2Fmock) 编号 - 如有需要,在 ``{mock_number}/env.hcl`` 中修改 **ubuntu_version** - 如有需要,在 ``{mock_number}/env.hcl`` 中将实例类型从 ``spot`` 更改为 ``ondemand`` - 创建 CKS 模拟考试 ``TASK={mock_number} make run_hr_mock`` 或 ``TASK={mock_number} make run_hr_mock_clean``(如果您希望使用**干净的** terragrunt 缓存运行) - 在 ``terraform output`` 中找到 ``worker_pc_ip`` - 使用您的 ssh 密钥和用户 ``ubuntu`` 连接到 ``worker_pc_ip`` - 打开问题列表 ``{mock_number}/README.MD`` 并完成任务 - 从 work pc 使用 ``ssh {kubernetes_nodename}`` 连接到节点 - 在 work pc 上运行 ``time_left`` 以检查时间 - 在 work pc 上运行 ``check_result`` 以检查结果 - 删除 CKA 模拟考试 `make delete_hr_mock` - 在 ``{mock_number}/worker/files/solutions`` 中查找考试解决方案 [模拟 1 解决方案](tasks%2Fhr%2Fmock%2F01%2Fworker%2Ffiles%2Fsolutions) 和 [视频](https://youtu.be/4CTC1jl8lxE) - 在 ``{mock_number}/worker/files/tests.bats`` 中查找考试测试
EKS 动手实验 - 选择 [实验](docs%2Flabs.MD#eks-labs) 编号 - 创建动手实验 `` TASK={lab_number} make run_eks_task `` - 在 ``terraform output`` 中找到 ``worker_pc_ip`` - 通过 ssh 登录到 worker_pc 节点 ``ssh ubuntu@{worker_pc_ip} -i {key}`` - 阅读 ``{lab_number}/README.MD`` 中的实验描述 - 在 ``{lab_number}/SOLUTION.MD`` 中查看解决方案 - 删除 eks 实验集群 ``make delete_eks_task``
## [独立环境的并行工作](docs%2Fmultiple_users_envs.MD) ## [实用链接](docs%2Flinks.MD) ## [技巧与窍门](docs%2Ftips_and_tricks.MD) ## [更新日志](CHANGELOG%2FCHANGELOG.MD) ## [行为准则](docs%2FCODE_OF_CONDUCT.md) ## 贡献 如果您想成为项目开发团队的一员,请通过 [这里](https://github.com/ViktorUJ/cks/tree/master#contacts) 联系我们。我们始终欢迎新成员加入我们的开发团队。 如果您想说 **谢谢** 或/并支持 **SRE Learning Platform 项目** 的积极开发: - 在 Github 上 [Star](https://github.com/ViktorUJ/cks) **SRE Learning Platform 项目** - 欢迎在 [dev.to](https://dev.to/)、[medium](https://medium.com/)、[hackernoon](https://hackernoon.com) 或您的个人博客上撰写关于本项目的文章并分享您的经验 ## 许可证和使用协议 - [Apache License 2.0](LICENSE) ## 合作备考频道 - [cka](https://t.me/sre_platform_cka) - [cks](https://t.me/sre_platform_cks) - [ckad](https://t.me/sre_platform_ckad) ## 联系方式 如果您遇到任何问题或对项目有疑问,可以通过以下方式联系: [![email](https://badgen.net/badge/icon/email?icon=email&label)](mailto:viktoruj@gmail.com) [![Telegram](https://badgen.net/badge/icon/telegram?icon=telegram&label)](https://t.me/viktor_uj) [![LinkedI](https://badgen.net/badge/icon/linkedin?icon=linkedin&label)](https://www.linkedin.com/in/viktar-mikalayeu-mns)
标签:AWS EKS, CKA, CKAD, CKS, DNS解析, ECS, ICA, Istio, IT培训, KCNA, KCSA, LFCS, Linux基金会, SRE, Terraform, 偏差过滤, 备考资源, 子域名突变, 安全专家, 实验环境, 容器编排, 应用安全, 开源项目, 技能提升, 漏洞利用检测, 站点可靠性工程, 系统管理员, 网络调试, 自动化, 认证考试, 请求拦截