Namespace
Namespace是kubernetes系統中的一種非常重要資源,它的主要作用是用來實現多套環境的資源隔離或者多租戶的資源隔離。
默認情況下,kubernetes集群中的所有的Pod都是可以相互訪問的。但是在實際中,可能不想讓兩個Pod之間進行互相的訪問,那此時就可以將兩個Pod劃分到不同的namespace下。kubernetes通過將集群內部的資源分配到不同的Namespace中,可以形成邏輯上的"組",以方便不同的組的資源進行隔離使用和管理。
可以通過kubernetes的授權機制,將不同的namespace交給不同租戶進行管理,這樣就實現了多租戶的資源隔離。此時還能結合kubernetes的資源配額機制,限定不同租戶能占用的資源,例如CPU使用量、內存使用量等等,來實現租戶可用資源的管理。
kubernetes在集群啟動之后,會默認創建幾個namespace
[root@master ~]# kubectl get namespace NAME STATUS AGE default Active 45h # 所有未指定Namespace的對象都會被分配在default命名 空間 kube-node-lease Active 45h # 集群節點之間的心跳維護,v1.13開始引入 kube-public Active 45h # 此命名空間下的資源可以被所有人訪問(包括未認證用 戶) kube-system Active 45h # 所有由Kubernetes系統創建的資源都處于這個命名空間
ClusterIP的缺陷:只能在集群內部使用。
NodePort:可以外部訪問,但是要加映射的端口。
LoadBalance:負載均衡是云平臺用的比較多的
pod創建時組件之間的交互:把命令,訪問的入口不管是命令行還是web界面,訪問的入口是API server,API server會把他相關信息寫到鍵值對的數據庫,這個數據庫叫做etcd;
Scheduler會有個監控的組件,會時刻關注API Server和etcd,這個Scheduler會根據相關性請求會判斷pod被調度到哪個節點。然后哪些節點符合我們的調度規則,告訴API Server,然后把我們目標調度節點寫入etcd里面,然后etcd會通知這個節點Kubelet讀取。(Kubelet是管理整個pod生命周期的)
標識:應該是當前環境下下拉一個pod,然后會創建一個container runtime容器運行。
!!!k8s不是容器,他是容器的一種編排工具
我們先把他刪了吧,前面只是為了演示文件效果,我們起前面一樣名字的話不太好‘
創建并運行
kubernetes沒有提供單獨運行Pod的命令,都是通過Pod控制器來實現的
# 命令格式: kubectl run (pod控制器名稱) [參數] # --image 指定Pod的鏡像 # --port 指定端口 # --namespace 指定namespace [root@master ~]# kubectl run nginx --image=nginx:1.17.1 --port=80 --namespace dev
我們先刪掉了dev的命名空間
然后我們把這個外面的控制器也刪了
把這個默認的也刪掉
然后就沒有這個pod了
我們先生成一個名稱空間
然后我們來運行
然后就創建好了
我們可以看詳細信息
這個只能在集群內部訪問這個,在集群內部任何一個節點都可以去訪問
注意,這就沒有了(版本的問題)
這是因為當前Pod是由Pod控制器創建的,控制器會監控Pod狀況,一旦發現Pod死亡,會立即重建
此時要想刪除Pod,必須刪除Pod控制器
這就徹底沒有了
Label
命令方式
# 為pod資源打標簽 [root@master ~]# kubectl label pod nginx-pod version=1.0 -n dev pod/nginx-pod labeled # 為pod資源更新標簽 [root@master ~]# kubectl label pod nginx-pod version=2.0 -n dev --overwrite pod/nginx-pod labeled # 查看標簽 [root@master ~]# kubectl get pod nginx-pod -n dev --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx-pod 1/1 Running 0 10m version=2.0 # 篩選標簽 [root@master ~]# kubectl get pod -n dev -l version=2.0 --show-labels NAME READY STATUS RESTARTS AGE LABELS nginx-pod 1/1 Running 0 17m version=2.0 [root@master ~]# kubectl get pod -n dev -l version!=2.0 --show-labels No resources found in dev namespace. #刪除標簽 [root@master ~]# kubectl label pod nginx-pod version- -n dev pod/nginx-pod labeled
我們又設置一個成了
更新標簽
Deployment
是控制器,是最小控制單元
我們先刪掉