Skip to content

HakjunMIN/spring-petclinic-cloud

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Board Status

Spring Microservice Petclinic on AKS

ํ•„์š”๋„๊ตฌ

  • Github ๊ณ„์ • (or Azure DevOps ๊ณ„์ •)

  • Azure ๊ณ„์ • ๋ฐ ๊ตฌ๋…

  • Git client

  • Azure Cli 2.3 ์ด์ƒ

  • kubectl

  • Helm

  • Maven

  • JDK

  • Docker

  • IDE (VS Code, IntelliJ .. )

  • OSX, WSL, Linux

  • bash ์„ค์ •

    alias k='kubectl' 
    alias ns='kubectl config set-context $(kubectl config current-context) --namespace'
    alias nsv='kubectl config view | grep namespace:'

๋ชฉํ‘œ ์•„ํ‚คํ…์ฒ˜

architecture

  • ๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๊ตฌ์„ฑ๋œ Spring Petclinic ์•ฑ์„ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด Non-prod ํด๋Ÿฌ์Šคํ„ฐ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์ž„.
  • Non-prod ํ™˜๊ฒฝ์€ ๊ฐœ๋ฐœ๊ณ„๊ณผ ์Šคํ…Œ์ด์ง€๊ณ„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ฐœ๋ฐœ๊ณ„๋Š” Kubernetes Object๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ณ  ์Šคํ…Œ์ด์ง€๊ณ„๋Š” Azure PaaS๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•จ.
๊ตฌ๋ถ„ ๊ฐœ๋ฐœ๊ณ„ ์Šคํ…Œ์ด์ง€๊ณ„
Endpoint Load Balancer Application Gateway
Persistence K8S Statefulset Azure Database for MySQL
๊ตฌ์„ฑ์ •๋ณด K8S ConfigMap Azure App Configuration
๊ธฐ๋ฐ€์ •๋ณด K8S secret Azure KeyVault
Monitoring ์—†์Œ Application Insight
Namespace spring-petclinic spring-petclinic-stage

Infrastructure Provisioning

  • ๋ณธ ์‹ค์Šต์€ ์„ค์ •์„ ์‰ฝ๊ฒŒ ํ™•์ธํ•˜๊ณ  ์‰ฌ์šด ์‚ฌ์šฉ์„ฑ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด Azure Portal ์—์„œ ์ž‘์—…์ˆ˜ํ–‰

  • Azure Kubernetes Service ์ƒ์„ฑ

    • Dev/Test

    • ACR ์ƒ์„ฑ ํ›„ Attach๊ฐ€๋Šฅ

        az aks update -n <your-cluster> -g <your-resource-group> --attach-acr <acr-name>

Note

์‹ค์ œ ๊ตฌ์ถ• ์‹œ bicap ๋””๋ ‰ํ† ๋ฆฌ์˜ IaC์ฝ”๋“œ ํ™œ์šฉ ํ˜น์€ AKS Constructor Helper๋กœ Provisioning ์ž๋™ํ™” ๊ฐ€๋Šฅ https://azure.github.io/AKS-Construction/?deploy.deployItemKey=deployArmCli

ํ˜น์€

 az deployment group create -g <your-resource-group>  --template-uri https://github.com/Azure/AKS-Construction/releases/download/0.9.0/main.json --parameters \
 resourceName=spring-cluster \
 upgradeChannel=stable \
 agentCountMax=20 \
 omsagent=true \
 retentionInDays=30 

Kuberentes Context ์„ค์ •

az login 
az aks get-credentials --resource-group <your-resource-group> --name <your-cluster>
kubectl get nodes

์ƒ˜ํ”Œ ์•ฑ ๋ฐฐํฌ

  • <Kubernetes resources> > Create > Create a starter application

  • ์ƒ˜ํ”Œ์•ฑ ์‚ดํŽด๋ณด๊ธฐ

    kubectl run busybox -i --tty --image=busybox --restart=Never --rm -- sh
    kubectl run curl --rm -i --tty --image=curlimages/curl -- sh
    kubectl logs <pod>
    kubectl describe po <pod>
    kubectl get po -o yaml

