[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-kubernetes-kak-zadeploit-java-prilozhenie-v-kubernetes":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":15,"progress":16,"seo":17},880,"kak-zadeploit-java-prilozhenie-v-kubernetes",26,"kubernetes","Kubernetes","☸️","Как задеплоить Java-приложение в Kubernetes?","Процесс деплоя Java-приложения в Kubernetes состоит из четырёх этапов: создание Docker-образа, написание манифестов, применение манифестов, настройка CI\u002FCD.\n\n### 1. Создание Docker-образа\n\n\u003Cdetails>\n\u003Csummary>Dockerfile (multi-stage build)\u003C\u002Fsummary>\n\n```dockerfile\nFROM eclipse-temurin:17-jdk-alpine AS builder\nWORKDIR \u002Fapp\nCOPY . .\nRUN .\u002Fmvnw clean package -DskipTests\n\nFROM eclipse-temurin:17-jre-alpine\nWORKDIR \u002Fapp\nRUN addgroup -S appgroup && adduser -S appuser -G appgroup\nCOPY --from=builder \u002Fapp\u002Ftarget\u002F*.jar app.jar\nUSER appuser\nEXPOSE 8080\nENTRYPOINT [\"java\", \"-jar\", \"app.jar\"]\n```\n\n\u003C\u002Fdetails>\n\nСборка и публикация:\n```bash\ndocker build -t my-registry\u002Fmy-spring-app:1.0.0 .\ndocker push my-registry\u002Fmy-spring-app:1.0.0\n```\n\n### 2. Создание Kubernetes-манифестов\n\nФайлы Deployment, Service, ConfigMap, Secret, Ingress (примеры приведены в предыдущих вопросах).\n\n### 3. Применение манифестов\n\n```bash\n# Создать namespace\nkubectl create namespace production\n\n# Создать секрет для доступа к registry (если приватный)\nkubectl create secret docker-registry registry-credentials \\\n  --docker-server=my-registry \\\n  --docker-username=user \\\n  --docker-password=password \\\n  -n production\n\n# Применить все манифесты\nkubectl apply -f k8s\u002F -n production\n\n# Проверить статус\nkubectl get pods -n production\nkubectl describe deployment my-spring-app -n production\n```\n\n### 4. Типичный CI\u002FCD Pipeline\n\n\u003Cdetails>\n\u003Csummary>Пример GitHub Actions workflow\u003C\u002Fsummary>\n\n```yaml\nname: Deploy\non:\n  push:\n    branches: [main]\n\njobs:\n  build-and-deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n\n      - name: Set up JDK 17\n        uses: actions\u002Fsetup-java@v4\n        with:\n          java-version: '17'\n          distribution: 'temurin'\n\n      - name: Build with Maven\n        run: mvn clean package -DskipTests\n\n      - name: Build Docker image\n        run: docker build -t my-registry\u002Fmy-app:${{ github.sha }} .\n\n      - name: Push Docker image\n        run: docker push my-registry\u002Fmy-app:${{ github.sha }}\n\n      - name: Deploy to Kubernetes\n        run: |\n          kubectl set image deployment\u002Fmy-spring-app \\\n            app=my-registry\u002Fmy-app:${{ github.sha }} \\\n            -n production\n```\n\n\u003C\u002Fdetails>\n\n### Чек-лист перед деплоем\n\n- Docker-образ оптимизирован (multi-stage build, JRE вместо JDK, non-root user)\n- Настроены Liveness, Readiness и Startup Probes\n- Указаны Requests и Limits по CPU и памяти\n- JVM настроена для работы в контейнере (`-XX:MaxRAMPercentage`, `-XX:+UseContainerSupport`)\n- Настроен graceful shutdown (`server.shutdown=graceful`)\n- Конфигурация вынесена в ConfigMap\u002FSecret\n- Логи пишутся в stdout\u002Fstderr (не в файл)\n- Приложение stateless (состояние хранится во внешних хранилищах)\n\n> **На собеседовании:** интервьюер ожидает знание полного пайплайна: код -> Docker-образ -> Registry -> K8s-манифесты -> kubectl apply. Частая ошибка — забыть про imagePullSecrets для приватного registry или не настроить probes.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":19,"featuredSnippetReady":22},"Как задеплоить Java-приложение в Kubernetes? — Gymterview","Процесс деплоя Java-приложения в Kubernetes состоит из четырёх этапов: создание Docker-образа, написание манифестов, применение манифестов, настройка CI\u002FCD.","Процесс деплоя Java-приложения в Kubernetes состоит из четырёх этапов: создание Docker-образа, написание манифестов, при",[7,13],true]