---
# System prepended metadata

title: Kubernetes K8s
tags: [Kubernetes, DevOps]

---

# Kubernetes K8s

## 基本操作指令

```shell=
# 查看 k8s 資源物件類型
kubectl api-resources

# 從 yaml 建立 deployment
kubectl apply -f <name>.yaml

# 編輯已部屬的ymal
kubectl edit deployment <name_space>

kubectl run nginx --image=nginx 
  --dry-run 不運行
  -o yml 印出 yaml 檔
  --restart=Never 重啟方式
  --limits=cpu=200m,memory=200Mi 限制最大值
  --requests=cpu=100m,memory=100Mi 限制最小值
  
kubectl get pods
  -o wide 列出更多資訊
  -A 全部的 pods
  -w watch 狀態
  
# 強制刪除 deployment
kubectl delete deployment --grace-period=0 --force nginx

# 查詢 config contexts
kubectl config get-contexts

# 設定預設的 namespace
kubectl config set-context kubernetes-admin@kubernetes --namespace=delvelopment

# 切換 deployment 內的 image 不同的版本
kubectl set image deployment nginx-web nginx-web=nginx:1.20 --record
```

## 注意事項

### Limit 限制

:::success
CPU 可以設定 1.5倍 server
Memory 不可以超過 1:1 不然 pod 會被砍掉
考慮重點
必須在限制的時候考遇到所有的 node 都掛掉之後只剩一個 node 的時候是否能撐得住
所有 pod 的資源消耗
:::

### Persistent Volume Claim

:::info
**層級**
:::

Persistent Volume Claim(PVC) -- namespace

Persistent Volume (PV) -- Cluster

### Jobs執行成功後自動刪除

啟用kube-controller-manager與kube-apiserver上的feature-gates
編輯檔案

/etc/kubernetes/manifests/kube-controller-manager.yaml

```shell=
# 加入feature-gates
–feature-gates=TTLAfterFinished=true
```

/etc/kubernetes/manifests/kube-apiserver.yaml

```shell=
# 建立jobs，指定ttlSecondsAfterFinished，時間單位為秒數
apiVersion: batch/v1
kind: Job
metadata:
 creationTimestamp: null
 name: my-job
spec:
 ttlSecondsAfterFinished: 10
 template:
 metadata:
  creationTimestamp: null
 spec:
  containers:
  - command:
   - echo
   - Hello my job
   image: busybox
   name: my-job
   resources: {}
  restartPolicy: Never
status: {}
```

###### tags: `DevOps` `Kubernetes`