Spring Petclinic Microservice ์ฝ”๋“œ

  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌ, ๊ฐ ์„œ๋น„์Šค๋Š” REST API๋กœ ํ†ต์‹ , api-gateway๊ฐ€ Frontend ์—ญํ•  ๋ฐ API์ค‘์žฌ.

์•ฑ ๋นŒ๋“œ ํŒจํ‚ค์ง•

mvn clean package -DskipTests 

export REPOSITORY_PREFIX=<your-registry>.azurecr.io/petclinic
cd spring-petclinic-customers-service && docker build -t ${REPOSITORY_PREFIX}/spring-petclinic-cloud-customers-service . && cd .. 
cd spring-petclinic-vets-service && docker build -t ${REPOSITORY_PREFIX}/spring-petclinic-cloud-vets-service . && cd .. 
cd spring-petclinic-visits-service && docker build -t ${REPOSITORY_PREFIX}/spring-petclinic-cloud-visits-service . && cd .. 
cd spring-petclinic-api-gateway && docker build -t ${REPOSITORY_PREFIX}/spring-petclinic-cloud-api-gateway . && cd .. 

Important

OSX M1 ๋งฅ๋ถ์—์„œ Docker ๋นŒ๋“œํ•  ๋•Œ --platform linux/amd64 ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋„ฃ์–ด์•ผ ํ•จ. ํ˜น์€ buildx๋ฅผ ํ†ตํ•ด ๋ฉ€ํ‹ฐ ํ”Œ๋žซํผ ๋นŒ๋“œ ์ˆ˜ํ–‰ https://www.docker.com/blog/how-to-rapidly-build-multi-architecture-images-with-buildx/

ํ˜น์€ spring-boot:build-image goal ์‚ฌ์šฉ

export REPOSITORY_PREFIX=<your-registry>.azurecr.io/petclinic
mvn spring-boot:build-image -DREPOSITORY_PREFIX=${REPOSITORY_PREFIX} -DskipTests

์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ด๋ฏธ์ง€ ๋ฐฐํฌ

export REPOSITORY_PREFIX=<your-registry>.azurecr.io/petclinic
az acr login --name <your-regtistry>

docker push ${REPOSITORY_PREFIX}/spring-petclinic-cloud-customers-service:latest
docker push ${REPOSITORY_PREFIX}/spring-petclinic-cloud-vets-service:latest
docker push ${REPOSITORY_PREFIX}/spring-petclinic-cloud-visits-service:latest
docker push ${REPOSITORY_PREFIX}/spring-petclinic-cloud-api-gateway:latest

๊ฐœ๋ฐœ๊ณ„ ๊ตฌ์„ฑ

๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒ์„ฑ

kubectl create namespace spring-petclinic

OSS mySQL DB StatefulSet๋กœ ์„ค์น˜

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

helm install vets-db-mysql oci://registry-1.docker.io/bitnamicharts/mysql  --set auth.database=service_instance_db 
helm install visits-db-mysql oci://registry-1.docker.io/bitnamicharts/mysql  --set auth.database=service_instance_db
helm install customers-db-mysql oci://registry-1.docker.io/bitnamicharts/mysql  --set auth.database=service_instance_db 

Note

Helm์œผ๋กœ mysql์„ค์น˜ ์‹œ ์ž๋™์œผ๋กœ ํŒจ์Šค์›Œ๋“œ์— ๋Œ€ํ•œ secret์ƒ์„ฑ๋จ

Role ๋ฐ Role Binding ์ƒ์„ฑ

Helm Chart๋‚ด Template์— ์ •์˜๋˜์–ด ์žˆ์Œ. (์„ค๋ช… ํ•„์š”)

