From 3470091f146efdd11794b39c00c2ab6e5aada4fd Mon Sep 17 00:00:00 2001 From: LearnwithShiv <116908363+LearnwithShiv@users.noreply.github.com> Date: Sat, 26 Nov 2022 11:02:08 +0530 Subject: [PATCH] Create K8s Commands --- Kubernetes/K8s Commands | 309 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 309 insertions(+) create mode 100644 Kubernetes/K8s Commands diff --git a/Kubernetes/K8s Commands b/Kubernetes/K8s Commands new file mode 100644 index 0000000..202f987 --- /dev/null +++ b/Kubernetes/K8s Commands @@ -0,0 +1,309 @@ +source <(kubectl completion bash) # set up autocomplete in bash into the current shell, bash-completion package should be installed first. +echo "source <(kubectl completion bash)" >> ~/.bashrc # add autocomplete permanently to your bash shell. + +kubectl config view # Show Merged kubeconfig settings. + +# use multiple kubeconfig files at the same time and view merged config +KUBECONFIG=~/.kube/config:~/.kube/kubconfig2 + +-------------------------kubectl config view--------------------------------------------------- + +# get the password for the e2e user +kubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}' + +kubectl config view -o jsonpath='{.users[].name}' # display the first user +kubectl config view -o jsonpath='{.users[*].name}' # get a list of users +kubectl config get-contexts # display list of contexts +kubectl config current-context # display the current-context +kubectl config use-context my-cluster-name # set the default context to my-cluster-name + +kubectl config set-cluster my-cluster-name # set a cluster entry in the kubeconfig + +# configure the URL to a proxy server to use for requests made by this client in the kubeconfig +kubectl config set-cluster my-cluster-name --proxy-url=my-proxy-url + +# add a new user to your kubeconf that supports basic auth +kubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword + +# permanently save the namespace for all subsequent kubectl commands in that context. +kubectl config set-context --current --namespace=ggckad-s2 + +# set a context utilizing a specific username and namespace. +kubectl config set-context gce --user=cluster-admin --namespace=foo \ + && kubectl config use-context gce + +kubectl config unset users.foo # delete user foo + +# short alias to set/show context/namespace (only works for bash and bash-compatible shells, current context to be set before using kn to set namespace) +alias kx='f() { [ "$1" ] && kubectl config use-context $1 || kubectl config current-context ; } ; f' +alias kn='f() { [ "$1" ] && kubectl config set-context --current --namespace $1 || kubectl config view --minify | grep namespace | cut -d" " -f6 ; } ; f' + +-----------------------------------Creating objects------------------------------------ +kubectl apply -f ./my-manifest.yaml # create resource(s) +kubectl apply -f ./my1.yaml -f ./my2.yaml # create from multiple files +kubectl apply -f ./dir # create resource(s) in all manifest files in dir +kubectl apply -f https://git.io/vPieo # create resource(s) from url +kubectl create deployment nginx --image=nginx # start a single instance of nginx + +# create a Job which prints "Hello World" +kubectl create job hello --image=busybox:1.28 -- echo "Hello World" + +# create a CronJob that prints "Hello World" every minute +kubectl create cronjob hello --image=busybox:1.28 --schedule="*/1 * * * *" -- echo "Hello World" + +kubectl explain pods # get the documentation for pod manifests + +# Create multiple YAML objects from stdin +cat < pod.yaml + # Generate spec for running pod nginx and write it into a file called pod.yaml +kubectl attach my-pod -i # Attach to Running Container +kubectl port-forward my-pod 5000:6000 # Listen on port 5000 on the local machine and forward to port 6000 on my-pod +kubectl exec my-pod -- ls / # Run command in existing pod (1 container case) +kubectl exec --stdin --tty my-pod -- /bin/sh # Interactive shell access to a running pod (1 container case) +kubectl exec my-pod -c my-container -- ls / # Run command in existing pod (multi-container case) +kubectl top pod POD_NAME --containers # Show metrics for a given pod and its containers +kubectl top pod POD_NAME --sort-by=cpu # Show metrics for a given pod and sort it by 'cpu' or 'memory' + + +------------------------------Copying files and directories to and from containers--------------------- +kubectl cp /tmp/foo_dir my-pod:/tmp/bar_dir # Copy /tmp/foo_dir local directory to /tmp/bar_dir in a remote pod in the current namespace +kubectl cp /tmp/foo my-pod:/tmp/bar -c my-container # Copy /tmp/foo local file to /tmp/bar in a remote pod in a specific container +kubectl cp /tmp/foo my-namespace/my-pod:/tmp/bar # Copy /tmp/foo local file to /tmp/bar in a remote pod in namespace my-namespace +kubectl cp my-namespace/my-pod:/tmp/foo /tmp/bar # Copy /tmp/foo from a remote pod to /tmp/bar locally + +-----------------------------Interacting with Deployments and Services---------------------------------- +kubectl logs deploy/my-deployment # dump Pod logs for a Deployment (single-container case) +kubectl logs deploy/my-deployment -c my-container # dump Pod logs for a Deployment (multi-container case) + +kubectl port-forward svc/my-service 5000 # listen on local port 5000 and forward to port 5000 on Service backend +kubectl port-forward svc/my-service 5000:my-service-port # listen on local port 5000 and forward to Service target port with name + +kubectl port-forward deploy/my-deployment 5000:6000 # listen on local port 5000 and forward to port 6000 on a Pod created by +kubectl exec deploy/my-deployment -- ls # run command in first Pod and first container in Deployment (single- or multi-container cases) + +--------------------------------Interacting with Nodes and cluster----------------------------------------- +kubectl cordon my-node # Mark my-node as unschedulable +kubectl drain my-node # Drain my-node in preparation for maintenance +kubectl uncordon my-node # Mark my-node as schedulable +kubectl top node my-node # Show metrics for a given node +kubectl cluster-info # Display addresses of the master and services +kubectl cluster-info dump # Dump current cluster state to stdout +kubectl cluster-info dump --output-directory=/path/to/cluster-state # Dump current cluster state to /path/to/cluster-state + +# View existing taints on which exist on current nodes. +kubectl get nodes -o='custom-columns=NodeName:.metadata.name,TaintKey:.spec.taints[*].key,TaintValue:.spec.taints[*].value,TaintEffect:.spec.taints[*].effect' + +# If a taint with that key and effect already exists, its value is replaced as specified. +kubectl taint nodes foo dedicated=special-user:NoSchedule + +---------------------------------Resource types +List all supported resource types along with their shortnames, API group, whether they are namespaced, and Kind: + +kubectl api-resources +Other operations for exploring API resources: + +kubectl api-resources --namespaced=true # All namespaced resources +kubectl api-resources --namespaced=false # All non-namespaced resources +kubectl api-resources -o name # All resources with simple output (only the resource name) +kubectl api-resources -o wide # All resources with expanded (aka "wide") output +kubectl api-resources --verbs=list,get # All resources that support the "list" and "get" request verbs +kubectl api-resources --api-group=extensions # All resources in the "extensions" API group