299 lines
6.7 KiB
Markdown
Executable File
299 lines
6.7 KiB
Markdown
Executable File
# Kubernetes Command Reference
|
||
|
||
This guide provides a concise reference for common `kubectl` commands used to manage Kubernetes clusters. Whether you’re managing nodes, namespaces, pods, deployments, or autoscaling, the examples below will help you perform everyday tasks with confidence.
|
||
|
||
---
|
||
|
||
## Table of Contents
|
||
|
||
- [Kubernetes Command Reference](#kubernetes-command-reference)
|
||
- [Table of Contents](#table-of-contents)
|
||
- [General Commands](#general-commands)
|
||
- [Node Management](#node-management)
|
||
- [Listing Nodes](#listing-nodes)
|
||
- [Labeling Nodes](#labeling-nodes)
|
||
- [Node Maintenance (Cordon/Drain)](#node-maintenance-cordondrain)
|
||
- [Namespace Management](#namespace-management)
|
||
- [Pod Management](#pod-management)
|
||
- [Listing Pods](#listing-pods)
|
||
- [Running a Pod](#running-a-pod)
|
||
- [Deleting a Pod](#deleting-a-pod)
|
||
- [API Resources \& Documentation](#api-resources--documentation)
|
||
- [Logs \& Pod Information](#logs--pod-information)
|
||
- [Applying YAML Files](#applying-yaml-files)
|
||
- [Viewing Cluster Resources](#viewing-cluster-resources)
|
||
- [ReplicaSet \& Deployment Management](#replicaset--deployment-management)
|
||
- [Scaling and Rollouts](#scaling-and-rollouts)
|
||
- [Autoscaling](#autoscaling)
|
||
- [Port Forwarding](#port-forwarding)
|
||
- [Additional Information](#additional-information)
|
||
|
||
---
|
||
|
||
## General Commands
|
||
|
||
- **List API Resources**
|
||
Display all available API resources along with their short names:
|
||
|
||
```bash
|
||
kubectl api-resources
|
||
```
|
||
|
||
---
|
||
|
||
## Node Management
|
||
|
||
### Listing Nodes
|
||
|
||
- **Show All Nodes**
|
||
|
||
```bash
|
||
kubectl get nodes
|
||
```
|
||
|
||
### Labeling Nodes
|
||
|
||
- **Set a Custom Label on a Node**
|
||
|
||
```bash
|
||
kubectl label node <node-name> kubernetes.io/<label-key>=<label-value>
|
||
```
|
||
|
||
> **Note:** Replace `<node-name>`, `<label-key>`, and `<label-value>` with your desired values.
|
||
|
||
### Node Maintenance (Cordon/Drain)
|
||
|
||
- **Cordon a Node**
|
||
Prevent new pods from being scheduled on the node.
|
||
|
||
```bash
|
||
kubectl cordon <node-name>
|
||
```
|
||
|
||
- **Uncordon a Node**
|
||
Mark the node as schedulable again.
|
||
|
||
```bash
|
||
kubectl uncordon <node-name>
|
||
```
|
||
|
||
- **Drain a Node**
|
||
Evict all pods from the node (excluding those managed by DaemonSets).
|
||
|
||
```bash
|
||
kubectl drain <node-name> --ignore-daemonsets --delete-local-data
|
||
```
|
||
|
||
> **Warning:** Draining a node will evict running pods. Ensure that you plan this action to avoid service disruption.
|
||
|
||
---
|
||
|
||
## Namespace Management
|
||
|
||
- **List All Namespaces**
|
||
|
||
```bash
|
||
kubectl get namespaces
|
||
# Or the shorthand:
|
||
kubectl get ns
|
||
```
|
||
|
||
- **Create a New Namespace**
|
||
|
||
```bash
|
||
kubectl create namespace <namespace-name>
|
||
```
|
||
|
||
---
|
||
|
||
## Pod Management
|
||
|
||
### Listing Pods
|
||
|
||
- **List Pods in the Default Namespace**
|
||
|
||
```bash
|
||
kubectl get pods
|
||
```
|
||
|
||
- **List Pods with Detailed Information (Wide Output)**
|
||
|
||
```bash
|
||
kubectl get pods -o wide
|
||
```
|
||
|
||
- **List Pods in a Specific Namespace**
|
||
|
||
```bash
|
||
kubectl get pods -o wide -n <namespace-name>
|
||
```
|
||
|
||
### Running a Pod
|
||
|
||
> **Note:** The `kubectl run` command is best suited for running single pods. For more complex deployments, consider using YAML manifests.
|
||
|
||
- **Basic Example:**
|
||
|
||
```bash
|
||
kubectl run <pod-name> --image=<image-name> --port=<port-number> -n <namespace-name>
|
||
```
|
||
|
||
- **Advanced Example with Multiple Options:**
|
||
|
||
```bash
|
||
kubectl run mypod --image=nginx --port=80 -n mynamespace \
|
||
--env="ENV_VAR_NAME=VALUE" --command -- nginx -g "daemon off;" \
|
||
--restart=Always --dry-run=client \
|
||
--labels="app=myapp,env=prod" \
|
||
--limits=cpu=100m,memory=256Mi --requests=cpu=50m,memory=128Mi
|
||
```
|
||
|
||
**Common Options Explained:**
|
||
|
||
- `--image`: Container image to use.
|
||
- `--port`: Port exposed by the container.
|
||
- `-n` or `--namespace`: Namespace in which to run the pod.
|
||
- `--env`: Set environment variables.
|
||
- `--command`: Treat the following arguments as the command to run.
|
||
- `--restart`: Pod restart policy (`Always`, `OnFailure`, or `Never`).
|
||
- `--labels`: Assign labels to the pod.
|
||
- `--dry-run`: Validate the command without creating the pod.
|
||
- `--limits` and `--requests`: Define resource limits and requests for the container.
|
||
|
||
### Deleting a Pod
|
||
|
||
- **Delete a Pod in a Specific Namespace**
|
||
|
||
```bash
|
||
kubectl delete pod <pod-name> -n <namespace-name>
|
||
```
|
||
|
||
---
|
||
|
||
## API Resources & Documentation
|
||
|
||
- **Get Detailed Documentation for an API Resource**
|
||
|
||
```bash
|
||
kubectl explain <api-resource-name>
|
||
```
|
||
|
||
*Example:*
|
||
|
||
```bash
|
||
kubectl explain pod
|
||
```
|
||
|
||
---
|
||
|
||
## Logs & Pod Information
|
||
|
||
- **Stream Logs for a Running Pod**
|
||
|
||
```bash
|
||
kubectl logs -f -n <namespace-name> <pod-name>
|
||
```
|
||
|
||
- **Get Detailed Information About a Pod**
|
||
|
||
```bash
|
||
kubectl describe pod <pod-name> -n <namespace-name>
|
||
```
|
||
|
||
---
|
||
|
||
## Applying YAML Files
|
||
|
||
- **Apply a Configuration from a YAML File**
|
||
|
||
Apply a YAML configuration to a specific namespace:
|
||
|
||
```bash
|
||
kubectl apply -f <yaml-file> -n <namespace-name>
|
||
```
|
||
|
||
---
|
||
|
||
## Viewing Cluster Resources
|
||
|
||
- **Display All Resources in a Namespace**
|
||
|
||
```bash
|
||
kubectl get all -n <namespace-name>
|
||
```
|
||
|
||
- **Display ReplicaSets, Pods, and Deployments in a Specific Namespace**
|
||
|
||
```bash
|
||
kubectl get rs,pods,deployments -n <namespace-name>
|
||
```
|
||
|
||
---
|
||
|
||
## ReplicaSet & Deployment Management
|
||
|
||
### Scaling and Rollouts
|
||
|
||
- **Scale a ReplicaSet**
|
||
|
||
```bash
|
||
kubectl scale rs <replicaset-name> --replicas=<count> -n <namespace-name>
|
||
```
|
||
|
||
- **View Rollout History of a Deployment**
|
||
|
||
```bash
|
||
kubectl rollout history deployment <deployment-name> -n <namespace-name>
|
||
```
|
||
|
||
- **View Details of a Specific Revision**
|
||
|
||
```bash
|
||
kubectl rollout history deployment <deployment-name> -n <namespace-name> --revision=<number>
|
||
```
|
||
|
||
- **Roll Back a Deployment to a Specific Revision**
|
||
|
||
```bash
|
||
kubectl rollout undo deployment <deployment-name> -n <namespace-name> --to-revision=<number>
|
||
```
|
||
|
||
### Autoscaling
|
||
|
||
- **Autoscale a Deployment**
|
||
Automatically scale a deployment based on CPU utilization:
|
||
|
||
```bash
|
||
kubectl autoscale deployment <deployment-name> -n <namespace-name> --cpu-percent=<target-cpu-percentage> --min=<min-pods> --max=<max-pods>
|
||
```
|
||
|
||
- **View Horizontal Pod Autoscalers (HPA)**
|
||
|
||
```bash
|
||
kubectl get hpa -n <namespace-name>
|
||
```
|
||
|
||
---
|
||
|
||
## Port Forwarding
|
||
|
||
Sometimes you need to access a service or pod directly from your local machine. Use the following command to forward a port:
|
||
|
||
```bash
|
||
kubectl port-forward -n <namespace-name> svc/<service-name> <local-port>:<target-port>
|
||
```
|
||
|
||
> **Example:** Forward local port 8080 to port 80 of the service named `my-service` in the `mynamespace` namespace:
|
||
>
|
||
> ```bash
|
||
> kubectl port-forward -n mynamespace svc/my-service 8080:80
|
||
> ```
|
||
|
||
---
|
||
|
||
## Additional Information
|
||
|
||
- **Static Manifest Files**
|
||
Any YAML files placed in `/etc/kubernetes/manifests/` are automatically loaded when the kubelet starts (for example, after a server reboot).
|
||
|