K8S ์ƒ˜ํ”Œ manifestsํŒŒ์ผ ์„ค๋ช…

(์„ ํƒ)Container Registry Service Principal ์ƒ์„ฑ

  • ์™ธ๋ถ€ ACR์„ ์—ฐ๊ฒฐํ• ๋•Œ๋งŒ ํ•„์š”, AKS์™€ Attachํ–ˆ์œผ๋ฉด ํ•„์š”์—†์Œ.

[!NOTE]

#!/bin/bash
# This script requires Azure CLI version 2.25.0 or later. Check version with `az --version`.

# Modify for your environment.
# ACR_NAME: The name of your Azure Container Registry
# SERVICE_PRINCIPAL_NAME: Must be unique within your AD tenant

export containerRegistry=<your-registry>
export servicePrincipal=<your-registry>-sp

ACR_NAME=$containerRegistry
SERVICE_PRINCIPAL_NAME=$servicePrincipal

# Obtain the full registry ID
ACR_REGISTRY_ID=$(az acr show --name $ACR_NAME --query "id" --output tsv)
# echo $registryId

# Create the service principal with rights scoped to the registry.
# Default permissions are for docker pull access. Modify the '--role'
# argument value as desired:
# acrpull:     pull only
# acrpush:     push and pull
# owner:       push, pull, and assign roles
PASSWORD=$(az ad sp create-for-rbac --name $SERVICE_PRINCIPAL_NAME --scopes $ACR_REGISTRY_ID --role acrpull --query "password" --output tsv)
USER_NAME=$(az ad sp list --display-name $SERVICE_PRINCIPAL_NAME --query "[].appId" --output tsv)

# Output the service principal's credentials; use these in your services and
# applications to authenticate to the container registry.
echo "Service principal ID: $USER_NAME"
echo "Service principal password: $PASSWORD"

Helm Chart ์ƒ˜ํ”Œ ์ƒ์„ฑ

cd charts
helm create spring-petclinic

Note

draft ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ Helm Library Chart๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ๊ณตํ†ตํ™”๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ณ  ๊ฐœ๋ฐœ์ž๊ฐ€ ์‰ฝ๊ฒŒ ๋Œ์–ด์“ธ์ˆ˜ ์žˆ์Œ Helm Guide๋Š” ์—ฌ๊ธฐ๋ฅผ ์ฐธ๊ณ 

charts ๋””๋ ‰ํ† ๋ฆฌ ๋ถ„์„

helm template petclinic-dev charts/petclinic --namespace spring-petclinic 

values.yaml ๋‚ด ์ด๋ฏธ์ง€์ •๋ณด ์ˆ˜์ •

vets:
  image:
    repository: <your-registry>.azurecr.io/petclinic/spring-petclinic-cloud-vets-service
    tag: latest
 
customers:
  image:
    repository: <your-registry>.azurecr.io/petclinic/spring-petclinic-cloud-customers-service
    tag: latest 

visits:
  image:
    repository: <your-registry>.azurecr.io/petclinic/spring-petclinic-cloud-visits-service
    tag: latest

api-gateway:
  image:
    repository: <your-registry>.azurecr.io/petclinic/spring-petclinic-cloud-api-gateway
    tag: latest
...

Helm Chart๋กœ ์•ฑ ๋ฐฐํฌ

# helm upgrade --install <๋ฆด๋ฆฌ์ฆˆ๋ช…> <์ฐจํŠธ>
helm upgrade --install petclinic-release charts/petclinic --namespace spring-petclinic

API ํ…Œ์ŠคํŠธ

  • test.http ํŒŒ์ผ๋กœ APIํ…Œ์ŠคํŠธ.

Note

VSCode์˜ REST Client Extension ์ถ”์ฒœ

  • ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด DNS๋กœ APIํ…Œ์ŠคํŠธ ์ˆ˜ํ–‰
