이 클라이언트는 유창한 DSL을 통해 전체 Kubernetes 및 OpenShift REST API에 대한 액세스를 제공합니다.
기준 치수 | 메이븐 센트럴 | Javadoc |
---|---|---|
쿠버네티스 클라이언트 | ||
오픈시프트 클라이언트 |
확장 | 메이븐 센트럴 | Javadoc |
---|---|---|
knative 클라이언트 | ||
텍톤 클라이언트 | ||
카오스메시 클라이언트 | ||
볼륨스냅샷 클라이언트 | ||
화산 클라이언트 | ||
istio-클라이언트 | ||
오픈 클러스터 관리 클라이언트 |
클라이언트를 생성하는 가장 쉬운 방법은 다음과 같습니다.
KubernetesClient client = new KubernetesClientBuilder (). build ();
DefaultOpenShiftClient
KubernetesClient
및 OpenShiftClient
인터페이스를 모두 구현하므로 Build
등과 같은 OpenShift 확장이 필요한 경우 다음을 수행하면 됩니다.
OpenShiftClient osClient = new KubernetesClientBuilder (). build (). adapt ( OpenShiftClient . class );
그러면 다음 우선순위에 따라 다양한 소스의 설정이 사용됩니다.
환경 변수보다 시스템 속성이 선호됩니다. 구성에는 다음 시스템 속성 및 환경 변수를 사용할 수 있습니다.
속성/환경 변수 | 설명 | 기본값 |
---|---|---|
kubernetes.disable.autoConfig / KUBERNETES_DISABLE_AUTOCONFIG | 자동 구성 비활성화(KubernetesClient는 ~/.kube/config , 마운트된 ServiceAccount, 환경 변수 또는 Kubernetes 클러스터 정보에 대한 시스템 속성을 찾지 않음) | false |
kubernetes.master / KUBERNETES_MASTER | Kubernetes 마스터 URL | https://kubernetes.default.svc |
kubernetes.api.version / KUBERNETES_API_VERSION | API 버전 | v1 |
openshift.url / OPENSHIFT_URL | OpenShift 마스터 URL | Kubernetes 마스터 URL 값 |
kubernetes.oapi.version / KUBERNETES_OAPI_VERSION | 오픈시프트 API 버전 | v1 |
kubernetes.trust.certificates / KUBERNETES_TRUST_CERTIFICATES | 모든 인증서 신뢰 | false |
kubernetes.disable.hostname.verification / KUBERNETES_DISABLE_HOSTNAME_VERIFICATION | false | |
kubernetes.certs.ca.file / KUBERNETES_CERTS_CA_FILE | ||
kubernetes.certs.ca.data / KUBERNETES_CERTS_CA_DATA | ||
kubernetes.certs.client.file / KUBERNETES_CERTS_CLIENT_FILE | ||
kubernetes.certs.client.data / KUBERNETES_CERTS_CLIENT_DATA | ||
kubernetes.certs.client.key.file / KUBERNETES_CERTS_CLIENT_KEY_FILE | ||
kubernetes.certs.client.key.data / KUBERNETES_CERTS_CLIENT_KEY_DATA | ||
kubernetes.certs.client.key.algo / KUBERNETES_CERTS_CLIENT_KEY_ALGO | 클라이언트 키 암호화 알고리즘 | RSA |
kubernetes.certs.client.key.passphrase / KUBERNETES_CERTS_CLIENT_KEY_PASSPHRASE | ||
kubernetes.auth.basic.username / KUBERNETES_AUTH_BASIC_USERNAME | ||
kubernetes.auth.basic.password / KUBERNETES_AUTH_BASIC_PASSWORD | ||
kubernetes.auth.serviceAccount.token / KUBERNETES_AUTH_SERVICEACCOUNT_TOKEN | 서비스 계정 토큰 파일의 이름 | /var/run/secrets/kubernetes.io/serviceaccount/token |
kubernetes.auth.tryKubeConfig / KUBERNETES_AUTH_TRYKUBECONFIG | Kubernetes 구성을 사용하여 클라이언트 구성 | true |
kubeconfig / KUBECONFIG | 읽을 kubernetes 구성 파일의 이름 | ~/.kube/config |
kubernetes.auth.tryServiceAccount / KUBERNETES_AUTH_TRYSERVICEACCOUNT | 서비스 계정에서 클라이언트 구성 | true |
kubernetes.tryNamespacePath / KUBERNETES_TRYNAMESPACEPATH | Kubernetes 서비스 계정 네임스페이스 경로에서 클라이언트 네임스페이스 구성 | true |
kubernetes.auth.token / KUBERNETES_AUTH_TOKEN | ||
kubernetes.watch.reconnectInterval / KUBERNETES_WATCH_RECONNECTINTERVAL | 재연결 간격(ms) 확인 | 1000 |
kubernetes.watch.reconnectLimit / KUBERNETES_WATCH_RECONNECTLIMIT | 재연결 시도 횟수(무한의 경우 -1) | -1 |
kubernetes.connection.timeout / KUBERNETES_CONNECTION_TIMEOUT | 연결 시간 초과(ms)(시간 초과가 없는 경우 0) | 10000 |
kubernetes.request.timeout / KUBERNETES_REQUEST_TIMEOUT | 읽기 시간 초과(ms) | 10000 |
kubernetes.upload.connection.timeout / KUBERNETES_UPLOAD_CONNECTION_TIMEOUT | 포드 업로드 연결 시간 초과(밀리초) | 10000 |
kubernetes.upload.request.timeout / KUBERNETES_UPLOAD_REQUEST_TIMEOUT | Pod 업로드 요청 제한 시간(ms) | 120000 |
kubernetes.request.retry.backoffLimit / KUBERNETES_REQUEST_RETRY_BACKOFFLIMIT | 재시도 횟수(무한의 경우 -1) | 10 |
kubernetes.request.retry.backoffInterval / KUBERNETES_REQUEST_RETRY_BACKOFFINTERVAL | 초기 백오프 간격 재시도(ms) | 100 |
kubernetes.rolling.timeout / KUBERNETES_ROLLING_TIMEOUT | 롤링 시간 초과(ms) | 900000 |
kubernetes.logging.interval / KUBERNETES_LOGGING_INTERVAL | 로깅 간격(ms) | 20000 |
kubernetes.scale.timeout / KUBERNETES_SCALE_TIMEOUT | 확장 제한 시간(ms) | 600000 |
kubernetes.websocket.timeout / KUBERNETES_WEBSOCKET_TIMEOUT | 웹소켓 시간 초과(ms) | 5000 |
kubernetes.websocket.ping.interval / KUBERNETES_WEBSOCKET_PING_INTERVAL | 웹소켓 핑 간격(ms) | 30000 |
kubernetes.max.concurrent.requests / KUBERNETES_MAX_CONCURRENT_REQUESTS | 64 | |
kubernetes.max.concurrent.requests.per.host / KUBERNETES_MAX_CONCURRENT_REQUESTS_PER_HOST | 5 | |
kubernetes.impersonate.username / KUBERNETES_IMPERSONATE_USERNAME | Impersonate-User HTTP 헤더 값 | |
kubernetes.impersonate.group / KUBERNETES_IMPERSONATE_GROUP | Impersonate-Group HTTP 헤더 값 | |
kubernetes.tls.versions / KUBERNETES_TLS_VERSIONS | TLS 버전은 , 로 구분됩니다. | TLSv1.2,TLSv1.3 |
kubernetes.truststore.file / KUBERNETES_TRUSTSTORE_FILE | ||
kubernetes.truststore.passphrase / KUBERNETES_TRUSTSTORE_PASSPHRASE | ||
kubernetes.keystore.file / KUBERNETES_KEYSTORE_FILE | ||
kubernetes.keystore.passphrase / KUBERNETES_KEYSTORE_PASSPHRASE | ||
kubernetes.backwardsCompatibilityInterceptor.disable / KUBERNETES_BACKWARDSCOMPATIBILITYINTERCEPTOR_DISABLE | BackwardsCompatibilityInterceptor 비활성화 | true |
no.proxy / NO_PROXY | 쉼표로 구분된 도메인 확장 프록시 목록은 다음 용도로 사용하면 안 됩니다. | |
http.proxy / HTTP_PROXY | HTTP 요청용 프록시 URL(프록시 우선순위 참조) | |
https.proxy / HTTPS_PROXY | HTTPS 요청에 대한 프록시 URL(프록시 우선순위 참조) |
또는 ConfigBuilder
사용하여 Kubernetes 클라이언트에 대한 구성 객체를 생성할 수 있습니다.
Config config = new ConfigBuilder (). withMasterUrl ( "https://mymaster.com" ). build ();
KubernetesClient client = new KubernetesClientBuilder (). withConfig ( config ). build ();
DSL 사용은 모든 리소스에 동일합니다.
리소스 나열:
NamespaceList myNs = client . namespaces (). list ();
ServiceList myServices = client . services (). list ();
ServiceList myNsServices = client . services (). inNamespace ( "default" ). list ();
리소스를 얻으세요:
Namespace myns = client . namespaces (). withName ( "myns" ). get ();
Service myservice = client . services (). inNamespace ( "default" ). withName ( "myservice" ). get ();
삭제:
Namespace myns = client . namespaces (). withName ( "myns" ). delete ();
Service myservice = client . services (). inNamespace ( "default" ). withName ( "myservice" ). delete ();
리소스 편집에는 Kubernetes 모델의 인라인 빌더가 사용됩니다.
Namespace myns = client . namespaces (). withName ( "myns" ). edit ( n -> new NamespaceBuilder ( n )
. editMetadata ()
. addToLabels ( "a" , "label" )
. endMetadata ()
. build ());
Service myservice = client . services (). inNamespace ( "default" ). withName ( "myservice" ). edit ( s -> new ServiceBuilder ( s )
. editMetadata ()
. addToLabels ( "another" , "label" )
. endMetadata ()
. build ());
같은 정신으로 빌더를 인라인하여 다음을 생성할 수 있습니다.
Namespace myns = client . namespaces (). create ( new NamespaceBuilder ()
. withNewMetadata ()
. withName ( "myns" )
. addToLabels ( "a" , "label" )
. endMetadata ()
. build ());
Service myservice = client . services (). inNamespace ( "default" ). create ( new ServiceBuilder ()
. withNewMetadata ()
. withName ( "myservice" )
. addToLabels ( "another" , "label" )
. endMetadata ()
. build ());
SecurityContextConstraints의 경우처럼 리소스의 apiVersion을 설정할 수도 있습니다.
SecurityContextConstraints scc = new SecurityContextConstraintsBuilder ()
. withApiVersion ( "v1" )
. withNewMetadata (). withName ( "scc" ). endMetadata ()
. withAllowPrivilegedContainer ( true )
. withNewRunAsUser ()
. withType ( "RunAsAny" )
. endRunAsUser ()
. build ();
Watcher의 경우 io.fabric8.kubernetes.api.model.Event
T로 사용합니다.
client . events (). inAnyNamespace (). watch ( new Watcher <>() {
@ Override
public void eventReceived ( Action action , Event resource ) {
System . out . println ( "event " + action . name () + " " + resource . toString ());
}
@ Override
public void onClose ( WatcherException cause ) {
System . out . println ( "Watcher close due to " + cause );
}
});
kubernetes API는 extensions()
DSL에서 모두 사용할 수 있는 daemonSets
, jobs
, ingresses
등과 같은 여러 확장을 정의합니다.
예를 들어 작업을 나열하려면...
jobs = client.batch().jobs().list();
클라이언트 DSL을 사용하여 리소스를 정의하는 대신 외부 소스에서 리소스를 읽고 싶은 경우가 있습니다. 이러한 경우 클라이언트는 다음에서 리소스를 로드할 수 있도록 허용합니다.
리소스가 로드되면 리소스를 직접 생성한 것처럼 처리할 수 있습니다.
예를 들어 yml 파일에서 Pod를 읽고 작업해 보겠습니다.
Pod refreshed = client.load('/path/to/a/pod.yml').fromServer().get();
client.load('/workspace/pod.yml').delete();
LogWatch handle = client.load('/workspace/pod.yml').watchLog(System.out);
동일한 정신으로 외부에서 생성된 객체(참조 또는 문자열 표현 사용)를 사용할 수 있습니다.
예를 들어:
Pod pod = someThirdPartyCodeThatCreatesAPod();
client.resource(pod).delete();
클라이언트는 플러그 가능 어댑터를 지원합니다. 예제 어댑터는 기존 KubernetesClient 인스턴스를 OpenShiftClient 인스턴스에 맞게 조정할 수 있는 OpenShift 어댑터입니다.
예를 들어:
KubernetesClient client = new KubernetesClientBuilder (). build ();
OpenShiftClient oClient = client . adapt ( OpenShiftClient . class );
클라이언트는 또한 적응이 가능한지 확인하고 가능한 경우 true를 반환하는 isAdaptable() 메서드를 지원합니다.
KubernetesClient client = new KubernetesClientBuilder (). build ();
if ( client . isAdaptable ( OpenShiftClient . class )) {
OpenShiftClient oClient = client . adapt ( OpenShiftClient . class );
} else {
throw new Exception ( "Adapting to OpenShiftClient not support. Check if adapter is present, and that env provides /oapi root path." );
}
적응()을 사용할 때 적응 대상과 대상 모두 동일한 리소스(기본 http 클라이언트, 스레드 풀 등)를 공유합니다. 이는 Adapt를 통해 생성된 모든 단일 인스턴스에 close()를 사용할 필요가 없음을 의미합니다. adap() 관리형 인스턴스 또는 원래 인스턴스에서 close()를 호출하면 모든 리소스가 적절하게 정리되므로 더 이상 사용할 수 있는 인스턴스가 없습니다.
클라이언트와 함께 이 프로젝트는 테스트 목적으로 사용할 수 있는 kubernetes 모의 서버도 제공합니다. 모의 서버는 https://github.com/square/okhttp/tree/master/mockwebserver
기반으로 하지만 https://github.com/fabric8io/mockwebserver
에서 제공하는 DSL 및 기능을 통해 강화됩니다.
모의 웹 서버에는 두 가지 작동 모드가 있습니다.
예상되는 http 요청과 각 요청에 대한 응답을 먼저 설정하는 일반적인 모드입니다. 사용법에 대한 자세한 내용은 https://github.com/fabric8io/mockwebserver에서 확인할 수 있습니다.
이 모드는 클라이언트 자체를 테스트하는 데 광범위하게 사용되었습니다. kubernetes-test를 확인하세요.
테스트에 Kubernetes 서버를 추가하려면 다음 안내를 따르세요.
@ Rule
public KubernetesServer server = new KubernetesServer ();
모든 단일 요청과 응답을 정의하는 것은 번거로울 수 있습니다. 대부분의 경우 모의 웹서버가 간단한 crud 기반 작업을 수행하는 데 사용된다는 점을 고려하여 crud 모드가 추가되었습니다. crud 모드를 사용할 때 모의 웹 서버는 메모리 맵을 사용하여 kubernetes 리소스를 저장, 읽기, 업데이트 및 삭제하며 실제 API 서버로 나타납니다.
테스트에 crud 모드의 Kubernetes 서버를 추가하려면 다음 안내를 따르세요.
@ Rule
public KubernetesServer server = new KubernetesServer ( true , true );
그런 다음 다음과 같이 서버를 사용할 수 있습니다.
@ Test
public void testInCrudMode () {
KubernetesClient client = server . getClient ();
final CountDownLatch deleteLatch = new CountDownLatch ( 1 );
final CountDownLatch closeLatch = new CountDownLatch ( 1 );
//CREATE
client . pods (). inNamespace ( "ns1" ). create ( new PodBuilder (). withNewMetadata (). withName ( "pod1" ). endMetadata (). build ());
//READ
podList = client . pods (). inNamespace ( "ns1" ). list ();
assertNotNull ( podList );
assertEquals ( 1 , podList . getItems (). size ());
//WATCH
Watch watch = client . pods (). inNamespace ( "ns1" ). withName ( "pod1" ). watch ( new Watcher <>() {
@ Override
public void eventReceived ( Action action , Pod resource ) {
switch ( action ) {
case DELETED :
deleteLatch . countDown ();
break ;
default :
throw new AssertionFailedError ( action . toString (). concat ( " isn't recognised." ));
}
}
@ Override
public void onClose ( WatcherException cause ) {
closeLatch . countDown ();
}
});
//DELETE
client . pods (). inNamespace ( "ns1" ). withName ( "pod1" ). delete ();
//READ AGAIN
podList = client . pods (). inNamespace ( "ns1" ). list ();
assertNotNull ( podList );
assertEquals ( 0 , podList . getItems (). size ());
assertTrue ( deleteLatch . await ( 1 , TimeUnit . MINUTES ));
watch . close ();
assertTrue ( closeLatch . await ( 1 , TimeUnit . MINUTES ));
}
JUnit5에서 KubernetesClient 모의 메커니즘을 사용할 수 있습니다. @Rule
및 @ClassRule
지원하지 않으므로 전용 주석 @EnableKubernetesMockClient
가 있습니다. 각 테스트(JUnit4 @Rule
)에 대해 모의 KubernetesClient
인스턴스를 생성하려면 아래와 같이 KubernetesClient
인스턴스를 선언해야 합니다.
@ EnableKubernetesMockClient
class ExampleTest {
KubernetesClient client ;
@ Test
public void testInStandardMode () {
...
}
}
모든 테스트(JUnit4 @ClassRule
)마다 모의 서버의 정적 인스턴스를 정의하려는 경우 아래와 같이 KubernetesClient
인스턴스를 선언해야 합니다. 주석 필드 crud
사용하여 crudMode를 활성화할 수도 있습니다.
@ EnableKubernetesMockClient ( crud = true )
class ExampleTest {
static KubernetesClient client ;
@ Test
public void testInCrudMode () {
// ...
}
}
실제 Kubernetes API를 테스트하기 위해 프로젝트는 경량 접근 방식을 제공하여 Kubernetes API 서버 및 etcd 바이너리를 시작합니다.
@ EnableKubeAPIServer
class KubeAPITestSample {
static KubernetesClient client ;
@ Test
void testWithClient () {
// test using the client against real K8S API Server
}
}
자세한 내용은 Kube API 테스트 문서를 참조하세요.
v5.5부터 Kubernetes 클라이언트는 지원되는 모든 Kubernetes 클러스터 버전과 호환되어야 합니다. 가장 일반적으로 사용되는 Kubernetes 리소스에 대해 DSL 메서드(예: client.pods()
, client.namespaces()
등)를 제공합니다. 찾고 있는 리소스를 DSL을 통해 사용할 수 없는 경우 언제든지 일반 client.resource()
메서드를 사용하여 상호 작용할 수 있습니다. 새 문제를 열어 DSL에 새 리소스 추가를 요청할 수도 있습니다.
우리는 모든 바닐라 Kubernetes 리소스(및 일부 확장)에 대해 Kubernetes Java 모델 유형(예: Pod
)과 해당 빌더(예: PodBuilder
)를 제공합니다. 특정 리소스를 찾을 수 없고 해당 리소스가 Kubernetes 클라이언트의 일부여야 한다고 생각하는 경우 새 문제를 열어주세요.
v5.5부터 OpenShift 클라이언트는 현재 Red Hat에서 지원하는 모든 OpenShift 클러스터 버전과 호환되어야 합니다. Fabric8 Kubernetes 클라이언트는 지원되는 모든 OpenShift 클러스터 버전을 완벽하게 지원하는 몇 안되는 Kubernetes Java 클라이언트 중 하나입니다. 호환되지 않거나 누락된 부분이 있으면 새 문제를 열어주세요.
여기에 사용된 모든 리소스 개체는 OpenShift 3.9.0 및 Kubernetes 1.9.0을 따릅니다. 모든 리소스 개체는 OpenShift 3.9.0 및 Kubernetes 1.9.0에 따라 모든 필드를 제공합니다.
batch
와 extensions
모두에 있습니다(확장은 더 이상 사용되지 않음).apps
과 extensions
모두에 있습니다(확장 프로그램은 더 이상 사용되지 않음)apps
과 extensions
모두에 있습니다(확장 프로그램은 더 이상 사용되지 않음)apps
과 extensions
모두에 있습니다(확장 프로그램은 더 이상 사용되지 않음)network
와 extensions
모두에 있습니다(확장은 더 이상 사용되지 않음).client base DSL
에서 storage
DSL로 이동되었습니다.client base DSL
및 extensions
에서 extensions
으로 이동되었습니다.확장:
프레임워크/라이브러리/도구:
CI 플러그인:
빌드 도구:
플랫폼:
독점 플랫폼:
커뮤니티가 성장함에 따라 사용자를 지속적으로 추적하고 싶습니다. 귀하의 단체/커뮤니티명을 포함한 PR을 보내주세요.
모든 새로운 Pull Request에 대해 실행되는 테스트를 위한 Github Actions 및 Jenkins 링크가 있습니다. 최근 빌드도 모두 볼 수 있습니다.
릴리스에 대한 업데이트를 받으려면 https://groups.google.com/forum/embed/?place=forum/fabric8-devclients에 가입하세요.
이 테이블은 kubectl
과 Kubernetes Java 클라이언트 간의 매핑을 제공합니다. 대부분의 매핑은 매우 간단하며 하나의 라이너 작업입니다. 그러나 일부에서는 동일한 결과를 얻기 위해 약간 더 많은 코드가 필요할 수 있습니다.
kubectl | Fabric8 Kubernetes 클라이언트 |
---|---|
kubectl config view | ConfigViewEquivalent.java |
kubectl config get-contexts | ConfigGetContextsEquivalent.java |
kubectl config current-context | ConfigGetCurrentContextEquivalent.java |
kubectl config use-context minikube | ConfigUseContext.java |
kubectl config view -o jsonpath='{.users[*].name}' | ConfigGetCurrentContextEquivalent.java |
kubectl get pods --all-namespaces | PodListGlobalEquivalent.java |
kubectl get pods | PodListEquivalent.java |
kubectl get pods -w | PodWatchEquivalent.java |
kubectl get pods --sort-by='.metadata.creationTimestamp' | PodListGlobalEquivalent.java |
kubectl run | PodRunEquivalent.java |
kubectl create -f test-pod.yaml | PodCreateYamlEquivalent.java |
kubectl exec my-pod -- ls / | PodExecEquivalent.java |
kubectl attach my-pod | PodAttachEquivalent.java |
kubectl delete pod my-pod | PodDelete.java |
kubectl delete -f test-pod.yaml | PodDeleteViaYaml.java |
kubectl cp /foo_dir my-pod:/bar_dir | UploadDirectoryToPod.java |
kubectl cp my-pod:/tmp/foo /tmp/bar | 다운로드파일FromPod.java |
kubectl cp my-pod:/tmp/foo -c c1 /tmp/bar | 다운로드FileFromMultiContainerPod.java |
kubectl cp /foo_dir my-pod:/tmp/bar_dir | UploadFileToPod.java |
kubectl logs pod/my-pod | PodLogsEquivalent.java |
kubectl logs pod/my-pod -f | PodLogsFollowEquivalent.java |
kubectl logs pod/my-pod -c c1 | PodLogsMultiContainerEquivalent.java |
kubectl port-forward my-pod 8080:80 | PortForwardEquivalent.java |
kubectl get pods --selector=version=v1 -o jsonpath='{.items[*].metadata.name}' | PodListFilterByLabel.java |
kubectl get pods --field-selector=status.phase=Running | PodListFilterFieldSelector.java |
kubectl get pods --show-labels | PodShowLabels.java |
kubectl label pods my-pod new-label=awesome | PodAddLabel.java |
kubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq | PodAddAnnotation.java |
kubectl get configmap cm1 -o jsonpath='{.data.database}' | ConfigMapJsonPathEquivalent.java |
kubectl create -f test-svc.yaml | LoadAndCreateService.java |
kubectl create -f test-deploy.yaml | LoadAndCreateDeployment.java |
kubectl set image deploy/d1 nginx=nginx:v2 | RolloutSetImageEquivalent.java |
kubectl scale --replicas=4 deploy/nginx-deployment | ScaleEquivalent.java |
kubectl scale statefulset --selector=app=my-database --replicas=4 | ScaleWithLabelsEquivalent.java |
kubectl rollout restart deploy/d1 | RolloutRestartEquivalent.java |
kubectl rollout pause deploy/d1 | RolloutPauseEquivalent.java |
kubectl rollout resume deploy/d1 | RolloutResumeEquivalent.java |
kubectl rollout undo deploy/d1 | RolloutUndoEquivalent.java |
kubectl create -f test-crd.yaml | LoadAndCreateCustomResourceDefinition.java |
kubectl create -f customresource.yaml | CustomResourceCreateDemo.java |
kubectl create -f customresource.yaml | CustomResourceCreateDemoTypeless.java |
kubectl get ns | NamespaceListEquivalent.java |
kubectl create namespace test | 네임스페이스CreateEquivalent.java |
kubectl apply -f test-resource-list.yml | CreateOrReplaceResourceList.java |
kubectl get events | 이벤트GetEquivalent.java |
kubectl top nodes | TopEquivalent.java |
kubectl auth can-i create deployment.apps | CanIEquivalent.java |
kubectl create -f test-csr-v1.yml | CertificateSigningRequestCreateYamlEquivalent.java |
kubectl certificate approve my-cert | CertificateSigningRequestApproveYamlEquivalent.java |
kubectl certificate deny my-cert | CertificateSigningRequestDenyYamlEquivalent.java |
kubectl create -f quota.yaml --namespace=default | CreateResourceQuotaInNamespaceYamlEquivalent.java |