@k2works/claude-code-booster 4.17.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/assets/.claude/skills/apply-docs-structure/SKILL.md +88 -0
- package/lib/assets/.claude/skills/apply-docs-structure/evals/evals.json +40 -0
- package/lib/assets/.claude/skills/apply-docs-structure/scripts/docs_structure.py +207 -0
- package/lib/assets/.claude/skills/apply-okf/SKILL.md +88 -0
- package/lib/assets/.claude/skills/apply-okf/evals/evals.json +8 -0
- package/lib/assets/.claude/skills/apply-okf/scripts/__pycache__/okf_apply.cpython-314.pyc +0 -0
- package/lib/assets/.claude/skills/apply-okf/scripts/okf_apply.py +397 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.json +20 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/benchmark.md +13 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/eval_metadata.json +14 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/grading.json +39 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/001-db.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/002-cache-strategy.md +20 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/adr/index.md +4 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/data-model.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy-old.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/operation/index.md +4 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/with_skill/outputs/report.md +76 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/grading.json +39 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/001-db.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/002-cache-strategy.md +20 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/adr/index.md +4 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/data-model.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy-old.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/operation/index.md +4 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-1-register-new-adr/without_skill/outputs/report.md +22 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/eval_metadata.json +13 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/grading.json +34 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/001-db.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/adr/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/data-model.md +14 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy-old.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/operation/index.md +4 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/with_skill/outputs/report.md +61 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/grading.json +34 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/001-db.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/adr/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/data-model.md +13 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy-old.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/operation/index.md +4 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-2-verify-reviewed-doc/without_skill/outputs/report.md +18 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/eval_metadata.json +13 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/grading.json +34 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/001-db.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/adr/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/data-model.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy-old.md +13 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/operation/index.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/with_skill/outputs/report.md +83 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/grading.json +34 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/001-db.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/002-cache-strategy.md +11 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/adr/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/data-model.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/design/index.md +3 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/index.md +10 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy-old.md +14 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/deploy.md +12 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/operation/index.md +4 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/eval-3-deprecate-replaced-doc/without_skill/outputs/report.md +15 -0
- package/lib/assets/.claude/skills/apply-okf-workspace/iteration-1/review.html +1325 -0
- package/lib/assets/.claude/skills/closing-iteration/SKILL.md +16 -0
- package/lib/assets/.claude/skills/creating-adr/SKILL.md +4 -0
- package/lib/assets/.claude/skills/creating-journal/SKILL.md +12 -1
- package/lib/assets/.claude/skills/migrating-okf/SKILL.md +149 -0
- package/lib/assets/.claude/skills/migrating-okf/evals/evals.json +23 -0
- package/lib/assets/.claude/skills/migrating-okf/scripts/__pycache__/okf_check.cpython-314.pyc +0 -0
- package/lib/assets/.claude/skills/migrating-okf/scripts/okf_check.py +468 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.json +20 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/benchmark.md +13 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/eval_metadata.json +15 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/grading.json +44 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/adr/index.md +10 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/index.md +15 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/log.md +5 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +966 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference/index.md +6 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +261 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +480 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/docs_after/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +681 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/with_skill/outputs/report.md +85 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/grading.json +44 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/adr/index.md +8 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/index.md +11 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/log.md +7 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +964 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference/index.md +9 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +250 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +469 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/docs_after/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +677 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-1-migrate-docs/without_skill/outputs/report.md +49 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/eval_metadata.json +13 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/grading.json +34 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/index.md +7 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/log.md +7 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/metrics/churn.md +9 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/knowledge_after/metrics/income-statement.md +15 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/eval-2-upgrade-v01-to-v02/with_skill/outputs/report.md +147 -0
- package/lib/assets/.claude/skills/migrating-okf-workspace/iteration-1/review.html +1325 -0
- package/lib/assets/.claude/skills/opening-iteration/SKILL.md +15 -0
- package/lib/assets/.claude/skills/orchestrating-analysis/SKILL.md +7 -1
- package/lib/assets/.claude/skills/orchestrating-development/SKILL.md +4 -0
- package/lib/assets/.claude/skills/orchestrating-operation/SKILL.md +5 -2
- package/lib/assets/.claude/skills/orchestrating-project/SKILL.md +6 -1
- package/lib/assets/.claude/skills/planning-releases/SKILL.md +2 -0
- package/lib/assets/.env.example +9 -0
- package/lib/assets/CLAUDE.md +219 -216
- package/lib/assets/docs/article/functional-desgin-ppp/all/01-immutability-and-data-transformation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/02-function-composition.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/03-polymorphism.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/04-data-validation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/05-property-based-testing.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/06-tdd-and-functional.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/07-composite-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/08-decorator-pattern.md +10 -1
- package/lib/assets/docs/article/functional-desgin-ppp/all/09-adapter-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/10-strategy-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/11-command-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/12-visitor-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/13-abstract-factory-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/14-abstract-server-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/15-gossiping-bus-drivers.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/16-payroll-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/17-video-rental-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/18-concurrency-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/19-wa-tor-simulation.md +10 -1
- package/lib/assets/docs/article/functional-desgin-ppp/all/20-pattern-interactions.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/21-best-practices.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/all/22-oo-to-fp-migration.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/01-immutability-and-data-transformation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/02-function-composition.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/03-polymorphism.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/04-clojure-spec.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/05-property-based-testing.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/06-tdd-in-functional.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/07-composite-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/08-decorator-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/09-adapter-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/10-strategy-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/11-command-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/12-visitor-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/13-abstract-factory-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/14-abstract-server-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/15-gossiping-bus-drivers.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/16-payroll-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/17-video-rental-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/18-concurrency-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/19-wator-simulation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/20-pattern-interactions.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/21-best-practices.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/22-oo-to-fp-migration.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/clojure/index.md +3 -3
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/01-immutability-and-data-transformation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/02-function-composition.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/03-polymorphism.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/04-data-validation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/05-property-based-testing.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/06-tdd-and-fp.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/07-effects-and-pure-functions.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/08-error-handling-strategies.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/09-io-and-external-systems.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/10-concurrency-patterns.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/11-command-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/12-visitor-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/13-abstract-factory-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/14-abstract-server-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/15-gossiping-bus-drivers.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/16-payroll-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/17-video-rental-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/18-concurrency-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/19-wator-simulation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/20-pattern-interactions.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/21-best-practices.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/22-oo-to-fp-migration.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/elixir/index.md +22 -22
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/01-immutability-and-data-transformation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/02-function-composition.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/03-polymorphism.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/04-data-validation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/05-property-based-testing.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/06-tdd-functional.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/07-composite-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/08-decorator-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/09-adapter-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/10-strategy-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/11-command-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/12-visitor-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/13-abstract-factory-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/14-abstract-server-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/15-gossiping-bus-drivers.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/16-payroll-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/17-video-rental-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/18-concurrency-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/19-wator-simulation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/20-pattern-interactions.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/21-best-practices.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/fsharp/22-oo-to-fp-migration.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/01-immutability-and-data-transformation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/02-function-composition.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/03-polymorphism.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/04-data-validation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/05-property-based-testing.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/06-tdd-functional.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/07-composite-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/08-decorator-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/09-adapter-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/10-strategy-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/11-command-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/12-visitor-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/13-abstract-factory-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/14-abstract-server-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/15-gossiping-bus-drivers.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/16-payroll-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/17-video-rental-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/18-concurrency-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/19-wator-simulation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/20-pattern-interactions.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/21-best-practices.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/haskell/22-oo-to-fp-migration.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/01-immutability-and-data-transformation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/02-function-composition.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/03-polymorphism.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/04-data-validation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/05-property-based-testing.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/06-tdd-and-functional.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/07-composite-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/08-decorator-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/09-adapter-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/10-strategy-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/11-command-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/12-visitor-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/13-abstract-factory-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/14-abstract-server-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/15-gossiping-bus-drivers.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/16-payroll-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/17-video-rental-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/18-concurrency-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/19-wator-simulation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/20-pattern-interactions.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/21-best-practices.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/rust/22-oo-to-fp-migration.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/01-immutability-and-data-transformation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/02-function-composition.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/03-polymorphism.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/04-data-validation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/05-property-based-testing.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/06-tdd-functional.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/07-composite-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/08-decorator-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/09-adapter-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/10-strategy-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/11-command-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/12-visitor-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/13-abstract-factory-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/14-abstract-server-pattern.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/15-gossiping-bus-drivers.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/16-payroll-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/17-video-rental-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/18-concurrency-system.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/19-wator-simulation.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/20-pattern-interactions.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/21-best-practices.md +9 -0
- package/lib/assets/docs/article/functional-desgin-ppp/scala/22-oo-to-fp-migration.md +9 -0
- package/lib/assets/docs/article/getting-start-docker-kubernetes/01-container-and-docker-basics.md +341 -332
- package/lib/assets/docs/article/getting-start-docker-kubernetes/02-container-deployment.md +785 -776
- package/lib/assets/docs/article/getting-start-docker-kubernetes/03-practical-container-build-deploy.md +466 -457
- package/lib/assets/docs/article/getting-start-docker-kubernetes/04-multi-container-application.md +878 -869
- package/lib/assets/docs/article/getting-start-docker-kubernetes/05-kubernetes-introduction.md +585 -576
- package/lib/assets/docs/article/getting-start-docker-kubernetes/06-kubernetes-deploy-cluster.md +620 -611
- package/lib/assets/docs/article/getting-start-docker-kubernetes/07-kubernetes-advanced.md +621 -612
- package/lib/assets/docs/article/getting-start-docker-kubernetes/08-kubernetes-packaging.md +518 -509
- package/lib/assets/docs/article/getting-start-docker-kubernetes/09-container-operations.md +546 -537
- package/lib/assets/docs/article/getting-start-docker-kubernetes/10-optimal-container-image.md +640 -631
- package/lib/assets/docs/article/getting-start-docker-kubernetes/11-continuous-delivery.md +607 -598
- package/lib/assets/docs/article/getting-start-docker-kubernetes/12-container-use-cases.md +463 -454
- package/lib/assets/docs/article/getting-start-docker-kubernetes/13-case-monolith-compose-vs-kustomize.md +346 -337
- package/lib/assets/docs/article/getting-start-docker-kubernetes/14-case-event-driven-kustomize-vs-helm.md +324 -315
- package/lib/assets/docs/article/getting-start-docker-kubernetes/15-case-escqrs-axon-kustomize-vs-helm.md +297 -288
- package/lib/assets/docs/article/getting-start-docker-kubernetes/16-case-escqrs-kafka-kustomize-vs-helm.md +256 -247
- package/lib/assets/docs/article/getting-start-docker-kubernetes/17-case-comparison-summary.md +141 -132
- package/lib/assets/docs/article/getting-start-docker-kubernetes/18-case-load-testing.md +303 -294
- package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-a-dev-tools-setup.md +274 -265
- package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-b-orchestration-environments.md +530 -521
- package/lib/assets/docs/article/getting-start-docker-kubernetes/appendix-c-tips.md +519 -510
- package/lib/assets/docs/article/getting-start-docker-kubernetes/outline.md +220 -211
- package/lib/assets/docs/article/getting-start-tdd/clojure/01-todo-list-and-first-test.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/clojure/02-fake-it-and-triangulation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/clojure/03-obvious-implementation-and-refactoring.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/clojure/04-version-control-and-conventional-commits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/clojure/05-package-management-and-static-analysis.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/clojure/06-task-runner-and-ci-cd.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/clojure/07-protocols-and-records.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/clojure/08-multimethods-and-design-patterns.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/clojure/09-namespaces-and-module-design.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/clojure/10-higher-order-functions-and-composition.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/clojure/11-persistent-data-and-pipeline.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/clojure/12-error-handling-and-spec.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter01.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter02.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter03.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter04.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter05.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter06.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter07.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter08.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter09.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter10.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter11.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/csharp/chapter12.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/01-todo-list-and-first-test.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/02-fake-it-and-triangulation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/03-obvious-implementation-and-refactoring.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/04-version-control-and-conventional-commits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/05-package-management-and-static-analysis.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/06-task-runner-and-ci-cd.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/07-structs-and-protocols.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/08-pattern-matching-and-guards.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/09-module-design-and-behaviours.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/10-higher-order-functions-and-pipeline.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/11-stream-and-lazy-evaluation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/12-error-handling-and-with.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/elixir/index.md +2 -2
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter01.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter02.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter03.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter04.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter05.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter06.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter07.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter08.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter09.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter10.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter11.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/fsharp/chapter12.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/go/01-todo-list-and-first-test.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/go/02-fake-it-and-triangulation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/go/03-obvious-implementation-and-refactoring.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/go/04-version-control-and-conventional-commits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/go/05-package-management-and-static-analysis.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/go/06-task-runner-and-ci-cd.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/go/07-encapsulation-and-polymorphism.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/go/08-design-patterns.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/go/09-solid-principles-and-module-design.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/go/10-higher-order-functions-and-composition.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/go/11-immutable-data-and-pipeline.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/go/12-error-handling-and-type-safety.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/01-todo-list-and-first-test.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/02-fake-it-and-triangulation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/03-obvious-implementation-and-refactoring.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/04-version-control-and-conventional-commits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/05-package-management-and-static-analysis.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/06-task-runner-and-ci-cd.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/07-algebraic-data-types-and-type-classes.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/08-pattern-matching-and-guards.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/09-module-design-and-smart-constructors.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/10-higher-order-functions-and-currying.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/11-function-composition-and-point-free.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/haskell/12-monad-and-error-handling.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/integration/01-language-overview.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/integration/02-test-framework-comparison.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/integration/03-tdd-pattern-comparison.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/integration/04-type-system-comparison.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/integration/05-dev-environment-comparison.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/integration/06-learning-roadmap.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/01-todo-list-and-first-test.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/02-fake-it-and-triangulation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/03-obvious-implementation-and-refactoring.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/04-version-control-and-conventional-commits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/05-package-management-and-static-analysis.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/06-task-runner-and-ci-cd.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/07-encapsulation-and-polymorphism.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/08-design-patterns.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/09-solid-principles-and-module-design.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/10-higher-order-functions-and-composition.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/11-immutable-data-and-pipeline.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/java/12-error-handling-and-type-safety.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/01-todo-list-and-first-test.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/02-fake-it-and-triangulation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/03-obvious-implementation-and-refactoring.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/04-version-control-and-conventional-commits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/05-package-management-and-static-analysis.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/06-task-runner-and-ci-cd.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/07-encapsulation-and-polymorphism.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/08-design-patterns.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/09-solid-principles-and-module-design.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/10-higher-order-functions-and-composition.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/11-immutable-data-and-pipeline.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/node/12-error-handling-and-type-safety.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/php/01-todo-list-and-first-test.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/php/02-fake-it-and-triangulation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/php/03-obvious-implementation-and-refactoring.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/php/04-version-control-and-conventional-commits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/php/05-package-management-and-static-analysis.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/php/06-task-runner-and-ci-cd.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/php/07-encapsulation-and-polymorphism.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/php/08-design-patterns.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/php/09-solid-principles-and-module-design.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/php/10-higher-order-functions-and-composition.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/php/11-immutable-data-and-pipeline.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/php/12-error-handling-and-type-safety.md +8 -0
- package/lib/assets/docs/article/getting-start-tdd/python/01-todo-list-and-first-test.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/python/02-fake-it-and-triangulation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/python/03-obvious-implementation-and-refactoring.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/python/04-version-control-and-conventional-commits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/python/05-package-management-and-static-analysis.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/python/06-task-runner-and-ci-cd.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/python/07-encapsulation-and-polymorphism.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/python/08-design-patterns.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/python/09-solid-principles-and-module-design.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/python/10-higher-order-functions-and-composition.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/python/11-immutable-data-and-pipeline.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/python/12-error-handling-and-type-safety.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/01-todo-list-and-first-test.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/02-fake-it-and-triangulation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/03-obvious-implementation-and-refactoring.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/04-version-control-and-conventional-commits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/05-package-management-and-static-analysis.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/06-task-runner-and-ci-cd.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/07-encapsulation-and-polymorphism.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/08-design-patterns.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/09-solid-principles-and-module-design.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/10-higher-order-functions-and-composition.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/11-immutable-data-and-pipeline.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/ruby/12-error-handling-and-type-safety.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/01-todo-list-and-first-test.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/02-fake-it-and-triangulation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/03-obvious-implementation-and-refactoring.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/04-version-control-and-conventional-commits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/05-package-management-and-static-analysis.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/06-task-runner-and-ci-cd.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/07-encapsulation-and-polymorphism.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/08-design-patterns.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/09-solid-principles-and-module-design.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/10-higher-order-functions-and-composition.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/11-immutable-data-and-pipeline.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/rust/12-error-handling-and-type-safety.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/01-todo-list-and-first-test.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/02-fake-it-and-triangulation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/03-obvious-implementation-and-refactoring.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/04-version-control-and-conventional-commits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/05-package-management-and-static-analysis.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/06-task-runner-and-ci-cd.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/07-case-classes-and-traits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/08-pattern-matching-and-sealed-traits.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/09-packages-and-module-design.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/10-higher-order-functions-and-composition.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/11-collections-and-lazy-evaluation.md +9 -0
- package/lib/assets/docs/article/getting-start-tdd/scala/12-error-handling-and-type-safety.md +9 -0
- package/lib/assets/docs/article/grokking-concurrency/all/index.md +0 -1
- package/lib/assets/docs/article/grokking-concurrency/all/part-1-ch02-sequential.md +9 -0
- package/lib/assets/docs/article/grokking-concurrency/all/part-2-ch04-05-threads.md +9 -0
- package/lib/assets/docs/article/grokking-concurrency/all/part-3-ch06-multitasking.md +9 -0
- package/lib/assets/docs/article/grokking-concurrency/all/part-4-ch07-parallel-patterns.md +9 -0
- package/lib/assets/docs/article/grokking-concurrency/all/part-5-ch08-09-synchronization.md +9 -0
- package/lib/assets/docs/article/grokking-concurrency/all/part-6-ch10-11-nonblocking-io.md +9 -0
- package/lib/assets/docs/article/grokking-concurrency/all/part-7-ch12-async.md +9 -0
- package/lib/assets/docs/article/grokking-concurrency/all/part-8-ch13-mapreduce.md +9 -0
- package/lib/assets/docs/article/grokking-concurrency/clojure/index.md +0 -10
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-1.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-2.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-3.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-4.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-5.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-6.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-7.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/clojure/part-8.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/csharp/index.md +0 -10
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-1.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-2.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-3.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-4.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-5.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-6.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-7.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/csharp/part-8.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/fsharp/index.md +0 -10
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-1.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-2.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-3.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-4.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-5.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-6.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-7.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/fsharp/part-8.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/haskell/index.md +0 -10
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-1.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-2.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-3.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-4.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-5.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-6.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-7.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/haskell/part-8.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/java/index.md +0 -10
- package/lib/assets/docs/article/grokking-concurrency/java/part-1.md +8 -9
- package/lib/assets/docs/article/grokking-concurrency/java/part-2.md +8 -9
- package/lib/assets/docs/article/grokking-concurrency/java/part-3.md +7 -8
- package/lib/assets/docs/article/grokking-concurrency/java/part-4.md +8 -9
- package/lib/assets/docs/article/grokking-concurrency/java/part-5.md +7 -8
- package/lib/assets/docs/article/grokking-concurrency/java/part-6.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/java/part-7.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/java/part-8.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/python/index.md +0 -10
- package/lib/assets/docs/article/grokking-concurrency/python/part-1.md +7 -8
- package/lib/assets/docs/article/grokking-concurrency/python/part-2.md +10 -11
- package/lib/assets/docs/article/grokking-concurrency/python/part-3.md +8 -9
- package/lib/assets/docs/article/grokking-concurrency/python/part-4.md +8 -9
- package/lib/assets/docs/article/grokking-concurrency/python/part-5.md +9 -10
- package/lib/assets/docs/article/grokking-concurrency/python/part-6.md +9 -10
- package/lib/assets/docs/article/grokking-concurrency/python/part-7.md +9 -10
- package/lib/assets/docs/article/grokking-concurrency/python/part-8.md +8 -9
- package/lib/assets/docs/article/grokking-concurrency/rust/index.md +0 -10
- package/lib/assets/docs/article/grokking-concurrency/rust/part-1.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/rust/part-2.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/rust/part-3.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/rust/part-4.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/rust/part-5.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/rust/part-6.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/rust/part-7.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/rust/part-8.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/scala/index.md +0 -10
- package/lib/assets/docs/article/grokking-concurrency/scala/part-1.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/scala/part-2.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/scala/part-3.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/scala/part-4.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/scala/part-5.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/scala/part-6.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/scala/part-7.md +6 -7
- package/lib/assets/docs/article/grokking-concurrency/scala/part-8.md +6 -7
- package/lib/assets/docs/article/grokkingfp/all/part-1-ch01-fp-introduction.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/part-1-ch02-pure-functions.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/part-2-ch03-immutable-data.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/part-2-ch04-higher-order-functions.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/part-2-ch05-flatmap.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/part-3-ch06-option.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/part-3-ch07-either-adt.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/part-4-ch08-io-monad.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/part-4-ch09-streams.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/part-5-ch10-concurrency.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/part-6-ch11-application.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/part-6-ch12-testing.md +9 -0
- package/lib/assets/docs/article/grokkingfp/all/writing-plan.md +9 -0
- package/lib/assets/docs/article/grokkingfp/clojure/part-1.md +9 -0
- package/lib/assets/docs/article/grokkingfp/clojure/part-2.md +9 -0
- package/lib/assets/docs/article/grokkingfp/clojure/part-3.md +9 -0
- package/lib/assets/docs/article/grokkingfp/clojure/part-4.md +9 -0
- package/lib/assets/docs/article/grokkingfp/clojure/part-5.md +9 -0
- package/lib/assets/docs/article/grokkingfp/clojure/part-6.md +9 -0
- package/lib/assets/docs/article/grokkingfp/csharp/part-1.md +9 -0
- package/lib/assets/docs/article/grokkingfp/csharp/part-2.md +9 -0
- package/lib/assets/docs/article/grokkingfp/csharp/part-3.md +9 -0
- package/lib/assets/docs/article/grokkingfp/csharp/part-4.md +9 -0
- package/lib/assets/docs/article/grokkingfp/csharp/part-5.md +9 -0
- package/lib/assets/docs/article/grokkingfp/csharp/part-6.md +9 -0
- package/lib/assets/docs/article/grokkingfp/elixir/part-1.md +9 -0
- package/lib/assets/docs/article/grokkingfp/elixir/part-2.md +9 -0
- package/lib/assets/docs/article/grokkingfp/elixir/part-3.md +9 -0
- package/lib/assets/docs/article/grokkingfp/elixir/part-4.md +9 -0
- package/lib/assets/docs/article/grokkingfp/elixir/part-5.md +9 -0
- package/lib/assets/docs/article/grokkingfp/elixir/part-6.md +9 -0
- package/lib/assets/docs/article/grokkingfp/fsharp/part-1.md +9 -0
- package/lib/assets/docs/article/grokkingfp/fsharp/part-2.md +9 -0
- package/lib/assets/docs/article/grokkingfp/fsharp/part-3.md +9 -0
- package/lib/assets/docs/article/grokkingfp/fsharp/part-4.md +9 -0
- package/lib/assets/docs/article/grokkingfp/fsharp/part-5.md +9 -0
- package/lib/assets/docs/article/grokkingfp/fsharp/part-6.md +9 -0
- package/lib/assets/docs/article/grokkingfp/haskell/part-1.md +9 -0
- package/lib/assets/docs/article/grokkingfp/haskell/part-2.md +9 -0
- package/lib/assets/docs/article/grokkingfp/haskell/part-3.md +9 -0
- package/lib/assets/docs/article/grokkingfp/haskell/part-4.md +9 -0
- package/lib/assets/docs/article/grokkingfp/haskell/part-5.md +9 -0
- package/lib/assets/docs/article/grokkingfp/haskell/part-6.md +9 -0
- package/lib/assets/docs/article/grokkingfp/java/part-1.md +9 -0
- package/lib/assets/docs/article/grokkingfp/java/part-2.md +9 -0
- package/lib/assets/docs/article/grokkingfp/java/part-3.md +9 -0
- package/lib/assets/docs/article/grokkingfp/java/part-4.md +9 -0
- package/lib/assets/docs/article/grokkingfp/java/part-5.md +9 -0
- package/lib/assets/docs/article/grokkingfp/java/part-6.md +9 -0
- package/lib/assets/docs/article/grokkingfp/python/part-1.md +9 -0
- package/lib/assets/docs/article/grokkingfp/python/part-2.md +9 -0
- package/lib/assets/docs/article/grokkingfp/python/part-3.md +9 -0
- package/lib/assets/docs/article/grokkingfp/python/part-4.md +9 -0
- package/lib/assets/docs/article/grokkingfp/python/part-5.md +9 -0
- package/lib/assets/docs/article/grokkingfp/python/part-6.md +9 -0
- package/lib/assets/docs/article/grokkingfp/ruby/part-1.md +9 -0
- package/lib/assets/docs/article/grokkingfp/ruby/part-2.md +9 -0
- package/lib/assets/docs/article/grokkingfp/ruby/part-3.md +9 -0
- package/lib/assets/docs/article/grokkingfp/ruby/part-4.md +9 -0
- package/lib/assets/docs/article/grokkingfp/ruby/part-5.md +9 -0
- package/lib/assets/docs/article/grokkingfp/ruby/part-6.md +9 -0
- package/lib/assets/docs/article/grokkingfp/rust/part-1.md +9 -0
- package/lib/assets/docs/article/grokkingfp/rust/part-2.md +9 -0
- package/lib/assets/docs/article/grokkingfp/rust/part-3.md +9 -0
- package/lib/assets/docs/article/grokkingfp/rust/part-4.md +9 -0
- package/lib/assets/docs/article/grokkingfp/rust/part-5.md +9 -0
- package/lib/assets/docs/article/grokkingfp/rust/part-6.md +9 -0
- package/lib/assets/docs/article/grokkingfp/scala/part-1.md +9 -0
- package/lib/assets/docs/article/grokkingfp/scala/part-2.md +9 -0
- package/lib/assets/docs/article/grokkingfp/scala/part-3.md +9 -0
- package/lib/assets/docs/article/grokkingfp/scala/part-4.md +9 -0
- package/lib/assets/docs/article/grokkingfp/scala/part-5.md +9 -0
- package/lib/assets/docs/article/grokkingfp/scala/part-6.md +9 -0
- package/lib/assets/docs/article/grokkingfp/typescript/part-1.md +9 -0
- package/lib/assets/docs/article/grokkingfp/typescript/part-2.md +9 -0
- package/lib/assets/docs/article/grokkingfp/typescript/part-3.md +9 -0
- package/lib/assets/docs/article/grokkingfp/typescript/part-4.md +9 -0
- package/lib/assets/docs/article/grokkingfp/typescript/part-5.md +9 -0
- package/lib/assets/docs/article/grokkingfp/typescript/part-6.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part1/chapter01.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part1/chapter02.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part1/chapter03.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part2/chapter04.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part2/chapter05.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part2/chapter06.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part2/chapter07.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part2/chapter08.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part2/chapter09.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part2/chapter10.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part2/chapter11.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part2/chapter12.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part2/chapter13.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3/chapter14.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3/chapter15.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3/chapter16.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3/chapter17.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3/chapter18.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3/chapter19.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3/chapter20.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3/chapter21.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter14-orm.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter15-orm.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter16-orm.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter17-orm.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter18-orm.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter19-orm.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter20-orm.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter21-orm.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part3-orm/chapter22-orm.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part4/chapter22.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part4/chapter23.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part4/chapter24.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part4/chapter25.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part4/chapter26.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part4/chapter27.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part4/chapter28.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part4/chapter29.md +8 -0
- package/lib/assets/docs/article/practical-database-design/part4/chapter30.md +8 -0
- package/lib/assets/docs/article/practical-database-design/part4/chapter31.md +8 -0
- package/lib/assets/docs/article/practical-database-design/part4/chapter32.md +8 -0
- package/lib/assets/docs/article/practical-database-design/part5/chapter33.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part5/chapter34.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part5/chapter35.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part5/chapter36.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part5/chapter37.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part5/chapter38.md +9 -0
- package/lib/assets/docs/article/practical-database-design/part5/chapter39.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study2-1.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study2-2.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study2-3.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study2-4.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study2-5.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study3-1.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study3-2.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study3-3.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study3-4.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study3-5.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study4-1.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study4-2.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study4-3.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study4-4.md +9 -0
- package/lib/assets/docs/article/practical-database-design/study/study4-5.md +9 -0
- package/lib/assets/docs/index.md +5 -1
- package/lib/assets/docs/log.md +10 -0
- package/lib/assets/docs/operation/index.md +15 -1
- package/lib/assets/docs/reference/CodexCLIMCP/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/351/226/213/347/231/272/343/203/225/343/203/255/343/203/274.md +13 -4
- package/lib/assets/docs/reference/CodexCLIMCP/343/202/265/343/203/274/343/203/220/343/203/274/350/250/255/345/256/232/346/211/213/351/240/206.md +10 -0
- package/lib/assets/docs/reference/Java/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/346/247/213/347/257/211/343/202/254/343/202/244/343/203/211.md +11 -1
- package/lib/assets/docs/reference/OKF/345/260/216/345/205/245/343/202/254/343/202/244/343/203/211_V0.2.md +965 -0
- package/lib/assets/docs/reference/SonarQube/343/203/255/343/203/274/343/202/253/343/203/253/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +10 -0
- package/lib/assets/docs/reference/TypeScript/343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/346/247/213/347/257/211/343/202/254/343/202/244/343/203/211.md +11 -1
- package/lib/assets/docs/reference/UI/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +10 -1
- package/lib/assets/docs/reference/Vim/346/223/215/344/275/234/343/203/236/343/203/213/343/203/245/343/202/242/343/203/253.md +177 -168
- package/lib/assets/docs/reference/index.md +55 -53
- package/lib/assets/docs/reference//343/202/210/343/201/204/343/202/275/343/203/225/343/203/210/343/202/246/343/202/247/343/202/242/343/201/250/343/201/257.md +7 -8
- package/lib/assets/docs/reference//343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +10 -1
- package/lib/assets/docs/reference//343/202/244/343/203/263/343/203/225/343/203/251/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +10 -1
- package/lib/assets/docs/reference//343/202/250/343/202/257/343/202/271/343/203/210/343/203/252/343/203/274/343/203/240/343/203/227/343/203/255/343/202/260/343/203/251/343/203/237/343/203/263/343/202/260.md +6 -7
- package/lib/assets/docs/reference//343/202/263/343/203/274/343/203/207/343/202/243/343/203/263/343/202/260/343/201/250/343/203/206/343/202/271/343/203/210/343/202/254/343/202/244/343/203/211.md +10 -1
- package/lib/assets/docs/reference//343/203/206/343/202/271/343/203/210/346/210/246/347/225/245/343/202/254/343/202/244/343/203/211.md +10 -1
- package/lib/assets/docs/reference//343/203/207/343/203/274/343/202/277/343/203/242/343/203/207/343/203/253/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +10 -1
- package/lib/assets/docs/reference//343/203/211/343/202/255/343/203/245/343/203/241/343/203/263/343/203/210/346/247/213/346/210/220/343/202/254/343/202/244/343/203/211.md +143 -0
- package/lib/assets/docs/reference//343/203/211/343/203/241/343/202/244/343/203/263/343/203/242/343/203/207/343/203/253/350/250/255/350/250/210/343/202/254/343/202/244/343/203/211.md +10 -1
- package/lib/assets/docs/reference//343/203/223/343/202/270/343/203/215/343/202/271/343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243/345/210/206/346/236/220/343/202/254/343/202/244/343/203/211.md +9 -0
- package/lib/assets/docs/reference//343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271/344/275/234/346/210/220/343/202/254/343/202/244/343/203/211.md +10 -1
- package/lib/assets/docs/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/202/254/343/202/244/343/203/211.md +9 -0
- package/lib/assets/docs/reference//343/203/252/343/203/252/343/203/274/343/202/271/343/203/273/343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/350/250/210/347/224/273/343/202/254/343/202/244/343/203/211.md +7 -8
- package/lib/assets/docs/reference//343/203/255/343/202/270/343/202/253/343/203/253/343/202/267/343/203/263/343/202/255/343/203/263/343/202/260.md +9 -0
- package/lib/assets/docs/reference//344/274/201/346/245/255/347/265/214/345/226/266/350/253/226.md +10 -1
- package/lib/assets/docs/reference//347/222/260/345/242/203/345/244/211/346/225/260/347/256/241/347/220/206/343/202/254/343/202/244/343/203/211.md +10 -0
- package/lib/assets/docs/reference//347/265/214/345/226/266/346/210/246/347/225/245/345/210/206/346/236/220/343/202/254/343/202/244/343/203/211.md +9 -0
- package/lib/assets/docs/reference//350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +10 -1
- package/lib/assets/docs/reference//350/250/200/350/252/236/345/210/245/351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +9 -0
- package/lib/assets/docs/reference//351/201/213/345/226/266/347/256/241/347/220/206.md +10 -1
- package/lib/assets/docs/reference//351/201/213/347/224/250/343/202/271/343/202/257/343/203/252/343/203/227/343/203/210/344/275/234/346/210/220/343/202/254/343/202/244/343/203/211.md +9 -0
- package/lib/assets/docs/reference//351/201/213/347/224/250/350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +10 -1
- package/lib/assets/docs/reference//351/226/213/347/231/272/343/202/254/343/202/244/343/203/211.md +9 -0
- package/lib/assets/docs/reference//351/235/236/346/251/237/350/203/275/350/246/201/344/273/266/345/256/232/347/276/251/343/202/254/343/202/244/343/203/211.md +10 -1
- package/lib/assets/docs/template/ADR.md +9 -0
- package/lib/assets/docs/template/AWS/343/202/271/343/203/206/343/203/274/343/202/270/343/203/263/343/202/260/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +9 -0
- package/lib/assets/docs/template/AWS/343/203/227/343/203/255/343/203/200/343/202/257/343/202/267/343/203/247/343/203/263/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +9 -0
- package/lib/assets/docs/template/README.md +9 -0
- package/lib/assets/docs/template//343/201/276/343/201/232/343/201/223/343/202/214/343/202/222/350/252/255/343/202/202/343/201/206/343/203/252/343/202/271/343/203/210.md +9 -0
- package/lib/assets/docs/template//343/202/242/343/203/227/343/203/252/343/202/261/343/203/274/343/202/267/343/203/247/343/203/263/351/226/213/347/231/272/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +9 -0
- package/lib/assets/docs/template//343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/345/256/214/344/272/206/345/240/261/345/221/212/346/233/270.md +10 -1
- package/lib/assets/docs/template//343/202/244/343/203/206/343/203/254/343/203/274/343/202/267/343/203/247/343/203/263/350/250/210/347/224/273.md +11 -2
- package/lib/assets/docs/template//343/202/244/343/203/263/343/202/273/343/203/227/343/202/267/343/203/247/343/203/263/343/203/207/343/203/203/343/202/255.md +9 -0
- package/lib/assets/docs/template//343/203/223/343/202/270/343/203/215/343/202/271/343/202/242/343/203/274/343/202/255/343/203/206/343/202/257/343/203/201/343/203/243.md +9 -0
- package/lib/assets/docs/template//343/203/252/343/203/252/343/203/274/343/202/271/345/256/214/344/272/206/345/240/261/345/221/212/346/233/270.md +9 -0
- package/lib/assets/docs/template//343/203/252/343/203/252/343/203/274/343/202/271/350/250/210/347/224/273.md +289 -280
- package/lib/assets/docs/template//344/272/213/344/276/213/345/210/206/346/236/220.md +9 -0
- package/lib/assets/docs/template//344/274/201/346/245/255/345/210/206/346/236/220.md +9 -0
- package/lib/assets/docs/template//345/256/214/345/205/250/345/275/242/345/274/217/343/201/256/343/203/246/343/203/274/343/202/271/343/202/261/343/203/274/343/202/271.md +7 -8
- package/lib/assets/docs/template//350/246/201/344/273/266/345/256/232/347/276/251.md +7 -8
- package/lib/assets/docs/template//350/250/255/350/250/210.md +10 -1
- package/lib/assets/docs/template//351/226/213/347/231/272/347/222/260/345/242/203/343/202/273/343/203/203/343/203/210/343/202/242/343/203/203/343/203/227/346/211/213/351/240/206/346/233/270.md +9 -0
- package/lib/assets/gulpfile.js +4 -2
- package/lib/assets/ops/scripts/okf.js +272 -0
- package/lib/assets/package.json +2 -0
- package/package.json +1 -1
package/lib/assets/docs/article/getting-start-docker-kubernetes/05-kubernetes-introduction.md
CHANGED
|
@@ -1,576 +1,585 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
kubectl
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
#
|
|
84
|
-
kubectl
|
|
85
|
-
|
|
86
|
-
#
|
|
87
|
-
kubectl
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
kubectl
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
-
|
|
224
|
-
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
-
|
|
292
|
-
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
```
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
kubectl get
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
#
|
|
410
|
-
kubectl
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
-
|
|
576
|
-
-
|
|
1
|
+
---
|
|
2
|
+
type: Article
|
|
3
|
+
title: "第 5 章 Kubernetes 入門"
|
|
4
|
+
description: "前章まででは、Docker による単一ホスト上のコンテナ実行と、Docker Compose や Swarm による複数コンテナの管理を学びました。"
|
|
5
|
+
tags: [article, getting-start-docker-kubernetes]
|
|
6
|
+
status: stable
|
|
7
|
+
generated: { by: human:kakimomokuri, at: 2026-06-26T00:29:42Z }
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# 第 5 章 Kubernetes 入門
|
|
11
|
+
|
|
12
|
+

|
|
13
|
+
|
|
14
|
+
*Pod、Node、Service、制御プレーン、宣言的な望ましい状態が Kubernetes の基本になります。*
|
|
15
|
+
|
|
16
|
+
## はじめに
|
|
17
|
+
|
|
18
|
+
前章まででは、Docker による単一ホスト上のコンテナ実行と、Docker Compose や Swarm による複数コンテナの管理を学びました。しかし実運用のシステムでは、複数のサーバー(ホスト)にまたがってコンテナを配置し、障害が起きても自動で復旧させ、トラフィックの増減に応じてコンテナ数を増減させる、といった「オーケストレーション」が求められます。
|
|
19
|
+
|
|
20
|
+
この章では、コンテナオーケストレーションのデファクトスタンダードである **Kubernetes** を学びます。Kubernetes は Google が社内で培ったコンテナ運用のノウハウをもとに開発され、現在は CNCF(Cloud Native Computing Foundation)が中立的に運営する OSS です。「k8s(ケーエイツ)」と省略表記されることもあります。
|
|
21
|
+
|
|
22
|
+
本章のゴールは、Kubernetes を構成する基本的なリソース(Pod、ReplicaSet、Deployment、Service、Ingress)の役割と関係を理解し、実際に YAML マニフェストを書いて `kubectl` で適用できるようになることです。説明には、書籍『Docker/Kubernetes 実践コンテナ開発入門(第 2 版)』のサンプルリポジトリ `gihyo-docker-kuberbetes`(ディレクトリ `ch05/`)と、応用例として `echo` アプリの Kustomize 定義(`apps/echo/k8s/kustomize/`)を引用します。
|
|
23
|
+
|
|
24
|
+
学ぶ順序は次のとおりです。
|
|
25
|
+
|
|
26
|
+
1. Kubernetes とは何か、なぜ必要か(5.1)
|
|
27
|
+
2. ローカル環境で Kubernetes を動かす準備(5.2)
|
|
28
|
+
3. Kubernetes の基本概念とクラスタ構成(5.3〜5.5)
|
|
29
|
+
4. アプリケーションを動かすリソース(5.6 Pod 〜 5.8 Deployment)
|
|
30
|
+
5. ネットワークを担うリソース(5.9 Service、5.10 Ingress)
|
|
31
|
+
|
|
32
|
+
それぞれのリソースは独立した部品ではなく、上位のリソースが下位のリソースを生成・管理するという階層構造になっています。この「関係」を意識しながら読み進めてください。
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 5.1 Kubernetes とは
|
|
37
|
+
|
|
38
|
+
Kubernetes は、コンテナ化されたアプリケーションのデプロイ、スケーリング、運用を自動化するためのオーケストレーションシステムです。「オーケストレーション」とは、指揮者(オーケストレーター)が多数の奏者(コンテナ)をまとめて 1 つの楽曲(システム)を演奏させるイメージから来ています。
|
|
39
|
+
|
|
40
|
+
Docker 単体や Docker Compose では、基本的に 1 台のホスト上でコンテナを動かします。しかし、本番システムでは次のような要求が生じます。
|
|
41
|
+
|
|
42
|
+
- 複数のホスト(サーバー)にコンテナを分散して配置したい
|
|
43
|
+
- あるコンテナが落ちても、自動的に再起動・再配置してほしい
|
|
44
|
+
- 負荷に応じてコンテナの数を増やしたり減らしたりしたい(スケーリング)
|
|
45
|
+
- 新しいバージョンを無停止でリリースしたい(ローリングアップデート)
|
|
46
|
+
- コンテナ群への通信を、安定したエンドポイントに集約したい(サービスディスカバリ・ロードバランシング)
|
|
47
|
+
|
|
48
|
+
Kubernetes は、これらをまとめて引き受けてくれます。最大の特徴は **宣言的(declarative)** な運用モデルです。利用者は「最終的にこうあってほしい」という望ましい状態(desired state)を YAML マニフェストで宣言します。すると Kubernetes は現在の状態を絶えず監視し、宣言された状態に一致するよう自動的に調整し続けます。この「あるべき状態へ収束させ続ける」仕組みを **リコンサイル(reconciliation)ループ** と呼びます。
|
|
49
|
+
|
|
50
|
+
たとえば「echo というアプリを 3 つ動かす」と宣言しておけば、そのうち 1 つが障害で停止しても、Kubernetes が不足を検知して新しいコンテナを起動し、常に 3 つの状態を保とうとします。命令的(imperative)に「コンテナを起動せよ」「再起動せよ」と都度指示するのではなく、ゴールだけを示す点が宣言的モデルの本質です。
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 5.2 ローカル環境で Kubernetes を実行する
|
|
55
|
+
|
|
56
|
+
Kubernetes を学ぶには、手元で動かせる環境があると便利です。本番のような複数ノードのクラスタを用意しなくても、ローカル PC 上に単一ノードの Kubernetes クラスタを構築できるツールがいくつかあります。
|
|
57
|
+
|
|
58
|
+
代表的な選択肢は次のとおりです。
|
|
59
|
+
|
|
60
|
+
- **Docker Desktop**:設定画面で「Enable Kubernetes」にチェックを入れるだけで、ローカルに単一ノードの Kubernetes クラスタが起動します。Docker をすでに使っている場合に最も手軽です。
|
|
61
|
+
- **Rancher Desktop**:オープンソースのデスクトップアプリで、Kubernetes(k3s ベース)とコンテナランタイムを同梱しています。ライセンス上の制約を避けたい場合の選択肢になります。
|
|
62
|
+
- **kind(Kubernetes IN Docker)**:Docker コンテナ自体を Kubernetes のノードとして使う軽量ツールです。CI 環境や、複数ノード構成を手軽に試したいときに向いています。
|
|
63
|
+
|
|
64
|
+
これらのインストール手順や OS ごとの細かな設定は環境差が大きいため、本書では **付録 A** に詳細を委ねます。ここでは「いずれかのローカル Kubernetes が起動済みで、`kubectl` がそのクラスタに接続できる状態」になっていることを前提に進めます。
|
|
65
|
+
|
|
66
|
+
### kubectl の基本操作
|
|
67
|
+
|
|
68
|
+
`kubectl`(キューブコントロール、または「キューブシーティーエル」)は、Kubernetes クラスタを操作するためのコマンドラインツールです。本章で繰り返し使う基本操作を先に押さえておきましょう。
|
|
69
|
+
|
|
70
|
+
まず、接続先のクラスタが正しいか確認します。
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# 現在の接続先(コンテキスト)を確認する
|
|
74
|
+
kubectl config current-context
|
|
75
|
+
|
|
76
|
+
# クラスタを構成するノードの一覧を表示する
|
|
77
|
+
kubectl get nodes
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
リソースの作成・取得・確認・削除は、次の 5 つを覚えておけば本章の操作はほぼ網羅できます。
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# マニフェスト(YAML)を適用してリソースを作成・更新する
|
|
84
|
+
kubectl apply -f simple-pod.yaml
|
|
85
|
+
|
|
86
|
+
# リソースの一覧を取得する(pod / replicaset / deployment / service / ingress など)
|
|
87
|
+
kubectl get pod
|
|
88
|
+
|
|
89
|
+
# リソースの詳細(イベントや状態の遷移を含む)を確認する
|
|
90
|
+
kubectl describe pod simple-echo
|
|
91
|
+
|
|
92
|
+
# コンテナのログを表示する(複数コンテナの Pod では -c でコンテナ名を指定)
|
|
93
|
+
kubectl logs simple-echo -c echo
|
|
94
|
+
|
|
95
|
+
# マニフェストで作成したリソースを削除する
|
|
96
|
+
kubectl delete -f simple-pod.yaml
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`apply` は宣言的な操作で、同じマニフェストを何度適用しても結果が一定になる(冪等)点が重要です。マニフェストを書き換えて再度 `apply` すれば、差分だけが反映されます。トラブル時はまず `kubectl describe`(リソースに紐づくイベントが見られる)と `kubectl logs`(アプリのログが見られる)を確認するのが定石です。
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
|
|
103
|
+
## 5.3 Kubernetes の概念
|
|
104
|
+
|
|
105
|
+
Kubernetes には多くのリソース(オブジェクト)が登場しますが、本章で扱う中核は次の 5 つです。これらは互いに関係し合っています。
|
|
106
|
+
|
|
107
|
+
| リソース | 役割 |
|
|
108
|
+
| :--- | :--- |
|
|
109
|
+
| Pod | コンテナの最小デプロイ単位。1 つ以上のコンテナをまとめる |
|
|
110
|
+
| ReplicaSet | 指定した数の Pod を維持する(レプリカ管理) |
|
|
111
|
+
| Deployment | ReplicaSet を管理し、ローリングアップデートやロールバックを担う |
|
|
112
|
+
| Service | Pod 群への安定したアクセス先(仮想 IP・名前)を提供する |
|
|
113
|
+
| Ingress | クラスタ外部からの HTTP(S) アクセスを Service に振り分ける |
|
|
114
|
+
|
|
115
|
+
これらの関係を図にすると次のようになります。上位のリソースが下位のリソースを生成・管理し、ラベルセレクタによって紐づけられています。本章を通じて何度も立ち戻る、最も重要な図です。
|
|
116
|
+
|
|
117
|
+
```plantuml
|
|
118
|
+
@startuml
|
|
119
|
+
title Kubernetes 主要リソースの関係
|
|
120
|
+
|
|
121
|
+
actor "外部ユーザー" as user
|
|
122
|
+
|
|
123
|
+
rectangle "Ingress\n(echo.gihyo.local → echo:80)" as ingress
|
|
124
|
+
rectangle "Service\n(selector: app=echo)" as service
|
|
125
|
+
|
|
126
|
+
package "Deployment (echo)" {
|
|
127
|
+
rectangle "ReplicaSet\n(replicas: 4)" as rs
|
|
128
|
+
rectangle "Pod\n(labels: app=echo)" as pod1
|
|
129
|
+
rectangle "Pod\n(labels: app=echo)" as pod2
|
|
130
|
+
rectangle "Pod\n(labels: app=echo)" as pod3
|
|
131
|
+
rectangle "Pod\n(labels: app=echo)" as pod4
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
user --> ingress : HTTP
|
|
135
|
+
ingress --> service : ルール一致で転送
|
|
136
|
+
service ..> pod1 : labelで選択
|
|
137
|
+
service ..> pod2
|
|
138
|
+
service ..> pod3
|
|
139
|
+
service ..> pod4
|
|
140
|
+
rs --> pod1 : 生成・維持
|
|
141
|
+
rs --> pod2
|
|
142
|
+
rs --> pod3
|
|
143
|
+
rs --> pod4
|
|
144
|
+
|
|
145
|
+
note bottom of rs
|
|
146
|
+
Deployment が ReplicaSet を、
|
|
147
|
+
ReplicaSet が Pod を管理する
|
|
148
|
+
end note
|
|
149
|
+
@enduml
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
この章ではこの図を下から上へ(Pod → ReplicaSet → Deployment → Service → Ingress の順に)組み立てていきます。
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 5.4 Kubernetes クラスタと Node
|
|
157
|
+
|
|
158
|
+
Kubernetes の実行環境全体を **クラスタ(Cluster)** と呼びます。クラスタは、大きく分けて 2 種類のマシン(Node)から構成されます。
|
|
159
|
+
|
|
160
|
+
- **コントロールプレーン(Control Plane)**:クラスタ全体を管理する頭脳です。API サーバー(`kube-apiserver`、`kubectl` の接続先)、状態を保存するデータストア(`etcd`)、リソースを監視し調整するコントローラ(`kube-controller-manager`)、Pod をどの Node に配置するか決めるスケジューラ(`kube-scheduler`)などで構成されます。
|
|
161
|
+
- **ワーカー Node(Node)**:実際にコンテナ(Pod)が動くマシンです。各 Node では、コントロールプレーンと通信してコンテナを起動・監視する `kubelet` と、ネットワークを担う `kube-proxy` が動作しています。
|
|
162
|
+
|
|
163
|
+
利用者は `kubectl` を通じてコントロールプレーンの API サーバーに「望ましい状態」を伝えます。すると、コントローラとスケジューラが協調して、適切な Node 上に Pod を配置します。どの Node に配置されるかは Kubernetes が自動的に判断するため、利用者が個々のサーバーを意識する必要はありません。
|
|
164
|
+
|
|
165
|
+
ローカル環境(Docker Desktop など)では、コントロールプレーンとワーカー Node が同じ 1 台に同居した単一ノード構成になります。`kubectl get nodes` を実行すると、その 1 つの Node が表示されます。
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
# Node の一覧を確認する(ローカル環境では 1 つ表示される例)
|
|
169
|
+
kubectl get nodes
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 5.5 Namespace
|
|
175
|
+
|
|
176
|
+
**Namespace(名前空間)** は、1 つのクラスタの中を論理的に分割する仕組みです。同じクラスタを複数のチームや用途(開発・検証など)で共有する場合に、リソースをグループ分けして名前の衝突を避けたり、アクセス権限やリソース制限を分けたりできます。
|
|
177
|
+
|
|
178
|
+
クラスタには最初からいくつかの Namespace が用意されています。
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# Namespace の一覧を表示する
|
|
182
|
+
kubectl get namespace
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
代表的なものは次のとおりです。
|
|
186
|
+
|
|
187
|
+
- `default`:明示的に Namespace を指定しなかったときに使われる既定の名前空間。本章のサンプルもここに作成されます。
|
|
188
|
+
- `kube-system`:Kubernetes 自身のコンポーネント(ダッシュボードや DNS など)が動く名前空間。
|
|
189
|
+
- `kube-public`:すべてのユーザーが読み取れる名前空間。
|
|
190
|
+
|
|
191
|
+
`kubectl` のコマンドに `--namespace`(短縮形 `-n`)を付けると、対象の Namespace を切り替えられます。たとえば、`ch05/install-dashboard.sh` では Kubernetes Dashboard を導入したうえで、`kube-system` Namespace の Pod を確認しています(出典:`gihyo-docker-kuberbetes/ch05/install-dashboard.sh`)。
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
# kube-system 名前空間の Pod を、ラベルで絞り込んで確認する
|
|
195
|
+
kubectl get pod --namespace=kube-system -l k8s-app=kubernetes-dashboard
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
本章のサンプルでは Namespace を明示しないため、すべて `default` に作成されます。`kubectl get pod` のように `-n` を省略した場合は `default` が対象になる、と覚えておけば十分です。
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 5.6 Pod
|
|
203
|
+
|
|
204
|
+
**Pod(ポッド)** は、Kubernetes でアプリケーションを動かす最小のデプロイ単位です。1 つの Pod は 1 つ以上のコンテナをまとめたもので、同じ Pod 内のコンテナは同じネットワーク(同じ IP アドレス)とストレージを共有します。そのため、Pod 内のコンテナどうしは `localhost` で通信できます。
|
|
205
|
+
|
|
206
|
+
「なぜコンテナではなく Pod が単位なのか」というと、密接に連携する複数のコンテナ(たとえば、リバースプロキシとアプリ本体)を 1 セットとして扱いたいケースがあるからです。本章のサンプルは、まさにその構成です。
|
|
207
|
+
|
|
208
|
+
次のマニフェストは、`nginx`(リバースプロキシ)と `echo`(アプリ本体)の 2 つのコンテナを 1 つの Pod にまとめたものです(出典:`gihyo-docker-kuberbetes/ch05/simple-pod.yaml`)。
|
|
209
|
+
|
|
210
|
+
```yaml
|
|
211
|
+
apiVersion: v1
|
|
212
|
+
kind: Pod
|
|
213
|
+
metadata:
|
|
214
|
+
name: simple-echo
|
|
215
|
+
spec:
|
|
216
|
+
containers:
|
|
217
|
+
- name: nginx
|
|
218
|
+
image: gihyodocker/nginx:latest
|
|
219
|
+
env:
|
|
220
|
+
- name: BACKEND_HOST
|
|
221
|
+
value: localhost:8080
|
|
222
|
+
ports:
|
|
223
|
+
- containerPort: 80
|
|
224
|
+
- name: echo
|
|
225
|
+
image: gihyodocker/echo:latest
|
|
226
|
+
ports:
|
|
227
|
+
- containerPort: 8080
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
マニフェストの構造を読み解きましょう。
|
|
231
|
+
|
|
232
|
+
- `apiVersion` / `kind`:このリソースの種別を表します。Pod は `v1`(コア API グループ)の `Pod` です。
|
|
233
|
+
- `metadata.name`:リソースの名前です。ここでは `simple-echo`。
|
|
234
|
+
- `spec.containers`:この Pod が持つコンテナの定義リストです。
|
|
235
|
+
- `nginx` コンテナは環境変数 `BACKEND_HOST` に `localhost:8080` を指定しています。同じ Pod 内の `echo` コンテナがポート 8080 で待ち受けているため、`localhost` 経由でアクセスできるわけです。これが「Pod 内のコンテナはネットワークを共有する」ことの具体例です。
|
|
236
|
+
|
|
237
|
+
このマニフェストを適用し、状態を確認してみます。
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# Pod を作成する
|
|
241
|
+
kubectl apply -f simple-pod.yaml
|
|
242
|
+
|
|
243
|
+
# Pod の状態を確認する(READY 列が 2/2 になれば 2 コンテナとも起動済み)
|
|
244
|
+
kubectl get pod
|
|
245
|
+
|
|
246
|
+
# 詳細やイベントを確認する
|
|
247
|
+
kubectl describe pod simple-echo
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
`kubectl get pod` の出力例(値は環境により異なります)は次のようなイメージです。
|
|
251
|
+
|
|
252
|
+
```text
|
|
253
|
+
NAME READY STATUS RESTARTS AGE
|
|
254
|
+
simple-echo 2/2 Running 0 30s
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
ただし、Pod を単体で作成する運用は実務ではほとんど行いません。Pod は障害で停止しても自動では復旧しないからです。Pod の数を維持し、自動復旧させるために登場するのが、次の ReplicaSet です。
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## 5.7 ReplicaSet
|
|
262
|
+
|
|
263
|
+
**ReplicaSet(レプリカセット)** は、指定した数の同一 Pod(レプリカ)が常に動いている状態を維持するリソースです。Pod が落ちれば新しい Pod を起動し、多すぎれば余分な Pod を停止して、宣言した数(`replicas`)に収束させ続けます。
|
|
264
|
+
|
|
265
|
+
次のマニフェストは、5.6 の Pod と同じ 2 コンテナ構成を、3 つのレプリカとして維持する ReplicaSet です(出典:`gihyo-docker-kuberbetes/ch05/simple-replicaset.yaml`)。
|
|
266
|
+
|
|
267
|
+
```yaml
|
|
268
|
+
apiVersion: apps/v1
|
|
269
|
+
kind: ReplicaSet
|
|
270
|
+
metadata:
|
|
271
|
+
name: echo
|
|
272
|
+
labels:
|
|
273
|
+
app: echo
|
|
274
|
+
spec:
|
|
275
|
+
replicas: 3
|
|
276
|
+
selector:
|
|
277
|
+
matchLabels:
|
|
278
|
+
app: echo
|
|
279
|
+
template:
|
|
280
|
+
metadata:
|
|
281
|
+
labels:
|
|
282
|
+
app: echo
|
|
283
|
+
spec:
|
|
284
|
+
containers:
|
|
285
|
+
- name: nginx
|
|
286
|
+
image: gihyodocker/nginx:latest
|
|
287
|
+
env:
|
|
288
|
+
- name: BACKEND_HOST
|
|
289
|
+
value: localhost:8080
|
|
290
|
+
ports:
|
|
291
|
+
- containerPort: 80
|
|
292
|
+
- name: echo
|
|
293
|
+
image: gihyodocker/echo:latest
|
|
294
|
+
ports:
|
|
295
|
+
- containerPort: 8080
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
Pod のマニフェストとの差分が、ReplicaSet を理解する鍵です。
|
|
299
|
+
|
|
300
|
+
- `kind` が `Pod` から `ReplicaSet` に変わり、`apiVersion` も `apps/v1` になっています。
|
|
301
|
+
- `spec.replicas: 3`:維持したい Pod の数を宣言します。
|
|
302
|
+
- `spec.template`:生成する Pod の「ひな型」です。よく見ると、5.6 の Pod の `spec.containers` がそのままここに入れ子になっています。ReplicaSet はこのテンプレートをもとに Pod を量産します。
|
|
303
|
+
- `spec.selector.matchLabels` と `spec.template.metadata.labels`:ここが最重要です。ReplicaSet は「`app: echo` というラベルを持つ Pod」を自分の管理対象として認識します(`selector`)。一方、生成する Pod には同じ `app: echo` というラベルを付けます(`template` の `labels`)。この **ラベルとセレクタが一致** することで、ReplicaSet は自分が作った Pod を管理できるのです。
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
# ReplicaSet を作成する
|
|
307
|
+
kubectl apply -f simple-replicaset.yaml
|
|
308
|
+
|
|
309
|
+
# ReplicaSet と、それが生成した Pod を確認する
|
|
310
|
+
kubectl get replicaset
|
|
311
|
+
kubectl get pod
|
|
312
|
+
```
|
|
313
|
+
|
|
314
|
+
ここで、3 つの Pod のうち 1 つを手動で削除してみると、ReplicaSet がすぐに不足を検知して新しい Pod を起動し、再び 3 つに戻すことが確認できます。これが宣言的モデルとリコンサイルループの威力です。
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
# Pod を 1 つ削除しても、ReplicaSet が自動で補充して 3 つに戻す
|
|
318
|
+
kubectl delete pod <削除したい Pod 名>
|
|
319
|
+
kubectl get pod
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### ラベルによる管理対象の使い分け
|
|
323
|
+
|
|
324
|
+
ラベルは単なる名札ではなく、リソースを束ねる「セレクタの条件」として機能します。`ch05/simple-replicaset-with-label.yaml` は、`app: echo` に加えて `release` ラベル(`spring` / `summer`)を使い、同じアプリの中でリリース系統を分けて管理する例です(出典:`gihyo-docker-kuberbetes/ch05/simple-replicaset-with-label.yaml`)。
|
|
325
|
+
|
|
326
|
+
```yaml
|
|
327
|
+
apiVersion: apps/v1
|
|
328
|
+
kind: ReplicaSet
|
|
329
|
+
metadata:
|
|
330
|
+
name: echo-spring
|
|
331
|
+
labels:
|
|
332
|
+
app: echo
|
|
333
|
+
release: spring
|
|
334
|
+
spec:
|
|
335
|
+
replicas: 1
|
|
336
|
+
selector:
|
|
337
|
+
matchLabels:
|
|
338
|
+
app: echo
|
|
339
|
+
release: spring
|
|
340
|
+
template:
|
|
341
|
+
metadata:
|
|
342
|
+
labels:
|
|
343
|
+
app: echo
|
|
344
|
+
release: spring
|
|
345
|
+
spec:
|
|
346
|
+
containers:
|
|
347
|
+
- name: nginx
|
|
348
|
+
image: gihyodocker/nginx:latest
|
|
349
|
+
env:
|
|
350
|
+
- name: BACKEND_HOST
|
|
351
|
+
value: localhost:8080
|
|
352
|
+
ports:
|
|
353
|
+
- containerPort: 80
|
|
354
|
+
- name: echo
|
|
355
|
+
image: gihyodocker/echo:latest
|
|
356
|
+
ports:
|
|
357
|
+
- containerPort: 8080
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
このファイルには `echo-spring`(replicas: 1)と `echo-summer`(replicas: 2)の 2 つの ReplicaSet が `---` で区切って定義されています。`echo-spring` のセレクタは `app: echo` かつ `release: spring` の両方を満たす Pod だけを管理対象にするため、`echo-summer` の Pod とは混ざりません。ラベルの組み合わせで管理対象を精密に絞り込める、という点を押さえておきましょう。
|
|
361
|
+
|
|
362
|
+
ただし、ReplicaSet を直接運用することも実務では稀です。アプリのバージョンアップ(イメージの差し替え)を安全に行うには、さらに上位の Deployment を使います。
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## 5.8 Deployment
|
|
367
|
+
|
|
368
|
+
**Deployment(デプロイメント)** は、ReplicaSet を管理する上位リソースです。Deployment を使うと、アプリケーションの **ローリングアップデート**(無停止での段階的なバージョン更新)と **ロールバック**(問題があったときに前のバージョンへ戻す操作)が可能になります。実務でアプリを動かす際は、この Deployment が事実上の標準です。
|
|
369
|
+
|
|
370
|
+
次のマニフェストは、5.7 の ReplicaSet とほぼ同じ内容を Deployment として定義し、レプリカ数を 4 にしたものです(出典:`gihyo-docker-kuberbetes/ch05/simple-deployment.yaml`)。
|
|
371
|
+
|
|
372
|
+
```yaml
|
|
373
|
+
apiVersion: apps/v1
|
|
374
|
+
kind: Deployment
|
|
375
|
+
metadata:
|
|
376
|
+
name: echo
|
|
377
|
+
labels:
|
|
378
|
+
app: echo
|
|
379
|
+
spec:
|
|
380
|
+
replicas: 4
|
|
381
|
+
selector:
|
|
382
|
+
matchLabels:
|
|
383
|
+
app: echo
|
|
384
|
+
template:
|
|
385
|
+
metadata:
|
|
386
|
+
labels:
|
|
387
|
+
app: echo
|
|
388
|
+
spec:
|
|
389
|
+
containers:
|
|
390
|
+
- name: nginx
|
|
391
|
+
image: gihyodocker/nginx:latest
|
|
392
|
+
env:
|
|
393
|
+
- name: BACKEND_HOST
|
|
394
|
+
value: localhost:8080
|
|
395
|
+
ports:
|
|
396
|
+
- containerPort: 80
|
|
397
|
+
- name: echo
|
|
398
|
+
image: gihyodocker/echo:latest
|
|
399
|
+
ports:
|
|
400
|
+
- containerPort: 8080
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
ReplicaSet のマニフェストとの差分は、ほぼ `kind` が `Deployment` になっただけです。`spec.replicas`・`spec.selector`・`spec.template` の構造はそのまま引き継がれています。これは偶然ではなく、**Deployment が内部で ReplicaSet を生成し、その ReplicaSet が Pod を生成する** という三段の管理構造になっているためです。
|
|
404
|
+
|
|
405
|
+
```bash
|
|
406
|
+
# Deployment を作成する
|
|
407
|
+
kubectl apply -f simple-deployment.yaml
|
|
408
|
+
|
|
409
|
+
# Deployment → ReplicaSet → Pod が連鎖的に生成されることを確認する
|
|
410
|
+
kubectl get deployment
|
|
411
|
+
kubectl get replicaset
|
|
412
|
+
kubectl get pod
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
Deployment の真価は、テンプレート(とくにコンテナイメージのタグ)を書き換えて再度 `kubectl apply` したときに発揮されます。Deployment は新しいテンプレートに対応する **新しい ReplicaSet** を作り、新 ReplicaSet の Pod を少しずつ増やしながら旧 ReplicaSet の Pod を減らしていきます。これにより、サービスを止めずにバージョンを入れ替えられます。問題が起きた場合は、`kubectl rollout undo` で前の ReplicaSet に戻せます。
|
|
416
|
+
|
|
417
|
+
```bash
|
|
418
|
+
# ロールアウト(更新)の進行状況を確認する
|
|
419
|
+
kubectl rollout status deployment echo
|
|
420
|
+
|
|
421
|
+
# 直前のバージョンに戻す(ロールバック)
|
|
422
|
+
kubectl rollout undo deployment echo
|
|
423
|
+
```
|
|
424
|
+
|
|
425
|
+
「Pod を直接作らず、ReplicaSet も直接作らず、Deployment を宣言する」――これが Kubernetes でアプリを動かす際の基本姿勢です。
|
|
426
|
+
|
|
427
|
+
---
|
|
428
|
+
|
|
429
|
+
## 5.9 Service
|
|
430
|
+
|
|
431
|
+
ここまでで、Deployment によって複数の Pod を安定して動かせるようになりました。しかし、Pod には別の課題があります。Pod は障害復旧やスケーリングのたびに作り直され、その都度 IP アドレスが変わります。クライアントが個々の Pod の IP を直接指定していては、通信先が安定しません。
|
|
432
|
+
|
|
433
|
+
この問題を解決するのが **Service(サービス)** です。Service は、ラベルセレクタで選んだ Pod 群に対して、**安定した仮想 IP(ClusterIP)と DNS 名** を提供します。クライアントは Service の名前にアクセスするだけでよく、Service が背後の Pod 群へ自動的にロードバランシングしてくれます。Pod が入れ替わっても、Service のアドレスは変わりません。
|
|
434
|
+
|
|
435
|
+
次のマニフェストは、`app: echo` ラベルを持つ Pod 群への入口となる Service です(出典:`gihyo-docker-kuberbetes/ch05/simple-service.yaml`)。
|
|
436
|
+
|
|
437
|
+
```yaml
|
|
438
|
+
apiVersion: v1
|
|
439
|
+
kind: Service
|
|
440
|
+
metadata:
|
|
441
|
+
name: echo
|
|
442
|
+
spec:
|
|
443
|
+
selector:
|
|
444
|
+
app: echo
|
|
445
|
+
ports:
|
|
446
|
+
- name: http
|
|
447
|
+
port: 80
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
ポイントは `spec.selector` です。`app: echo` というラベルを持つ Pod(=5.8 の Deployment が生成した Pod)を、この Service の振り分け先(エンドポイント)として自動的に登録します。Deployment と Service は親子関係にあるのではなく、**同じラベルを介して間接的に結びついている** 点に注意してください。ReplicaSet がラベルで Pod を「管理」したのに対し、Service はラベルで Pod を「宛先として選択」しているわけです。
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
# Service を作成する
|
|
454
|
+
kubectl apply -f simple-service.yaml
|
|
455
|
+
|
|
456
|
+
# Service と、選択された Pod(エンドポイント)を確認する
|
|
457
|
+
kubectl get service
|
|
458
|
+
kubectl describe service echo
|
|
459
|
+
```
|
|
460
|
+
|
|
461
|
+
クラスタ内の別の Pod からは、`echo`(同一 Namespace なら名前だけ)という DNS 名で、この Service 経由で echo アプリにアクセスできます。
|
|
462
|
+
|
|
463
|
+
なお、Service にはいくつかタイプがあります。上記のように `type` を省略した場合は `ClusterIP` となり、クラスタ内部からのみアクセスできます。クラスタ外部に公開したい場合は `NodePort` や `LoadBalancer` といったタイプもありますが、HTTP のルーティングをより柔軟に扱う仕組みが次の Ingress です。
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## 5.10 Ingress
|
|
468
|
+
|
|
469
|
+
`ClusterIP` の Service はクラスタ内部からしかアクセスできません。クラスタの外から、たとえばブラウザで HTTP アクセスさせたい場合に使うのが **Ingress(イングレス)** です。Ingress は、ホスト名やパスに応じて外部からのリクエストを適切な Service へ振り分ける、L7(HTTP/HTTPS)レベルのルーティングルールを定義します。
|
|
470
|
+
|
|
471
|
+
### 5.10.1 Ingress コントローラーと IngressClass
|
|
472
|
+
|
|
473
|
+
ここで重要なのは、**Ingress リソースを作っただけでは何も起きない** という点です。Ingress はあくまで「こういうルールでルーティングしてほしい」という宣言であり、そのルールを実際に解釈してリクエストを捌くのは **Ingress コントローラー** という別のコンポーネントです。代表的な実装が **ingress-nginx**(NGINX ベースの Ingress コントローラー)です。
|
|
474
|
+
|
|
475
|
+
`ch05/ingress-nginx.sh` は、この ingress-nginx をクラスタに導入するスクリプトです(出典:`gihyo-docker-kuberbetes/ch05/ingress-nginx.sh`)。
|
|
476
|
+
|
|
477
|
+
```bash
|
|
478
|
+
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.16.2/deploy/mandatory.yaml
|
|
479
|
+
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.16.2/deploy/provider/cloud-generic.yaml
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
このように、外部で公開されているマニフェストを `kubectl apply` することで、ingress-nginx コントローラー本体(Deployment や Service など一式)がクラスタにインストールされます。なお、ここで参照しているバージョン(`nginx-0.16.2`)は書籍刊行時点のものです。現在のローカル環境では、より新しいバージョンの ingress-nginx を導入してください。Docker Desktop など環境によっては、導入手順が異なる場合があります。
|
|
483
|
+
|
|
484
|
+
複数の Ingress コントローラーを併用できるよう、現在の Kubernetes では **IngressClass** という仕組みでコントローラーを指定します。後述の応用例(`apps/echo/k8s/kustomize/ingress.yaml`)では、`spec.ingressClassName: nginx` と書くことで「この Ingress は nginx コントローラーに処理させる」と明示しています。
|
|
485
|
+
|
|
486
|
+
### 5.10.2 Ingress を通じたアクセス
|
|
487
|
+
|
|
488
|
+
Ingress コントローラーを導入したら、ルーティングルールを定義する Ingress リソースを作成します。次のマニフェストは、ホスト名 `ch05.gihyo.local` への HTTP アクセスを、5.9 で作成した `echo` Service(ポート 80)へ転送する定義です(出典:`gihyo-docker-kuberbetes/ch05/simple-ingress.yaml`)。
|
|
489
|
+
|
|
490
|
+
```yaml
|
|
491
|
+
apiVersion: extensions/v1beta1
|
|
492
|
+
kind: Ingress
|
|
493
|
+
metadata:
|
|
494
|
+
name: echo
|
|
495
|
+
spec:
|
|
496
|
+
rules:
|
|
497
|
+
- host: ch05.gihyo.local
|
|
498
|
+
http:
|
|
499
|
+
paths:
|
|
500
|
+
- path: /
|
|
501
|
+
backend:
|
|
502
|
+
serviceName: echo
|
|
503
|
+
servicePort: 80
|
|
504
|
+
```
|
|
505
|
+
|
|
506
|
+
`spec.rules` の中で「ホスト `ch05.gihyo.local` に来た、パス `/` のリクエストを、`echo` という Service のポート 80 へ送る」と宣言しています。これにより、外部 → Ingress → Service → Pod という経路でリクエストが届きます。
|
|
507
|
+
|
|
508
|
+
```bash
|
|
509
|
+
# Ingress を作成する
|
|
510
|
+
kubectl apply -f simple-ingress.yaml
|
|
511
|
+
|
|
512
|
+
# Ingress の状態を確認する
|
|
513
|
+
kubectl get ingress
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
動作確認は、`ch05.gihyo.local` という名前が解決できるようにしたうえで HTTP アクセスします。ローカルでは `hosts` ファイルにホスト名を登録するか、`curl` の `--resolve` / `-H "Host: ..."` を使う方法が一般的です。
|
|
517
|
+
|
|
518
|
+
```bash
|
|
519
|
+
# Host ヘッダーを指定して Ingress 経由でアクセスする(例)
|
|
520
|
+
curl http://localhost -H "Host: ch05.gihyo.local"
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### 新しい API バージョンと Kustomize での記述
|
|
524
|
+
|
|
525
|
+
上記の `simple-ingress.yaml` は `apiVersion: extensions/v1beta1` を使っており、これは書籍刊行当時の古い API です。現在の Kubernetes ではこの API は削除されており、Ingress は `networking.k8s.io/v1` で記述します。フィールド構造も少し変わっているため、新しい書き方を `echo` アプリの応用例で確認しておきましょう(出典:`apps/echo/k8s/kustomize/ingress.yaml`)。
|
|
526
|
+
|
|
527
|
+
```yaml
|
|
528
|
+
apiVersion: networking.k8s.io/v1
|
|
529
|
+
kind: Ingress
|
|
530
|
+
metadata:
|
|
531
|
+
name: echo
|
|
532
|
+
labels:
|
|
533
|
+
app.kubernetes.io/name: echo
|
|
534
|
+
spec:
|
|
535
|
+
ingressClassName: nginx
|
|
536
|
+
rules:
|
|
537
|
+
- host: echo.gihyo.local
|
|
538
|
+
http:
|
|
539
|
+
paths:
|
|
540
|
+
- pathType: Prefix
|
|
541
|
+
path: /
|
|
542
|
+
backend:
|
|
543
|
+
service:
|
|
544
|
+
name: echo
|
|
545
|
+
port:
|
|
546
|
+
number: 80
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
旧 API との違いは次のとおりです。
|
|
550
|
+
|
|
551
|
+
- `spec.ingressClassName: nginx` で、5.10.1 で触れた IngressClass を明示しています。
|
|
552
|
+
- `paths` の各エントリに `pathType: Prefix`(パスの前方一致)が必須になりました。
|
|
553
|
+
- `backend` の指定が `serviceName` / `servicePort` から、`service.name` / `service.port.number` という入れ子の構造に変わりました。
|
|
554
|
+
|
|
555
|
+
この `echo` の応用例では、Deployment・Service・Ingress を `kustomization.yaml` でまとめて管理しています(出典:`apps/echo/k8s/kustomize/`)。`kubectl apply -k` で Kustomize ディレクトリを指定すると、3 つのマニフェストを一括適用できます。
|
|
556
|
+
|
|
557
|
+
```bash
|
|
558
|
+
# Kustomize ディレクトリを一括適用する
|
|
559
|
+
kubectl apply -k apps/echo/k8s/kustomize/
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
この応用例では、ラベルに `app.kubernetes.io/name: echo` という Kubernetes 推奨の命名規約(well-known labels)を採用し、`kustomization.yaml` の `labels` 設定で全リソースへ一括付与しています。本章で学んだ「ラベルとセレクタによる紐づけ」の考え方は、API バージョンが新しくなっても変わらない普遍的な原則です。
|
|
563
|
+
|
|
564
|
+
---
|
|
565
|
+
|
|
566
|
+
## まとめ
|
|
567
|
+
|
|
568
|
+
本章では、Kubernetes の基本概念と中核となる 5 つのリソースを、サンプルマニフェストを通じて学びました。要点を整理します。
|
|
569
|
+
|
|
570
|
+
- **Kubernetes** は、宣言的な「望ましい状態」を維持し続けるコンテナオーケストレーションシステムである。利用者は YAML マニフェストでゴールを宣言し、Kubernetes がリコンサイルループで現実をそれに収束させる。
|
|
571
|
+
- **クラスタ** はコントロールプレーンとワーカー Node から成り、**Namespace** でクラスタ内を論理分割できる。ローカル学習には Docker Desktop / Rancher Desktop / kind が使える(詳細は付録 A)。
|
|
572
|
+
- **Pod** はコンテナの最小デプロイ単位で、Pod 内のコンテナはネットワークを共有し `localhost` で通信できる。
|
|
573
|
+
- **ReplicaSet** はラベルセレクタで Pod を管理し、指定数のレプリカを維持する。
|
|
574
|
+
- **Deployment** は ReplicaSet を管理し、ローリングアップデートとロールバックを実現する。実務ではこれを使うのが基本である。
|
|
575
|
+
- **Service** はラベルで選んだ Pod 群に安定したアドレスを与え、ロードバランシングする。
|
|
576
|
+
- **Ingress** は外部 HTTP アクセスを Service に振り分ける。実際にルーティングを行うのは **Ingress コントローラー(ingress-nginx)** で、**IngressClass** でどのコントローラーに処理させるかを指定する。
|
|
577
|
+
|
|
578
|
+
これらをつなぐ一本の糸が **ラベルとセレクタ** です。`Deployment → ReplicaSet → Pod` は管理関係で、`Service → Pod`・`Ingress → Service` は選択・転送関係でしたが、いずれもラベルの一致によって成立していました。`kubectl apply` でマニフェストを宣言し、`kubectl get` / `describe` / `logs` で状態を観察する――この往復が Kubernetes 運用の基本動作です。
|
|
579
|
+
|
|
580
|
+
次章では、本章で学んだリソースを組み合わせて、実際のアプリケーションを Kubernetes 上に構築・デプロイする実践へ進みます。
|
|
581
|
+
|
|
582
|
+
---
|
|
583
|
+
|
|
584
|
+
- 前の章:[第 4 章 複数コンテナ構成でのアプリケーション構築](04-multi-container-application.md)
|
|
585
|
+
- 次の章:[第 6 章 Kubernetes のデプロイ・クラスタ構築](06-kubernetes-deploy-cluster.md)
|