kubectl run curl --rm -i --tty --image=curlimages/curl:7.73.0 -- sh
$ curl http://customers-service.spring-petclinic.svc.cluster.local:8080/owners
  • ์„œ๋น„์Šค ํ…Œ์ŠคํŠธ

    • api-gateway์˜ EXTERNAL-IP๋กœ ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ํ…Œ์ŠคํŠธ
    kubectl get svc
    NAME                          TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
    api-gateway                   LoadBalancer   10.0.40.187    20.196.249.134   80:30807/TCP   44h
    customers-db-mysql            ClusterIP      10.0.159.153   <none>           3306/TCP       44h
    customers-db-mysql-headless   ClusterIP      None           <none>           3306/TCP       44h
    ...
    

์Šคํ…Œ์ด์ง€๊ณ„ ํ™˜๊ฒฝ ๊ตฌ์„ฑ

์Šคํ…Œ์ด์ง€ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ƒ์„ฑ

kubectl create namespace spring-petclinic-stage

Azure Database for mySQL

  • Azure Portal์—์„œ flexible db๋กœ ์ƒ์„ฑ

    • service_instance_db DB์ƒ์„ฑ. Admin username๊ณผ Password๋Š” ๋ณ„๋„ ๋ฉ”๋ชจ ํ•„์š”.
  • service-instance-db DB ์ƒ์„ฑ

az mysql flexible-server db create --resource-group <your-resource-group> --server-name <your-mysql> --database-name service_instance_db
  • Portal์—์„œ <your-mysql> > Settings > Connect > Connect from your app > JDBC์šฉ URL ์ฐธ๊ณ 

Important

mySQL์„œ๋น„์Šค์™€ SSLํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ฆ์„œ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•จ. ์ปค๋„ฅ์…˜ ์ŠคํŠธ๋ง์—์„œ ์ธ์ฆ์„œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง€์ •ํ•จ. sslmode=verify-full&&sslfactory=org.mysqlql.ssl.SingleCertValidatingFactory&sslfactoryarg=classpath:BaltimoreCyberTrustRoot.crt.pem BaltimoreCyberTrustRoot.crt.pem๋Š” ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ณ„ src/main/resources์— ์žˆ์Œ.

Application Insights

  • Portal > Application Insights > Create. Resource Mode๋ฅผ Workspace-base๋กœ ์„ค์ •
  • Instrumentation Key ํ•„์š”
  • ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ณ„ pom.xml์— ์•„๋ž˜ ์„ค์ • ์ถ”๊ฐ€
<!-- App Insight -->
<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>applicationinsights-runtime-attach</artifactId>
    <version>${appcliation-insights.version}</version>
</dependency>
  • (์„ ํƒ) ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ณ„ *Application.java ์ฝ”๋“œ์— ์•„๋ž˜ ๋กœ์ง ์ถ”๊ฐ€
import com.microsoft.applicationinsights.attach.ApplicationInsights;
...
@SpringBootApplication
@EnableConfigurationProperties(VetsProperties.class)
public class VetsServiceApplication {
      public static void main(String[] args) {
            ApplicationInsights.attach();
            SpringApplication.run(VetsServiceApplication.class, args);
      }
}
  • Deployment ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— APPINSIGHTS_INSTRUMENTATIONKEY ์„ค์ •

    • values-stage.yaml์— ์•„๋ž˜ ์„ค์ • ์ถ”๊ฐ€
    env:
      - name: APPINSIGHTS_INSTRUMENTATIONKEY
        value: <your-instrumentation-key>

Azure KeyVault

  • AKS์—์„œ Secret Store CSI Driver์™€ Managed ID๋ฅผ ํ™œ์„ฑํ™” ์‹œํ‚ด
export aks=<your-cluster>
export rg=<your-resource-group>
az aks enable-addons -a azure-keyvault-secrets-provider -n $aks -g $rg
az aks update -n $aks -g $rg --enable-managed-identity

