# ⚡ Mẹo kubectl tốc độ và imperative command

> This lesson is part of the paid section. Sign in and purchase the course to view the full content.

Hồi mình thi, câu hỏi đầu tiên mình mất gần 9 phút chỉ vì ngồi viết YAML Deployment từ đầu: sai indent, thiếu `selector`, phải `apply` lại ba lần. Sang câu thứ hai mình đổi cách: luôn để kubectl sinh YAML hộ bằng một lệnh imperative, rồi chỉ sửa đúng phần mà đề yêu cầu. Bài này dạy bạn đúng vòng lặp đó, kèm 7 bài tập có lời giải để bạn tập tay ngay.

## Mục tiêu bài học

- Sinh YAML cho hầu hết resource bằng một dòng `kubectl create`, `kubectl run` hoặc `kubectl expose`.
- Sửa resource đang chạy bằng `set`, `scale`, `patch`, `edit`, `replace --force` thay vì gõ lại YAML.
- Nhận diện resource không có generator để không mất thời gian mò trong phòng thi.
- Hoàn thành 7 bài tập dạng đề thi trong khoảng 20 phút.

## Ôn nhanh

Bài trước bạn đã chốt 6 dòng mang vào phòng thi, trong đó có alias `k` và hai biến `$do`, `$now`. Bài này dùng chúng liên tục, nên nếu shell mới mở thì set lại ngay:

```bash
alias k=kubectl
export do="--dry-run=client -o yaml"
export now="--force --grace-period=0"
```

Nhắc lại một ý quan trọng: `$do` là `--dry-run=client -o yaml`, nó in YAML ra stdout mà **không** tạo resource. Đây là công cụ chính của cả bài.

## Ví dụ mẫu từng bước

Đề bài mẫu: trong namespace `team-a`, tạo Deployment tên `web` dùng image `nginx:1.25`, 3 replicas, containerPort 80. Sau đó tạo Service `web-svc` type NodePort, port 80, targetPort 80, nodePort 30080.

```bash
# Bước 1: vào đúng namespace, tránh tạo nhầm ở default
k config set-context --current --namespace=team-a

# Bước 2: sinh YAML, đổ ra file
k create deployment web --image=nginx:1.25 --replicas=3 $do > web.yaml

# Bước 3: mở file, chỉ thêm phần đề còn thiếu (containerPort)
vi web.yaml
```

Phần bạn cần thêm vào `web.yaml` (generator không tự sinh `ports`):

```yaml
    spec:
      containers:
      - image: nginx:1.25
        name: web
        ports:
        - containerPort: 80
```
