一、Namespace
顧名思義,Namespace是命名空間的意思,在 Kubernetes 中,“命名空間(Namespace)” 提供一種機制,將同一集群中的資源劃分為相互隔離的組。 同一命名空間內(nèi)的資源名稱要唯一,但跨命名空間時沒有這個要求。 命名空間作用域僅針對帶有命名空間的對象,例如 Deployment、Service、Pod 等, 這種作用域?qū)涸L問的對象不適用,例如 StorageClass、Node、PersistentVolume 等。
1、查看Namespace
# 使用以下命令可以列出集群中所有現(xiàn)存的命名空間
kubectl get namespace
Kubernetes 會創(chuàng)建四個初始命名空間:
-
default:
?沒有指明使用其它命名空間的對象所使用的默認(rèn)命名空間 -
kube-system:
?Kubernetes 系統(tǒng)創(chuàng)建對象所使用的命名空間 -
kube-public:
?這個命名空間是自動創(chuàng)建的,所有用戶(包括未經(jīng)過身份驗證的用戶)都可以讀取它。 這個命名空間主要用于集群使用,以防某些資源在整個集群中應(yīng)該是可見和可讀的。 這個命名空間的公共方面只是一種約定,而不是要求。 -
kube-node-lease:
?此命名空間用于與各個節(jié)點相關(guān)的?租約(Lease)對象。 節(jié)點租期允許 kubelet 發(fā)送心跳,由此控制面能夠檢測到節(jié)點故障。
2、基本使用語法
# 創(chuàng)建命名空間 ns等價于namespace
kubectl create ns pangtaiyi
# 刪除命名空間
kubectl delete ns pangtaiyi
# 更改默認(rèn)命名空間名稱(系統(tǒng)默認(rèn)是default命名空間)
# 我們可以改成其他的命名空間
kubectl config set-context $(kubectl config current-context) --namespace=<新的命名空間>
3、使用請求參數(shù)
啟動pod,指定pod 的命名空間,可以使用?--namespace
?參數(shù), 例如:
# 解釋:在PangTaiYi命名空間下,運行一個Pod,Pod運行的鏡像是Nginx
kubectl run nginx --image=nginx --namespace=PangTaiYi
# 解釋:查詢在PangTaiYi命名空間下,所有的Pod
kubectl get pods --namespace=PangTaiYi
# 也可以使用簡寫方式, --namespace = -n, 例如:
kubectl get pods -n=PangTaiYi
# 或者
kubectl get pods -n PangTaiYi
二、Pod
Pod?是可以在 Kubernetes 中創(chuàng)建和管理的、最小的可部署的計算單元。Pod?是一組(一個或多個)容器; 這些容器共享存儲、網(wǎng)絡(luò)、以及怎樣運行這些容器的聲明。 Pod 所建模的是特定于應(yīng)用的“邏輯主機”,其中包含一個或多個應(yīng)用容器, 這些容器是相對緊密的耦合在一起的。 在非云環(huán)境中,在相同的物理機或虛擬機上運行的應(yīng)用類似于在同一邏輯主機上運行的云應(yīng)用。除了應(yīng)用容器,Pod 還可以包含在 Pod 啟動期間運行的?Init 容器。 你也可以在集群中支持臨時性容器?的情況下,為調(diào)試的目的注入臨時性容器。(注:通常工作中不需要直接創(chuàng)建 Pod,甚至單個實例的 Pod。因為會使用如 Deployment?或?Job?這類工作負(fù)載資源來創(chuàng)建 Pod。)
1、獲取Pod
# 1、獲取Pod,默認(rèn)獲取default命名空間下的Pod
kubectl get pod
# 2、獲取所有命名空間下的Pod(-A 區(qū)分大小寫)
kubectl get pod -A
# 3、獲取Pod的更加詳細(xì)的信息,如下:
[root@master ~]# kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-dep-5b7868d854-6f9mz 1/1 Running 1 27h 10.244.1.8 node1 <none> <none>
my-dep-5b7868d854-dklnq 1/1 Running 1 27h 10.244.1.7 node1 <none> <none>
my-dep-5b7868d854-j5whk 1/1 Running 1 27h 10.244.1.10 node1 <none> <none>
my-dep-5b7868d854-lx8nh 1/1 Running 1 23h 10.244.2.13 node2 <none> <none>
my-dep-5b7868d854-n2gmq 1/1 Running 1 23h 10.244.2.11 node2 <none> <none>
my-dep-5b7868d854-nd6bl 1/1 Running 1 27h 10.244.1.9 node1 <none> <none>
my-dep-5b7868d854-p7nv8 1/1 Running 1 23h 10.244.2.12 node2 <none> <none>
my-dep-5b7868d854-qz658 1/1 Running 1 23h 10.244.2.10 node2 <none> <none>
my-dep-5b7868d854-sq65d 1/1 Running 1 23h 10.244.2.8 node2 <none> <none>
my-dep-5b7868d854-zbbwf 1/1 Running 1 27h 10.244.1.11 node1 <none> <none>
2、 操作Pod
# 1、創(chuàng)建Pod,運行一個nginx容器
kubectl run mynginx --image=nginx
# 2、刪除Pod
kubectl delete mynginx
# 3、也可以通過yaml 文件來創(chuàng)建pod
kubectl apply -f <yaml文件地址>
3、查看Pod 的信息
# 1、獲得Pod 的描述信息
kubectl describe pod <pod名稱>
# 2、如果是其他命名空間下的pod,需要帶上相應(yīng)的命名空間
kubectl describe pod <pod名稱> -n <命名空間名稱>
# 3、當(dāng)Pod 運行失敗,可以查看pod的日志來查看運行日志
kubectl logs <Pod名稱>
# 4、進(jìn)入pod 的內(nèi)部
kubectl exec -it mynginx -- /bin/bash
看到這里, 有Docker 基礎(chǔ)的同學(xué)都發(fā)現(xiàn)了, 其實k8s 對于pod 的操作很像是 Docker 對于容器,鏡像的操作。幾乎沒什么區(qū)別。由于 Pod 自身不具有自愈能力, 所以在工作中很少直接操作Pod ,所以這里就不過多介紹了。
三、Deployment
Deployment 為 Pod 和 ReplicaSet 提供聲明式的更新能力。由用戶描述 Deployment 中的?目標(biāo)狀態(tài),而 Deployment?控制器(Controller)?以受控速率更改實際狀態(tài), 使其變?yōu)?span style="color:#fe2c24;">期望狀態(tài)。你可以定義 Deployment 以創(chuàng)建新的 ReplicaSet,或刪除現(xiàn)有 Deployment, 并通過新的 Deployment 收養(yǎng)其資源。(說簡單點就是, Deployment可以控制Pod,使Pod擁有多副本,自愈,擴(kuò)縮容等能力)
1、自愈、故障轉(zhuǎn)移
下面就使用基本的創(chuàng)建Pod的方式和Deployment 的方式創(chuàng)建Pod,來測試一下什么叫自愈能力。
# 前置環(huán)境:
# 運行一個Pod 和 一個Deploymnet
kubectl run mynginx --image=nginx
kubectl create deployment mynginx-deployment --image=nginx
可以看到, 兩個pod 分別運行在Node1 和Node2 節(jié)點,下面就來進(jìn)行測試。
1.1、誤刪除
同時刪除兩個pod,看會有什么效果,(注意:使用Deployment 方式創(chuàng)建pod所生成的名稱 mynginx-deployment-679dd69446-h59xs)?????
?可以看到, 同時刪除兩個pod , 普通方式刪除之后就沒了, Deployment 刪除了pod 之后, 有重新拉起一個新的Pod。
1.2、宕機
如上圖所示, 在node2 節(jié)點運行了兩個Pod, 現(xiàn)在測試將node2節(jié)點宕機, 會有什么效果。
可以看到, Deployment方式創(chuàng)建的Pod, 在Node2節(jié)點宕機之后 ,又在Node1節(jié)點上拉起了一個新的Pod。所以就如我之前說的,在工作中使用Deployment方式比較多。
2、多副本
實際上多副本就是在創(chuàng)建 Deployment 的時候,可以指定創(chuàng)建自定義個Pod。例如:下面的語句可以一次性創(chuàng)建10 Pod。(這在部署集群環(huán)境的時候非常方便。)
# 創(chuàng)建是個nginx副本 --replicas后面跟副本數(shù)量
kubectl create deployment my-dep --image=nginx --replicas=10
3、擴(kuò)縮容
擴(kuò)縮容在實際工作中用的很多,例如:現(xiàn)在有1萬個Pod(集群環(huán)境),雙十一的時候,網(wǎng)站訪問流量激增, 現(xiàn)有的配置無法維持系統(tǒng)的穩(wěn)定運行,這個時候就需要對系統(tǒng)進(jìn)行橫向擴(kuò)容,很簡單, 下面的語句就可以讓系統(tǒng)的Pod 從1萬個擴(kuò)容到2萬個。
# 將Pod my-dep 擴(kuò)容到2萬個副本
kubectl scale --replicas=20000 deployment/my-dep
?雙十一過了, 需要對系統(tǒng)進(jìn)行縮容, 讓系統(tǒng)繼續(xù)維持 1萬個Pod, 就只需要執(zhí)行下面的命令, 又可以對系統(tǒng)進(jìn)行縮容。
# 將Pod my-dep 縮容到1萬個副本
kubectl scale --replicas=10000 deployment/my-dep
?4、滾動更新
在以往的工作中, 要想對一個系統(tǒng)進(jìn)行版本更新, 需要將系統(tǒng)先暫停, 然后將發(fā)布后的程序更新上去, 一般都是這么搞的。但是這個方式有弊端, 那就是在更新的過程中, 程序不可用。 這在有些場景中是無法容忍的。
例如:?馬上618購物狂歡節(jié)快到了, 各大電商平臺又推出了搶紅包的游戲?,F(xiàn)有的系統(tǒng)版本是V.1.0,現(xiàn)在需要將系統(tǒng)升級到V.2.0 。那就可以使用滾動更新
# 語法:kubectl set image 工作負(fù)載方式/Pod名稱 鏡像名稱=需要調(diào)整的鏡像 --record
# --record 用作記錄滾動更新的信息, 后面方便版本回退
kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record
?注意:上面語句的 nginx 是填寫鏡像的name 屬性,可以使用“kubectl get deployment my-dep -oyaml” 來查看,結(jié)果如下圖
5、版本回退?
?版本回退這個功能一般是當(dāng)版本更新上去之后, 發(fā)現(xiàn)有問題, 需要將新版本進(jìn)行回退到指定版本。這個回退也是“滾動”的。
1. 查看系統(tǒng)有哪些版本
我們在滾動更新的時候, 說過一個 “--record” 參數(shù), 只有加了這個參數(shù),更新的版本信息才會被記錄下來。
# 查看系統(tǒng)有哪些歷史版本
[root@master ~]# kubectl rollout history deployment/my-dep
deployment.apps/my-dep
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record=true
[root@master ~]#
# 也可以單獨查看某個歷史詳情
[root@master ~]# kubectl rollout history deployment/my-dep --revision=2
deployment.apps/my-dep with revision #2
Pod Template:
Labels: app=my-dep
pod-template-hash=6b48cbf4f9
Annotations: kubernetes.io/change-cause: kubectl set image deployment/my-dep nginx=nginx:1.16.1 --record=true
Containers:
nginx:
Image: nginx:1.16.1
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
2. 回滾
#回滾(回到上次)
kubectl rollout undo deployment/my-dep
#回滾(回到指定版本)
kubectl rollout undo deployment/my-dep --to-revision=2
?文章來源地址http://www.zghlxwxcb.cn/news/detail-482948.html
文章來源:http://www.zghlxwxcb.cn/news/detail-482948.html
?
到了這里,關(guān)于四、Kubernetes(k8s) 工作中的常用命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!