您好,登錄后才能下訂單哦!
Pod:是運(yùn)行以及調(diào)度的原子單位,也就是k8s中最小的資源單位,同一個(gè)pod可以同時(shí)運(yùn)行多個(gè)container,多個(gè)container之間共享:(UTS(主機(jī)名和域名),IPC(消息隊(duì)列和共享內(nèi)存),NET(網(wǎng)絡(luò)棧,端口等),namespace(名稱空間)),但USR(用戶和組),MNT(掛載點(diǎn)),PID(進(jìn)行編號(hào))是相互隔離的。
pod有兩種類型的pod:一類是由控制器控制的pod,一類是自主式pod(不受控制器管理,自己管理自己)
Deployment:最常見的pod控制器,它支持應(yīng)用的擴(kuò)縮容。滾動(dòng)更新操作。(缺點(diǎn):無法回滾到指定的版本)
RS (Replication Set):新一代的pod控制器,用來替換RC,功能與RC基本相同,唯一的不同之處在于支持的標(biāo)簽選擇器不同。RC只支持等值的選擇器,RS還額外支持基于集合的選擇器。
DaemonSet:用來確保每個(gè)節(jié)點(diǎn)都運(yùn)行某個(gè)pod的一個(gè)副本。(每個(gè)節(jié)點(diǎn)只運(yùn)行一個(gè)副本,不支持replicas字段)
Job:用來管理運(yùn)行完成之后即可終止的應(yīng)用,例如批量處理作業(yè)任務(wù)(可以理解為依次形的pod,只要任務(wù)執(zhí)行完成后,就立即刪除pod)
* PVC(PersistentVolumeClaim):應(yīng)用pv持久化空間的一個(gè)申請(qǐng),聲明。
Stroage Class:(存儲(chǔ)類)根本作用:根據(jù)pv定義的值自動(dòng)創(chuàng)建pv。
StatefulSet:又稱PetSet,也是一種pod控制器。
特點(diǎn):pod名稱不變,每個(gè)副本啟停有順序。用于數(shù)據(jù)持久化(每個(gè)pod的數(shù)據(jù)都不一樣),自動(dòng)創(chuàng)建pv,pvc。
* Ingress-nginx: 用于解決集群的負(fù)載情況,為集群提供一個(gè)統(tǒng)一的路口。安全,端口容器管理。
NameSpace(命名空間)是kubernetes系統(tǒng)中的另一個(gè)重要的概念,通過將系統(tǒng)內(nèi)部的對(duì)象“分配”到不同的namespace中,形成邏輯上分組的不同項(xiàng)目,小組或用戶組,便于不同的分組在共享使用整個(gè)集群的資源的同時(shí)還能被分別管理。
kubernetes集群在啟動(dòng)后,會(huì)創(chuàng)建一個(gè)名為“default”的NameSpace,如果不特別指明NameSpace,則用戶創(chuàng)建的pod,RC, Service都被系統(tǒng)創(chuàng)建到“default”的NameSpace中。
kubernetes中的NameSpace主要用于空間,名稱上的隔離,和docker中的NameSpace的概念完全不一樣。
[root@master ~]# kubectl get ns //查看命名空間
NAME STATUS AGE
default Active 27d //默認(rèn)命名空間為default
kube-node-lease Active 27d
kube-public Active 27d
kube-system Active 27d
創(chuàng)建命名空間
##有兩種創(chuàng)建方法:命令行和編寫yaml文件
//方法一:命令行創(chuàng)建
[root@master ~]# kubectl create ns k8s1
namespace/k8s1 created
//方法二:編寫yaml文件
[root@master ~]# vim k8s2-ns.yaml
apiVersion: v1
kind: Namespace
metadata:
name: k8s2
[root@master ~]# kubectl apply -f k8s2-ns.yaml
namespace/k8s2 created
命名空間的應(yīng)用
1,指定一個(gè)pod(httpd)運(yùn)行在指定的名稱空間中:
[root@master ~]# vim test-pod1.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: test-pod1
namespace: k8s2 //在該字段下指定命名空間
spec:
revisionHistoryLimit: 5
replicas: 2
template:
metadata:
labels:
name: httpd-web
spec:
containers:
- name: httpd
image: httpd
ports:
- containerPort: 80
[root@master ~]# kubectl apply -f test-pod1.yaml
deployment.extensions/test-pod1 created
//查看該命名空間下的pod:
[root@master ~]# kubectl get pod -n k8s2 # -n:指定命名空間
NAME READY STATUS RESTARTS AGE
test-pod1-55b448f88c-mhmqc 1/1 Running 0 4m6s
test-pod1-55b448f88c-xqsr7 1/1 Running 0 4m6s
PS:查看任何命名空間下的資源對(duì)象時(shí),都需要指定對(duì)應(yīng)的命名空間,否則默認(rèn)查看的時(shí)default命名空間下的pod。
namespace應(yīng)用之指定版本回滾
在上一章的資源的創(chuàng)建方式博客中我們用到了版本的升級(jí)和回滾操作,但是只能在前后兩個(gè)版本之間,這是一個(gè)極大的缺點(diǎn),而接下來的操作是可以指定某一個(gè)版本來進(jìn)行回滾。
//在指定的命名空間下創(chuàng)建一個(gè)deployment資源對(duì)象,鏡像用私有倉庫中的鏡像,進(jìn)行更新和回滾操作,且驗(yàn)證網(wǎng)頁。
1)搭建registry私有倉庫,且上傳自定義鏡像,過程可以參考該博文部署私有倉庫
2)創(chuàng)建資源對(duì)象:
[root@master ~]# vim namespace-pod1.yaml
apiVersion: v1
kind: Namespace #創(chuàng)建命名空間
metadata:
name: test-namespace
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deploy1
namespace: test-namespace
spec:
template:
metadata:
labels:
name: nginx-web #創(chuàng)建deployment
spec:
containers:
- name: nginx
image: 172.16.1.30:5000/nginx:v1
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
namespace: test-namespace
spec:
type: NodePort #創(chuàng)建service關(guān)聯(lián)deployment
selector:
name: nginx-web
ports:
- name: nginx
port: 80
targetPort: 80
nodePort: 30001
//運(yùn)行該pod
[root@master ~]# kubectl apply -f namespace-pod1.yaml --record
namespace/test-namespace configured
deployment.extensions/nginx-deploy1 configured
service/nginx-svc configured
//查看deployment版本信息:
[root@master ~]# kubectl get deployments. -o wide -n test-namespace
//訪問web界面:
3)進(jìn)行更新操作,將鏡像版本進(jìn)行更新至v2版本:
[root@master ~]# cp namespace-pod1.yaml namespace-pod2.yaml
[root@master ~]# vim namespace-pod2.yaml
[root@master ~]# kubectl apply -f namespace-pod2.yaml --record #記錄版本信息
namespace/test-namespace configured
deployment.extensions/nginx-deploy1 configured
service/nginx-svc configured
//查看當(dāng)前鏡像版本:
[root@master ~]# kubectl get deployments. -o wide -n test-namespace
//鏡像更新成功,訪問網(wǎng)頁:
4)進(jìn)行回滾操作,回滾到指定版本1:
//回滾之前需要先查看歷史版本信息:
[root@master ~]# kubectl rollout history deployment -n test-namespace
因?yàn)槲抑桓铝艘淮?,所以只有兩個(gè)版本,當(dāng)然在生產(chǎn)環(huán)境中肯定有非常多的一個(gè)版本,所以我們必須要能夠指定對(duì)應(yīng)的版本。
//進(jìn)行回滾:
[root@master ~]# kubectl rollout undo deployment -n test-namespace nginx-deploy1 --to-revision=1
deployment.extensions/nginx-deploy1 rolled back
//再次查看歷史版本信息:
可以看到進(jìn)行了回滾操作后,之前的版本1已經(jīng)變成了最新版本3,版本是以順序的方式進(jìn)行排列。
———————— 本文至此結(jié)束,感謝閱讀 ————————
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。