Azure KeyVault ์ƒ์„ฑ

  • ๋ฆฌ์ „, ์ด๋ฆ„, Standard Tier๋กœ ๋‚˜๋จธ์ง€๋Š” ๋””ํดํŠธ ์„ค์ •์œผ๋กœ ์ƒ์„ฑ

  • ํด๋Ÿฌ์Šคํ„ฐ์— --enable-managed-identity๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด objectId (Managed ID)๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ.

 "identity": {
        "clientId": "90e35a2c-3a2e-495a-88a6-9ca1cd5d710a",
        "objectId": "668c37cb-ee54-44bf-bc42-03e420240b5d",
        "resourceId": "/subscriptions/2f2d6dff-65ac-45fc-9180-bad1e786a763/resourcegroups/~~~~"
     }
  • KeyVault ์„œ๋น„์Šค์— secret permission์„ ์œ„ AKS managed ID์— ํ• ๋‹นํ•จ
  az keyvault set-policy -n <your-keyvault> --secret-permissions get --object-id 668c37cb-ee54-44bf-bc42-03e420240b5d

mySQL ๊ณ„์ •/๋น„๋ฐ€๋ฒˆํ˜ธ secret์œผ๋กœ ์ €์žฅ

  • KeyVault์— ์•„๋ž˜์™€ ๊ฐ™์ด secret์„ ์ €์žฅํ•จ
az keyvault secret set --vault-name <your-keyvault> --name mysql-user --value <user>

az keyvault secret set --vault-name <your-keyvault> --name mysql-pass --value <password>

Secret Driver Class ๊ตฌ์„ฑ์„ ์œ„ํ•œ yaml์ถ”๊ฐ€

Secret Driver Class Manifest ํŒŒ์ผ secretproviderclass ์ˆ˜์ •

  • userAssignedIdentityID์— ์œ„ Managed ID์˜ clientId๋ฅผ ์ž…๋ ฅ

  • tenantID: ๊ณ„์ •์˜ TenantID ์ž…๋ ฅ

    • CLI๋กœ ํ™•์ธ
     az account tenant list
  • secret-provider-class.yaml ์ƒ˜ํ”Œ

(์ƒ๋žต)
...
spec:
  provider: azure
  secretObjects:                             
  - data:
    - key: mysql-user                          
      objectName: mysql-user
    - key: mysql-pass                          
      objectName: mysql-pass                      
    secretName: dbsecret                    
    type: Opaque  

  parameters:
    usePodIdentity: "false"
    useVMManagedIdentity: "true"
    userAssignedIdentityID: "<clientId>"
    keyvaultName: "<your-keyvault>"
    cloudName: ""
    objects:  |
      array:
        - |
          objectName: mysql-user
          objectType: secret
          objectVersion: ""
        - |
          objectName: mysql-pass
          objectType: secret
          objectVersion: "" 
    tenantId: "<your-tenant-id>"
  • ์ƒ์„ฑ๋œ SecretProviderClass๋ฅผ Volume์œผ๋กœ Mount. ์ด ํ•ญ๋ชฉ์€ values.yaml์—์„œ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Œ. ์ด ํ”„๋กœ์ ํŠธ๋Š” ์Šคํ…Œ์ด์ง€๊ณ„๋งŒ KeyVault๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ values-stage.yaml์— ์ •์˜ํ•จ.

  • Volume, Volume Mount ์„ค์ • (values-stage.yaml)

(์ƒ๋žต)

...
 volumes:
  - name: secrets-store01-inline
    csi:
      driver: secrets-store.csi.k8s.io
      readOnly: true
      volumeAttributes:
        secretProviderClass: "azure-secret"      
  volumeMounts:
  - name: secrets-store01-inline
    mountPath: "/mnt/secrets-store"
    readOnly: true
  • mySQL ์‚ฌ์šฉ์ž ๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์œ„ Secret Provider Class๋กœ ์ƒ์„ฑ๋œ dbsecret Object ์‚ฌ์šฉ (values-stage.yaml)
