Dieser Client bietet Zugriff auf die vollständigen Kubernetes- und OpenShift-REST-APIs über ein fließendes DSL.
Modul | Maven Central | Javadoc |
---|---|---|
Kubernetes-Client | ||
OpenShift-Client |
Erweiterungen | Maven Central | Javadoc |
---|---|---|
Knative-Client | ||
Tekton-Client | ||
Chaosmesh-Client | ||
volumesnapshot-client | ||
Vulkan-Client | ||
istio-client | ||
Open-Cluster-Management-Client |
Der einfachste Weg, einen Kunden zu erstellen, ist:
KubernetesClient client = new KubernetesClientBuilder (). build ();
DefaultOpenShiftClient
implementiert sowohl die KubernetesClient
als auch OpenShiftClient
-Schnittstelle. Wenn Sie also die OpenShift-Erweiterungen wie Build
s usw. benötigen, gehen Sie einfach wie folgt vor:
OpenShiftClient osClient = new KubernetesClientBuilder (). build (). adapt ( OpenShiftClient . class );
Dabei werden Einstellungen aus verschiedenen Quellen in der folgenden Prioritätsreihenfolge verwendet:
Systemeigenschaften werden gegenüber Umgebungsvariablen bevorzugt. Die folgenden Systemeigenschaften und Umgebungsvariablen können zur Konfiguration verwendet werden:
Eigenschafts-/Umgebungsvariable | Beschreibung | Standardwert |
---|---|---|
kubernetes.disable.autoConfig / KUBERNETES_DISABLE_AUTOCONFIG | Deaktivieren Sie die automatische Konfiguration (KubernetesClient würde nicht in ~/.kube/config , gemounteten ServiceAccounts, Umgebungsvariablen oder Systemeigenschaften nach Kubernetes-Clusterinformationen suchen) | false |
kubernetes.master / KUBERNETES_MASTER | Kubernetes-Master-URL | https://kubernetes.default.svc |
kubernetes.api.version / KUBERNETES_API_VERSION | API-Version | v1 |
openshift.url / OPENSHIFT_URL | OpenShift-Master-URL | Kubernetes-Master-URL-Wert |
kubernetes.oapi.version / KUBERNETES_OAPI_VERSION | OpenShift-API-Version | v1 |
kubernetes.trust.certificates / KUBERNETES_TRUST_CERTIFICATES | Vertrauen Sie allen Zertifikaten | 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 | Clientschlüssel-Verschlüsselungsalgorithmus | 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 | Name der Dienstkonto-Tokendatei | /var/run/secrets/kubernetes.io/serviceaccount/token |
kubernetes.auth.tryKubeConfig / KUBERNETES_AUTH_TRYKUBECONFIG | Konfigurieren Sie den Client mithilfe der Kubernetes-Konfiguration | true |
kubeconfig / KUBECONFIG | Name der zu lesenden Kubernetes-Konfigurationsdatei | ~/.kube/config |
kubernetes.auth.tryServiceAccount / KUBERNETES_AUTH_TRYSERVICEACCOUNT | Konfigurieren Sie den Client über das Dienstkonto | true |
kubernetes.tryNamespacePath / KUBERNETES_TRYNAMESPACEPATH | Konfigurieren Sie den Client-Namespace über den Namespace-Pfad des Kubernetes-Dienstkontos | true |
kubernetes.auth.token / KUBERNETES_AUTH_TOKEN | ||
kubernetes.watch.reconnectInterval / KUBERNETES_WATCH_RECONNECTINTERVAL | Beobachten Sie das Wiederverbindungsintervall in ms | 1000 |
kubernetes.watch.reconnectLimit / KUBERNETES_WATCH_RECONNECTLIMIT | Anzahl der Wiederverbindungsversuche (-1 für unendlich) | -1 |
kubernetes.connection.timeout / KUBERNETES_CONNECTION_TIMEOUT | Verbindungszeitlimit in ms (0 für kein Zeitlimit) | 10000 |
kubernetes.request.timeout / KUBERNETES_REQUEST_TIMEOUT | Timeout in ms lesen | 10000 |
kubernetes.upload.connection.timeout / KUBERNETES_UPLOAD_CONNECTION_TIMEOUT | Zeitüberschreitung der Pod-Upload-Verbindung in ms | 10000 |
kubernetes.upload.request.timeout / KUBERNETES_UPLOAD_REQUEST_TIMEOUT | Zeitüberschreitung der Pod-Upload-Anfrage in ms | 120000 |
kubernetes.request.retry.backoffLimit / KUBERNETES_REQUEST_RETRY_BACKOFFLIMIT | Anzahl der Wiederholungsversuche (-1 für unendlich) | 10 |
kubernetes.request.retry.backoffInterval / KUBERNETES_REQUEST_RETRY_BACKOFFINTERVAL | Wiederholen Sie das anfängliche Backoff-Intervall in ms | 100 |
kubernetes.rolling.timeout / KUBERNETES_ROLLING_TIMEOUT | Rollierendes Timeout in ms | 900000 |
kubernetes.logging.interval / KUBERNETES_LOGGING_INTERVAL | Protokollierungsintervall in ms | 20000 |
kubernetes.scale.timeout / KUBERNETES_SCALE_TIMEOUT | Skalierungs-Timeout in ms | 600000 |
kubernetes.websocket.timeout / KUBERNETES_WEBSOCKET_TIMEOUT | Websocket-Timeout in ms | 5000 |
kubernetes.websocket.ping.interval / KUBERNETES_WEBSOCKET_PING_INTERVAL | Websocket-Ping-Intervall in 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 | HTTP-Headerwert Impersonate-User | |
kubernetes.impersonate.group / KUBERNETES_IMPERSONATE_GROUP | HTTP-Headerwert Impersonate-Group | |
kubernetes.tls.versions / KUBERNETES_TLS_VERSIONS | TLS-Versionen getrennt durch , | 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 | Deaktivieren Sie den BackwardsCompatibilityInterceptor | true |
no.proxy / NO_PROXY | Für eine durch Kommas getrennte Liste von Domänenerweiterungen sollte kein Proxy verwendet werden | |
http.proxy / HTTP_PROXY | URL zum Proxy für HTTP-Anfragen (siehe Proxy-Priorität) | |
https.proxy / HTTPS_PROXY | URL zum Proxy für HTTPS-Anfragen (siehe Proxy-Priorität) |
Alternativ können Sie den ConfigBuilder
verwenden, um ein Konfigurationsobjekt für den Kubernetes-Client zu erstellen:
Config config = new ConfigBuilder (). withMasterUrl ( "https://mymaster.com" ). build ();
KubernetesClient client = new KubernetesClientBuilder (). withConfig ( config ). build ();
Die Nutzung des DSL ist für alle Ressourcen gleich.
Ressourcen auflisten:
NamespaceList myNs = client . namespaces (). list ();
ServiceList myServices = client . services (). list ();
ServiceList myNsServices = client . services (). inNamespace ( "default" ). list ();
Holen Sie sich eine Ressource:
Namespace myns = client . namespaces (). withName ( "myns" ). get ();
Service myservice = client . services (). inNamespace ( "default" ). withName ( "myservice" ). get ();
Löschen:
Namespace myns = client . namespaces (). withName ( "myns" ). delete ();
Service myservice = client . services (). inNamespace ( "default" ). withName ( "myservice" ). delete ();
Zum Bearbeiten von Ressourcen werden die Inline-Builder aus dem Kubernetes-Modell verwendet:
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 ());
Im gleichen Sinne können Sie mithilfe von Inline-Buildern Folgendes erstellen:
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 ());
Sie können auch die apiVersion der Ressource festlegen, wie im Fall von SecurityContextConstraints:
SecurityContextConstraints scc = new SecurityContextConstraintsBuilder ()
. withApiVersion ( "v1" )
. withNewMetadata (). withName ( "scc" ). endMetadata ()
. withAllowPrivilegedContainer ( true )
. withNewRunAsUser ()
. withType ( "RunAsAny" )
. endRunAsUser ()
. build ();
Verwenden Sie io.fabric8.kubernetes.api.model.Event
als T für Watcher:
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 );
}
});
Die Kubernetes-API definiert eine Reihe von Erweiterungen wie daemonSets
, jobs
, ingresses
usw., die alle im extensions()
DSL verwendet werden können:
zB um die Jobs aufzulisten...
jobs = client.batch().jobs().list();
Es gibt Fälle, in denen Sie eine Ressource aus einer externen Quelle lesen möchten, anstatt sie über die DSL des Clients zu definieren. In diesen Fällen ermöglicht Ihnen der Client das Laden der Ressource von:
Sobald die Ressource geladen ist, können Sie sie so behandeln, als hätten Sie sie selbst erstellt.
Lassen Sie uns zum Beispiel einen Pod aus einer YML-Datei lesen und damit arbeiten:
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);
Im gleichen Sinne können Sie ein extern erstelltes Objekt verwenden (entweder eine Referenz oder die Verwendung seiner Zeichenfolgendarstellung).
Zum Beispiel:
Pod pod = someThirdPartyCodeThatCreatesAPod();
client.resource(pod).delete();
Der Client unterstützt steckbare Adapter. Ein Beispieladapter ist der OpenShift-Adapter, der die Anpassung einer vorhandenen KubernetesClient-Instanz an eine OpenShiftClient-Instanz ermöglicht.
Zum Beispiel:
KubernetesClient client = new KubernetesClientBuilder (). build ();
OpenShiftClient oClient = client . adapt ( OpenShiftClient . class );
Der Client unterstützt auch die Methode isAdaptable(), die prüft, ob die Anpassung möglich ist und in diesem Fall „true“ zurückgibt.
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." );
}
Beachten Sie, dass bei Verwendung von adapt() sowohl der Adaptee als auch das Ziel dieselben Ressourcen nutzen (zugrundeliegender HTTP-Client, Thread-Pools usw.). Dies bedeutet, dass close() nicht für jede einzelne über adapt erstellte Instanz verwendet werden muss. Durch den Aufruf von close() für eine der von adapt() verwalteten Instanzen oder für die ursprüngliche Instanz werden alle Ressourcen ordnungsgemäß bereinigt, sodass keine der Instanzen mehr verwendbar ist.
Neben dem Client stellt dieses Projekt auch einen Kubernetes-Mock-Server bereit, den Sie zu Testzwecken verwenden können. Der Mock-Server basiert auf https://github.com/square/okhttp/tree/master/mockwebserver
, wird jedoch durch das DSL und die von https://github.com/fabric8io/mockwebserver
bereitgestellten Funktionen unterstützt.
Der Mock-Webserver verfügt über zwei Betriebsmodi:
Dies ist der typische Modus, in dem Sie zunächst festlegen, welche HTTP-Anfragen erwartet werden und welche Antworten auf jede Anfrage erfolgen sollen. Weitere Details zur Nutzung finden Sie unter: https://github.com/fabric8io/mockwebserver
Dieser Modus wurde häufig zum Testen des Clients selbst verwendet. Stellen Sie sicher, dass Sie den Kubernetes-Test überprüfen.
So fügen Sie Ihrem Test einen Kubernetes-Server hinzu:
@ Rule
public KubernetesServer server = new KubernetesServer ();
Es kann mühsam sein, jede einzelne Anfrage und Antwort zu definieren. Da in den meisten Fällen der Schein-Webserver zur Durchführung einfacher Rohoperationen verwendet wird, wurde ein Rohmodus hinzugefügt. Bei Verwendung des Crud-Modus speichert, liest, aktualisiert und löscht der simulierte Webserver Kubernetes-Ressourcen mithilfe einer In-Memory-Map und erscheint als echter API-Server.
So fügen Sie Ihrem Test einen Kubernetes-Server im Rohmodus hinzu:
@ Rule
public KubernetesServer server = new KubernetesServer ( true , true );
Dann können Sie den Server wie folgt verwenden:
@ 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 ));
}
Sie können den KubernetesClient-Mocking-Mechanismus mit JUnit5 verwenden. Da @Rule
und @ClassRule
nicht unterstützt werden, gibt es eine dedizierte Annotation @EnableKubernetesMockClient
. Wenn Sie für jeden Test eine Instanz des simulierten KubernetesClient
erstellen möchten (JUnit4 @Rule
), müssen Sie die Instanz von KubernetesClient
wie unten gezeigt deklarieren.
@ EnableKubernetesMockClient
class ExampleTest {
KubernetesClient client ;
@ Test
public void testInStandardMode () {
...
}
}
Falls Sie für alle Tests eine statische Instanz eines simulierten Servers definieren möchten (JUnit4 @ClassRule
), müssen Sie die Instanz von KubernetesClient
wie unten gezeigt deklarieren. Sie können crudMode auch aktivieren, indem Sie das Anmerkungsfeld crud
verwenden.
@ EnableKubernetesMockClient ( crud = true )
class ExampleTest {
static KubernetesClient client ;
@ Test
public void testInCrudMode () {
// ...
}
}
Um die echte Kubernetes-API zu testen, bietet das Projekt einen einfachen Ansatz und startet so den Kubernetes-API-Server und die etcd-Binärdateien.
@ EnableKubeAPIServer
class KubeAPITestSample {
static KubernetesClient client ;
@ Test
void testWithClient () {
// test using the client against real K8S API Server
}
}
Einzelheiten finden Sie in der Dokumentation zum Kube-API-Test.
Ab Version 5.5 sollte der Kubernetes-Client mit jeder unterstützten Kubernetes-Clusterversion kompatibel sein. Wir stellen DSL-Methoden (zum Beispiel client.pods()
, client.namespaces()
usw.) für die am häufigsten verwendeten Kubernetes-Ressourcen bereit. Wenn die gesuchte Ressource nicht über DSL verfügbar ist, können Sie jederzeit die generische Methode client.resource()
verwenden, um mit ihr zu interagieren. Sie können auch eine neue Ausgabe öffnen, um das Hinzufügen einer neuen Ressource zum DSL anzufordern.
Wir stellen Kubernetes-Java-Modelltypen (z. B. Pod
) und ihre entsprechenden Builder (z. B. PodBuilder
) für jede Vanilla-Kubernetes-Ressource (und einige Erweiterungen) bereit. Wenn Sie eine bestimmte Ressource nicht finden und der Meinung sind, dass sie Teil des Kubernetes-Clients sein sollte, öffnen Sie bitte ein neues Problem.
Ab v5.5 sollte der OpenShift-Client mit jeder derzeit von Red Hat unterstützten OpenShift-Clusterversion kompatibel sein. Der Fabric8 Kubernetes-Client ist einer der wenigen Kubernetes-Java-Clients, der vollständige Unterstützung für alle unterstützten OpenShift-Clusterversionen bietet. Wenn Sie eine Inkompatibilität feststellen oder etwas fehlt, öffnen Sie bitte eine neue Ausgabe.
Alle hier verwendeten Ressourcenobjekte entsprechen OpenShift 3.9.0 und Kubernetes 1.9.0. Alle Ressourcenobjekte geben alle Felder gemäß OpenShift 3.9.0 und Kubernetes 1.9.0 an
batch
als auch in extensions
enthalten (Erweiterungen sind veraltet).apps
als auch in extensions
enthalten (Erweiterungen sind veraltet).apps
als auch in extensions
(Erweiterungen sind veraltet).apps
als auch in extensions
enthalten (Erweiterungen sind veraltet).network
als auch in extensions
enthalten (Erweiterungen sind veraltet).client base DSL
zu storage
DSL verschobenclient base DSL
und extensions
auf reine extensions
verschobenErweiterungen:
Frameworks/Bibliotheken/Tools:
CI-Plugins:
Build-Tools:
Plattformen:
Proprietäre Plattformen:
Während unsere Community wächst, möchten wir den Überblick über unsere Benutzer behalten. Bitte senden Sie eine PR mit dem Namen Ihrer Organisation/Community.
Es gibt die Links der Github Actions und Jenkins für die Tests, die bei jedem neuen Pull Request laufen. Sie können auch alle aktuellen Builds anzeigen.
Um Updates zu den Veröffentlichungen zu erhalten, können Sie https://groups.google.com/forum/embed/?place=forum/fabric8-devclients beitreten
Diese Tabelle stellt kubectl
zu-Kubernetes-Java-Client-Zuordnungen bereit. Die meisten Zuordnungen sind recht einfach und Einzeiler-Operationen. Bei einigen ist jedoch möglicherweise etwas mehr Code erforderlich, um das gleiche Ergebnis zu erzielen:
kubectl | Fabric8 Kubernetes-Client |
---|---|
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 | DownloadFileFromPod.java |
kubectl cp my-pod:/tmp/foo -c c1 /tmp/bar | DownloadFileFromMultiContainerPod.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 | NamespaceCreateEquivalent.java |
kubectl apply -f test-resource-list.yml | CreateOrReplaceResourceList.java |
kubectl get events | EventsGetEquivalent.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 |