一、kubectl 命令參數自動補全
使用 Kubernetes,就一定會使用 Kubectl 命令,默認安裝好 Kubectl 命令不支持自動補全參數。下面配置 Kubectl 命令參數自動補全方法:
Linux 上,比如 Centos
$ yum install -y bash-completion
$ source /usr/share/bash-completion/bash_completion
$ source <(kubectl completion bash)
$ echo "source <(kubectl completion bash)" >> ~/.bashrc
MAC 上
$ brew install bash-completion
$ source $(brew --prefix)/etc/bash_completion
$ source <(kubectl completion zsh)
$ echo 'source <(kubectl completion zsh)' >> ~/.zshrc
Kubectl 常用操作 [1]
1、如何查找非 running 狀態的 Pod 呢?
$ kubectl get pods -A --field-selector=status.phase!=Running | grep -v Complete
2、如何查找 running 狀態的 Pod 呢?
$ kubectl get pods -A --field-selector=status.phase=Running | grep -v Complete
3、獲取節點列表,其中包含運行在每個節點上的 Pod 數量?
$ kubectl get po -o json --all-namespaces | jq '.items | group_by(.spec.nodeName) | map({"nodeName": .[0].spec.nodeName, "count": length}) | sort_by(.count)'
[
{
"nodeName": "service1",
"count": 6
},
{
"nodeName": "service3",
"count": 13
}
]
4、使用 kubectl top 獲取 Pod 列表並根據其消耗的 CPU 或 內存進行排序
# 獲取 cpu
$ kubectl top pods -A | sort --reverse --key 3 --numeric
# 獲取 memory
$ kubectl top pods -A | sort --reverse --key 4 --numeric
二、添加Namespace默認CPU和內存限制
有時候 Pod 沒有做資源限制,會因爲個別 Pod 使用量超出,影響整個宿主機應用。下面給出一個具體例子,可以根據實際情況來調整相關參數。
apiVersion: "v1"
kind: "LimitRange"
metadata:
name: "resource-limits"
namespace: default
spec:
limits:
- type: "Pod"
max:
cpu: "4"
memory: "4Gi"
min:
cpu: "100m"
memory: "100Mi"
- type: "Container"
max:
cpu: "4"
memory: "4Gi"
min:
cpu: "100m"
memory: "100Mi"
default:
cpu: "500m"
memory: "500Mi"
defaultRequest:
cpu: "100m"
memory: "100Mi"
maxLimitRequestRatio:
cpu: "60"
三、利用 Kubelet 給 Node 預留資源
evictionHard:
imagefs.available: 15%
memory.available: 1G
nodefs.available: 10%
nodefs.inodesFree: 5%
四、利用 Kubernetes RBAC 劃分好權限
多個團隊部署應用到一個kubernetes集羣時,情況就可能變得很複雜。切記不要把管理員權限開放給每個人。個人建議是,根據命名空間來區分隔離每個團隊,然後使用RBAC策略只允許各自團隊訪問各自的命名空間。
如果我們把管理員權限開放給每個人,那麼在pod級上進行讀取、創建和刪除訪問時,可能讓人抓狂,因爲誤操作的情況會經常發生。爲此,應該只允許管理員有權訪問,從而將管理集羣和部署集羣的人員權限區分開。
五、充分利用 PodDisruptionBudget 控制器
如何保證在 kubernetes 集羣中的應用程序總能正常運行?
答案:是使用 PodDisruptionBudget
控制器。
在進行 kubectl drain
操作時,kubernetes 會根據 PodDisruptionBudget
控制器判斷應用Pod集羣數量,進而保證在業務不中斷或業務SLA不降級的情況下進行應用Pod銷燬。PDB(PodDisruptionBudget)應該放在每個擁有一個以上實例的deployment上。我們可以使用簡單yaml爲集羣創建PDB,並使用標籤選擇器確定PDB應該作用在哪些帶有標籤的資源上。
注意
:PDB只考慮主動中斷
,硬件故障
之類的情況不在PDB考慮範圍內。
例子:
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: zk-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: zookeeper
六、使用探針來檢測應用的狀態
Kubernetes 支持配置探針。kubelet 使用探針來確定Pod中應用程序是否健康。K8S 提供了兩種類型來實現這一功能,Readiness
探針和 Liveiness
探針。
-
Readiness
:探針用於確定容器何時準備好接收流量。 -
Liveiness
:探針用於確定容器是否健康,如果不健康根據策略判斷是否重新部署一個新的容器來替換。
例子:
readinessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
參考鏈接
-
[1] https://mp.weixin.qq.com/s/fJpSlVOywrgIhejsWSvhbw -
[2] https://zhuanlan.zhihu.com/p/81666500
熱門文章推薦
-
Kubernetes MiTM 漏洞,影響所有Kubernetes版本 -
Kubernetes 1.20版本開始不推薦使用Docker,你知道嗎? -
Kind:一個容器創建K8S開發集羣 -
IT運維面試問題總結-簡述Etcd、Kubernetes、Lvs、HAProxy等 -
聊聊 resolv.conf 中 search 和 ndots 配置 -
Docker 網絡配置那些事
最後
-
後臺回覆 【 列表】,可獲取本公衆號所有文章列表 -
歡迎您加我微信【 ypxiaozhan01 】,拉您進技術羣,一起交流學習
-
歡迎您關注【 YP小站 】,學習互聯網最流行的技術,做個專業的技術人
本文分享自微信公衆號 - YP小站(ypxiaozhan)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。