...
env  
  - name: SPRING_DATASOURCE_USERNAME
    valueFrom:
      secretKeyRef:
        name: dbsecret
        key: mysql-user
  - name: SPRING_DATASOURCE_PASSWORD
    valueFrom:
      secretKeyRef:
        name: dbsecret
        key: mysql-pass  

Application Gateway ์ƒ์„ฑ

  • <your-kubernetes> > Settings> Networking > Application Gateway ingress controller Enable ingress controller > ์‹ ๊ทœ๋กœ ์ƒ์„ฑ

Ingress ์ƒ์„ฑ

  • ์Šคํ…Œ์ด์ง€ ํ™˜๊ฒฝ๋งŒ Ingress์ƒ์„ฑ ๋ฐ Application Gateway ์—ฐ๊ฒฐ

  • deployment์— ingress์šฉ annotations์ธ kubernetes.io/ingress.class: azure/application-gateway ์ถ”๊ฐ€

    • values-stage.yaml ์ƒ˜ํ”Œ
    api-gateway:
      env:
      - name: SPRING_PROFILES_ACTIVE         
        value: "stage"     
      ingress:
        enabled: true
        annotations: 
          kubernetes.io/ingress.class: azure/application-gateway
        hosts:
          - host:
            paths:
              - path: /
                pathType: Exact
        tls: []
    

Azure AppConfiguration ์„ค์ •

  • Portal > App Configuration > Create
  • Free Tier ์„ ํƒ
  • Operations > Import/Export > Import > application-for-app-config.yaml ํŒŒ์ผ ์„ ํƒ
  • Settings > Access keys > read only์šฉ Connection String ๋ณต์‚ฌ
  • ๊ฐ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๋ณ„ bootstrap.yaml์— ์•„๋ž˜ ์„ค์ • ์ถ”๊ฐ€
spring:
  config:
    activate:
      on-profile: stage
  cloud:
    config:
      enabled: false
    kubernetes:
      reload:
        strategy: restart-context
        enabled: true
    azure:
      appconfiguration:
        enabled: true
        stores:
          - connection-string: "<your-appconfigration-connection-string>"

์™„์„ฑ๋œ Stage์šฉ value file ํ™•์ธ

Helm Chart๋กœ ์Šคํ…Œ์ด์ง€์šฉ ์•ฑ ๋ฐฐํฌ

Important

๊ฐ€์žฅ ๋‚˜์ค‘์— ์„ ์–ธ๋œ ์„ ์–ธ ๊ฐ’์ด ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๊ณ  Overriding๋จ. ๋นˆ ๊ฐ’์œผ๋กœ ์„ ์–ธํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜!

helm upgrade --install <๋ฆด๋ฆฌ์ฆˆ๋ช…> <์ฐจํŠธ> -f <ํ™˜๊ฒฝ๋ณ„ ๊ตฌ์„ฑ์ •๋ณด> -f <๋ฆฌ์ „๋ณ„ ๊ตฌ์„ฑ์ •๋ณด> ...-f <๊ตฌ์„ฑ์ •๋ณด>

ns spring-petclinic-stage
helm upgrade --install petclinic-stage charts/petclinic -f charts/petclinic/values-stage.yaml --namespace spring-petclinic-stage

Azure DevOps๋ฅผ ์ด์šฉํ•œ CI/CD๋Š” ๋ณ„๋„ ํ”„๋กœ์ ํŠธ ์ฐธ๊ณ 

About

Spring Boog based Microservice on AKS and with Azure PaaS

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Bicep 43.5%
  • Java 32.5%
  • Shell 6.4%
  • HTML 5.3%
  • JavaScript 4.3%
  • Less 3.9%
  • Other 4.1%