Razee는 클러스터, 환경 및 클라우드 제공자 전반에 걸쳐 Kubernetes 리소스의 배포를 자동화 및 관리하고, 롤아웃 프로세스를 모니터링하고 배포 문제를 찾을 수 있도록 리소스에 대한 배포 정보를 시각화하기 위해 IBM에서 개발한 오픈 소스 프로젝트입니다. 더 빨리.
Razee를 시작하려면 다음 링크를 참조하세요.
Razee의 주요 기능과 이를 활용하여 클러스터의 Kubernetes 리소스 배포를 관리하는 방법을 검토하세요.
Razee는 느슨하게 결합되어 독립적으로 사용할 수 있는 RazeeDash, RazeeDeployables 및 RazeeDeploy의 세 가지 모듈로 구성됩니다. RazeeDash를 사용하면 Kubernetes 리소스의 실시간 인벤토리를 동적으로 생성하고 강력한 필터 및 경고 기능을 사용하여 구성 정보를 시각화하고 배포 프로세스의 문제를 보다 신속하게 해결할 수 있습니다. RazeeDeploy 구성 요소는 클러스터, 환경 및 클라우드 전반에 적용되는 유연한 구성을 생성할 수 있도록 Kubernetes 리소스를 템플릿화하고, 리소스와 클러스터를 그룹화하고, 이러한 그룹화에 대한 규칙을 정의하여 다중 클러스터 배포를 단순화하도록 설계되었습니다.
요소 | 설명 |
---|---|
감시자 | Watch Keeper는 Kubernetes 리소스에 대한 구성 정보를 검색하고 이 데이터를 RazeeDash API로 보내는 일을 담당합니다. Watch Keeper를 사용하려면 클러스터에 이 구성 요소를 설치하고 모니터링하려는 모든 리소스에 razee/watch-resource 레이블을 추가하기만 하면 됩니다. 레이블을 추가하면 Watch Keeper는 Kubernetes API 서버에서 구성 정보를 검색하고 이 데이터를 즉시 RazeeDash API로 보냅니다. 이 과정은 매 시간마다 한 번씩 반복됩니다. 또한 Watch Keeper는 리소스 구성이 변경될 때 Kubernetes가 Watch Keeper에 알림을 보낼 수 있도록 리소스에 Kubernetes 이벤트 감시자를 추가합니다. |
라지대시 API | RazeeDash API는 Watch Keeper로부터 Kubernetes 리소스 구성 및 리소스 정의를 받는 서비스입니다. RazeeDash API로 전송된 데이터는 자동으로 MongoDB에 저장됩니다. |
라지대시 | RazeeDash는 Watch Keeper가 검색한 데이터를 시각화하고 클러스터의 Kubernetes 리소스 인벤토리를 동적으로 생성합니다. 지능형 필터 및 경고 기능을 사용하여 이 데이터를 분석하고 배포 프로세스의 문제를 신속하게 식별하고 해결할 수 있습니다. |
클러스터 구독 | ClusterSubscription은 Razee의 구독을 모니터링하여 클러스터에 대한 활성 구독이 존재하는지 확인하는 Razee 배포입니다. 구독이 발견되면 관련 버전의 Kubernetes 리소스를 Razee에서 가져와 자동으로 클러스터에 적용합니다. |
요소 | 설명 |
---|---|
Razee배포 코어 | RazeeDeploy Core는 클러스터에서 실행되고 CRD( CustomResourceDefinitions ), Kubernetes 컨트롤러 및 RazeeDeploy 구성 요소에 대한 종속성을 설정하는 데 사용할 수 있는 지속적인 전달 도구입니다. |
RazeeDeploy 델타 | RazeeDeploy Delta는 클러스터에서 실행되고 RazeeDeploy 구성 요소의 사용자 정의 리소스 정의 및 Kubernetes 컨트롤러를 최신 상태로 유지하는 RazeeDeploy Core의 구성 요소입니다. |
RemoteResource 및 원격 리소스 S3 | RemoteResource 및 RemoteResourceS3는 소스 저장소에 저장된 Kubernetes 리소스를 자동으로 배포하는 데 사용할 수 있는 사용자 지정 리소스 정의 및 컨트롤러입니다. 업데이트가 이루어질 때마다 각 클러스터, 환경 또는 클라우드 전체에 이러한 YAML 파일을 수동으로 적용하는 대신 원격 리소스에 소스 리포지토리를 정의하고 클러스터에 원격 리소스를 생성하기만 하면 됩니다. 원격 리소스 컨트롤러는 자동으로 소스 리포지토리에 연결하고 Kubernetes 구성 파일을 다운로드한 후 클러스터에 파일을 적용합니다. |
콧수염템플릿 | MustacheTemplate은 다른 Kubernetes YAML 파일의 YAML 파일 조각을 대체하는 데 사용할 수 있는 환경 변수를 정의하는 사용자 지정 리소스 정의 및 컨트롤러입니다. 예를 들어 배포하려는 앱 버전을 가리킬 수 있도록 콧수염 템플릿의 환경 변수를 사용하여 원격 리소스에 대한 URL을 빌드합니다. |
기능플래그세트LD | FeatureFlagSetLD는 Launch Darkly에서 기능 플래그 값을 자동으로 검색하는 사용자 정의 리소스 정의 및 컨트롤러입니다. 기능 플래그를 사용하면 클러스터에 배포되는 코드를 제어하고 클러스터, 환경 또는 클라우드 전반에서 여러 버전의 Kubernetes 리소스를 관리할 수 있습니다. |
관리 세트 | ManagedSet은 생성하고 동시에 클러스터에 적용하려는 Kubernetes 리소스를 그룹화하는 사용자 지정 리소스 정의 및 컨트롤러입니다. |
쿠버네티스 유틸리티 | Kubernetes 유틸리티는 Kubernetes와의 통신을 단순화하는 데 사용할 수 있는 npm 패키지입니다. |
클러스터에 Razee를 배포하려면 클러스터가 다음 요구 사항을 충족해야 합니다.
먼저 다음을 실행하여 클러스터에 razeedeploy-delta를 설치합니다.
kubectl apply -f https://github.com/razee-io/Razee/releases/latest/download/razeedeploy.yaml
출력 예:
namespace/razeedeploy created
serviceaccount/razeedeploy-sa created
clusterrole.rbac.authorization.k8s.io/razeedeploy-admin-cr configured
clusterrolebinding.rbac.authorization.k8s.io/razeedeploy-rb configured
job.batch/razeedeploy-job created
kubectl get deploy -n razeedeploy
NAME READY UP-TO-DATE AVAILABLE AGE
remoteresource-controller 1/1 1 1 56s
클러스터에 RazeeDash 구성 요소를 설치합니다. RazeeDash API로 전송된 데이터를 저장하려면 MongoDB 인스턴스를 설정해야 합니다. 제공된 razeedash-all-in-one.yaml
파일을 사용하여 RazeeDash와 단일 MongoDB 인스턴스를 설정하거나 클러스터에서 실행되는 기존 MongoDB 인스턴스로 RazeeDash를 설정하도록 선택할 수 있습니다. 참고 : 클러스터 중 하나에 이미 실행 중인 RazeeDash 인스턴스가 있고 대신 인벤토리 목록에 다른 클러스터를 추가하려는 경우 이 단계를 건너뛰고 클러스터에 Watchkeeper 구성 요소 설치를 계속할 수 있습니다.
RazeeDash 및 단일 MongoDB 인스턴스를 설치하려면 다음을 수행하세요 .
kubectl apply -f https://github.com/razee-io/Razee/releases/latest/download/razeedash-all-in-one.yaml
출력 예:
persistentvolume/mongo-pv-volume created
persistentvolumeclaim/mongo-pv-claim created
deployment.apps/mongo created
service/mongo created
secret/razeedash-secret created
remoteresource.deploy.razee.io/razeedash created
service/razeedash-lb created
service/razeedash-api-lb created
기존 MongoDB 인스턴스를 사용하려면 다음 안내를 따르세요 .
mongo_url에 대한 razeedash 비밀을 만듭니다. 아래 명령을 올바른 포트와 함께 mongo-0, mongo-1 및 mongo-3에 대한 3개의 호스트 인스턴스와 함께 실제 사용자 이름 및 비밀번호로 대체하십시오. mongo URL 끝에 /razeedash?ssl=true
가 있는지 확인하세요.
예 :
kubectl -n razee create secret generic razeedash-secret --from-literal " mongo_url=mongodb://username:password@mongo‑0:27017,mongo‑1:27017,mongo‑2:27017/razeedash?ssl=true "
kubectl apply -f https://github.com/razee-io/Razee/releases/latest/download/razeedash.yaml
razeedash-api
배포가 완료될 때까지 기다립니다. 이전 단계에서 제공된 razeedash-all-in-one.yaml
파일을 사용하여 RazeeDash를 생성하기로 선택한 경우 MongoDB 인스턴스가 클러스터에 생성되고 RazeeDash API 인스턴스에 연결됩니다. MongoDB 설정을 완료하는 데 몇 분 정도 걸리며 RazeeDash API 배포에서 간헐적으로 MongoNetworkError
오류가 발생할 수 있습니다. MongoDB가 완전히 설정되면 Kubernetes는 RazeeDash API 인스턴스 설정을 자동으로 완료합니다.
kubectl logs deploy/razeedash-api -n razee
MongoDB가 아직 설정되지 않은 경우의 출력 예:
> [email protected] start /usr/src
> node app/index.js
(node:16) UnhandledPromiseRejectionWarning: MongoNetworkError: getaddrinfo
ENOTFOUND mongo
at Socket. < anonymous > (/usr/src/node_modules/mongodb-core/lib/connection/connect.js:287:16)
at Object.onceWrapper (events.js:284:20)
at Socket.emit (events.js:196:13)
at emitErrorNT (internal/streams/destroy.js:91:8)
at emitErrorAndCloseNT (internal/streams/destroy.js:59:3)
at processTicksAndRejections (internal/process/task_queues.js:84:9)
(node:16) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch (). (rejection id: 1)
(node:16) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
RazeeDash API가 완전히 설정된 경우 출력 예:
> [email protected] start /usr/src
> node app/index.js
{ " name " : " apollo/subscription " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Apollo streaming servic e is configured on redisUrl: redis://redis-service:6379/0 " , " time " : " 2020-06-03T21:57:16.021Z " , " v " :0}
{ " name " : " apollo/subscription " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Apollo streaming is ena bled on redis endpoint redis-service:6379 " , " time " : " 2020-06-03T21:57:17.062Z " , " v " :0}
{ " name " : " / " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Created new collection users index users " , " time " : " 2020-06-03T21:57:17.222Z " , " v " :0}
{ " name " : " / " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Created new View clusterStatsView " , " time " : " 2020-06-03T21:57:17.239Z " , " v " :0}
{ " name " : " / " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Created new View resourceStatsView " , " time " : " 2020-06-03T21:57:17.241Z " , " v " :0}
{ " name " : " apollo/models " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " SetupDistributedCollections r eceived modelName=resources for DB mongodb://mongo:27017/razeedash " , " time " : " 2020-06-03T21:57:17.284Z " , " v " :0}
{ " name " : " apollo/models " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " SetupDistributedCollections r eceived modelName=orgs for DB mongodb://mongo:27017/razeedash " , " time " : " 2020-06-03T21:57:17.295Z " , " v " :0}
{ " name " : " apollo/models " , " parseUA " :false, " excludes " :[ " referer " , " url " , " body " , " short-body " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " SetupDistributedCollections:c lusters - received modelName=clusters for DB mongodb://mongo:27017/razeedash " , " time " : " 2020-06-03T21:57:17.297Z " , " v " :0}
{ " name " : " apollo " , " parseUA " :false, " excludes " :[ " referer " , " url " , " short-body " , " user-agent " , " req " , " res " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " Initialize apollo application for default auth " , " time " : " 2020-06-03T21:57:17.298Z " , " v " :0}
{ " name " : " apollo " , " parseUA " :false, " excludes " :[ " referer " , " url " , " short-body " , " user-agent " , " req " , " res " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " [] Apollo server c ustom plugin are loaded. " , " time " : " 2020-06-03T21:57:17.299Z " , " v " :0}
{ " name " : " razeedash-api " , " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " ? razeedash-api listening on port 3333/api " , " time " : " 2020-06-03T21:57:17.723Z " , " v " :0}
{ " name " : " apollo " , " parseUA " :false, " excludes " :[ " referer " , " url " , " short-body " , " user-agent " , " req " , " res " ], " hostname " : " razeedash-api-7bd66669b7-jj2vj " , " pid " :17, " level " :30, " msg " : " ? Apollo server listening on http://[::]:3333/graphql " , " time " : " 2020-06-03T21:57:17.734Z " , " v " :0}
RazeeDash API 설정 중에 자동으로 생성되는 razeedash-lb
및 razeedash-api-lb
로드 밸런서 서비스의 외부 IP 주소를 검색하십시오. razeedash-lb
RazeeDash 인스턴스의 퍼블릭 엔드포인트 역할을 하고, razeedash-api-lb
RazeeDash API 인스턴스의 퍼블릭 엔드포인트 역할을 합니다. 할당된 공용 IP 주소를 사용하면 RazeeDash 및 RazeeDash API 구성 요소에 액세스하는 데 사용하는 공용 URL을 구축할 수 있습니다. RazeeDash 설정을 완료하려면 두 개의 URL을 RazeeDash 구성 맵에 저장해야 합니다. 다음 Bash 명령을 사용하여 공용 IP 주소를 검색하고, 공용 URL을 구축하고, RazeeDash 구성 맵에 URL을 저장합니다. Bash 스크립트 bin/kc_create_razeedash_config.sh
를 실행할 수도 있습니다. RazeeDash 구성 맵의 root_url
및 razeedash_api_url
끝에 후행 /
포함해야 합니다.
# Amazon EKS uses host names, IBM Cloud Kubernetes Service uses Ingress IP addresses. This handle both.
RAZEEDASH_LB_IP= $( kubectl get service razeedash-lb -n razee -o jsonpath= " {.status.loadBalancer.ingress[*].ip} " )
RAZEEDASH_API_LB_IP= $( kubectl get service razeedash-api-lb -n razee -o jsonpath= " {.status.loadBalancer.ingress[*].ip} " )
RAZEEDASH_LB_HOSTNAME= $( kubectl get service razeedash-lb -n razee -o jsonpath= " {.status.loadBalancer.ingress[*].hostname} " )
RAZEEDASH_API_LB_HOSTNAME= $( kubectl get service razeedash-api-lb -n razee -o jsonpath= " {.status.loadBalancer.ingress[*].hostname} " )
RAZEEDASH_LB= ${RAZEEDASH_LB_HOSTNAME} && [[ " ${RAZEEDASH_LB_IP} " != " " ]] && RAZEEDASH_LB= ${RAZEEDASH_LB_IP}
RAZEEDASH_API_LB= ${RAZEEDASH_API_LB_HOSTNAME} && [[ " ${RAZEEDASH_API_LB_IP} " != " " ]] && RAZEEDASH_API_LB= ${RAZEEDASH_API_LB_IP}
kubectl create configmap razeedash-config -n razee
--from-literal=root_url=http:// " ${RAZEEDASH_LB} " :8080/
--from-literal=razeedash_api_url=http:// " ${RAZEEDASH_API_LB} " :8081/
모든 Razee 구성요소가 배포되었는지 확인하고 CLI 출력의 READY 열에 1/1
표시되는지 확인하세요.
kubectl get deployments -n razee
출력 예:
NAME READY UP-TO-DATE AVAILABLE AGE
featureflagsetld-controller 1/1 1 1 53m
managedset-controller 1/1 1 1 53m
mongo 1/1 1 1 34m
mustachetemplate-controller 1/1 1 1 53m
razeedash 1/1 1 1 25m
razeedash-api 1/1 1 1 25m
razeedeploy-delta 1/1 1 1 53m
remoteresource-controller 1/1 1 1 53m
remoteresources3-controller 1/1 1 1 53m
RazeeDash 시작 화면을 엽니다.
open http:// " ${RAZEEDASH_LB} " :8080
GitHub, GitHub Enterprise 또는 Bitbucket에서 RazeeDash용 OAuth
애플리케이션을 만듭니다.
RazeeDash 시작 화면에서 OAuth
애플리케이션을 생성하려는 도구 타일을 선택합니다.
팝업 창의 지침에 따라 OAuth
애플리케이션을 생성합니다.
구성 저장을 클릭합니다.
RazeeDash 시작 화면에서 <integration_tool>로 로그인을 클릭하세요.
선택한 통합 도구에 RazeeDash 액세스 권한을 부여하려면 팝업 창의 지침을 따르세요.
OAuth
자격 증명을 재설정해야 하는 경우 인스턴스에 대한 mongo 셸을 열고 다음을 실행하여 다시 시작할 수 있습니다.
> use razeedash
> db.meteor_accounts_loginServiceConfiguration.remove({})
모니터링하려는 모든 클러스터에 Watch Keeper를 설치합니다. Watch Keeper를 설치하는 클러스터는 RazeeDash를 설치한 클러스터와 다를 수 있습니다.
RazeeDash 콘솔에서 Register 를 클릭하세요.
관리 를 클릭합니다.
Razee Agent 설치 kubectl
명령을 복사합니다.
모니터링하려는 클러스터에서 명령을 실행하여 Watch Keeper 구성 요소를 생성합니다. RazeeDash를 설치한 동일한 클러스터에 Watch Keeper를 설치하는 경우 Watch Keeper 구성 요소 중 일부가 클러스터에 이미 존재한다는 메시지가 표시됩니다. 이러한 메시지는 무시해도 됩니다.
kubectl create -f http:// < razeedash-api-lb_external_IP > :8081/api/install/cluster ? orgKey=orgApiKey- < org_api_key >
RazeeDash가 설치된 클러스터의 출력 예:
deployment.apps/remoteresource-controller created
configmap/watch-keeper-config created
secret/watch-keeper-secret created
remoteresource.deploy.razee.io/watch-keeper-rr created
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : namespaces
" razee " already exists
Error from server (AlreadyExists): customresourcedefinitions.
apiextensions.k8s.io " remoteresources.deploy.razee.io " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : namespaces
" razee " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : serviceaccounts
" razeedeploy-sa " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : clusterroles.
rbac.authorization.k8s.io " razeedeploy-admin-cr " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " :
clusterrolebindings.rbac.authorization.k8s.io " razeedeploy-rb " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : configmaps
" razeedeploy-delta-resource-uris " already exists
Error from server (AlreadyExists): error when creating
" http://4e0ef59e-us-south.lb.appdomain.cloud:8081/api/install/cluster?
orgKey=orgApiKey-d52b52fc-38ae-4da0-b187-6e097e5bfe5c " : deployments.apps
" razeedeploy-delta " already exists
RazeeDash가 설치되지 않은 클러스터의 출력 예:
configmap/watch-keeper-config created
secret/watch-keeper-secret created
clusterrole.rbac.authorization.k8s.io/cluster-reader created
serviceaccount/watch-keeper-sa created
clusterrolebinding.rbac.authorization.k8s.io/watch-keeper-rb created
networkpolicy.networking.k8s.io/watch-keeper-deny-ingress created
deployment.apps/watch-keeper created
Error from server (AlreadyExists): namespaces " razee " already exists
Watch Keeper 배포가 완료될 때까지 기다립니다.
kubectl get deployment -n razee | grep watch-keeper
출력 예:
watch-keeper 1/1 1 1 2m5s
RazeeDash 콘솔에서 RazeeDash를 클릭하여 RazeeDash 세부 정보 페이지를 열고 Watch Keeper 포드에 대한 배포 정보를 볼 수 있는지 확인하세요.
클러스터에 Watch Keeper를 설정하면 모니터링하려는 다른 Kubernetes 리소스에 대한 배포 정보를 검색할 수 있습니다. 데이터는 자동으로 RazeeDash API로 전송되며 RazeeDash를 사용하여 이 데이터에 액세스하고 모니터링하고 분석할 수 있습니다.
다음 정보 세부 수준 중에서 선택하여 Watch Keeper가 검색할 정보를 결정하십시오.
lite
: Kubernetes 리소스 구성의 metadata
및 status
섹션을 검색합니다.detail
: Kubernetes 리소스의 모든 구성 데이터를 검색하지만 환경 변수와 구성 맵 및 비밀의 data
섹션은 제외합니다.debug
: 환경 변수 및 data
포함하여 Kubernetes 리소스의 모든 구성 데이터를 검색합니다. 구성 맵 및 비밀 섹션. 이 정보에는 민감한 정보가 포함될 수 있으므로 이 옵션을 주의해서 사용하세요. 모니터링하려는 모든 Kubernetes 리소스의 레이블 섹션에 razee/watch-resource
레이블을 추가하고 정보 세부 수준을 지정합니다. 예를 들어 Kubernetes 배포를 모니터링하려면 다음 명령을 사용합니다. 리소스에 레이블을 추가하면 Watch Keeper가 자동으로 리소스를 스캔하고 데이터를 RazeeDash API로 보냅니다. 그런 다음 리소스는 매 시간마다 한 번씩 검색됩니다. 또한 Watch Keeper는 리소스 구성이 변경될 때 Kubernetes가 Watch Keeper에 알림을 보낼 수 있도록 리소스에 Kubernetes 이벤트 감시자를 추가합니다.
kubectl edit deployment < deployment_name >
YAML 파일 예시:
apiVersion : extensions/v1beta1
kind : Deployment
metadata :
annotations :
deployment.kubernetes.io/revision : " 1 "
kubectl.kubernetes.io/last-applied-configuration : |
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"myapp"},"name":"expandpvc","namespace":"default"},"spec":{"selector":{"matchLabels":{"app":"myapp"}},"template":{"metadata":{"labels":{"app":"myapp"}},"spec":{"con