k8s核心資源對象& NameSpace(指定版本回滾)

k8s核心的資源對象:

  • Pod:是運行以及調度的原子單位,也就是k8s中最小的資源單位,同一個pod能夠同時運行多個container,多個container之間共享:(UTS(主機名和域名),IPC(消息隊列和共享內存),NET(網絡棧,端口等),namespace(名稱空間)),但USR(用戶和組),MNT(掛載點),PID(進行編號)是相互隔離的。
    pod有兩種類型的pod:一類是由控制器控制的pod,一類是自主式pod(不受控制器管理,本身管理本身)node

  • Deployment:最多見的pod控制器,它支持應用的擴縮容。滾動更新操做。(缺點:沒法回滾到指定的版本)nginx

  • Service: 爲有生命週期的pod對象提供了一個固定的統一的訪問接口,用於服務發現和服務訪問。
    如下資源對象會在後續的博客中進行應用,如下只作瞭解
  • RC(Replcation Controller):最先一代的pod控制器,在未來的版本中會將其刪除。
  • RS (Replication Set):新一代的pod控制器,用來替換RC,功能與RC基本相同,惟一的不一樣之處在於支持的標籤選擇器不一樣。RC只支持等值的選擇器,RS還額外支持基於集合的選擇器。web

  • DaemonSet:用來確保每一個節點都運行某個pod的一個副本。(每一個節點只運行一個副本,不支持replicas字段)docker

  • Job:用來管理運行完成以後便可終止的應用,例如批量處理做業任務(能夠理解爲依次形的pod,只要任務執行完成後,就當即刪除pod)數據庫

  • PV(PersistentVolume):持久卷,統一的數據持久化目錄,方便管理

* PVC(PersistentVolumeClaim):應用pv持久化空間的一個申請,聲明。vim

  • Stroage Class:(存儲類)根本做用:根據pv定義的值自動建立pv。api

  • StatefulSet:又稱PetSet,也是一種pod控制器。
    特色:pod名稱不變,每一個副本啓停有順序。用於數據持久化(每一個pod的數據都不同),自動建立pv,pvc。安全

  • Secret和ConfigMap:用於保存輕量的敏感信息。好比數據庫的用戶名和密碼或者認證密鑰等。

* Ingress-nginx: 用於解決集羣的負載狀況,爲集羣提供一個統一的路口。安全,端口容器管理。網絡

NameSpace(命名空間)

NameSpace(命名空間)是kubernetes系統中的另外一個重要的概念,經過將系統內部的對象「分配」到不一樣的namespace中,造成邏輯上分組的不一樣項目,小組或用戶組,便於不一樣的分組在共享使用整個集羣的資源的同時還能被分別管理。
kubernetes集羣在啓動後,會建立一個名爲「default」的NameSpace,若是不特別指明NameSpace,則用戶建立的pod,RC, Service都被系統建立到「default」的NameSpace中。
kubernetes中的NameSpace主要用於空間,名稱上的隔離,和docker中的NameSpace的概念徹底不同。app

[root@master ~]# kubectl  get ns   //查看命名空間
NAME              STATUS   AGE
default           Active   27d        //默認命名空間爲default
kube-node-lease   Active   27d
kube-public       Active   27d
kube-system       Active   27d

建立命名空間
##有兩種建立方法:命令行和編寫yaml文件
//方法一:命令行建立

[root@master ~]# kubectl  create  ns k8s1
namespace/k8s1 created

k8s核心資源對象& NameSpace(指定版本回滾)

//方法二:編寫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

k8s核心資源對象& NameSpace(指定版本回滾)

命名空間的應用
1,指定一個pod(httpd)運行在指定的名稱空間中:

[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:查看任何命名空間下的資源對象時,都須要指定對應的命名空間,不然默認查看的時default命名空間下的pod。

namespace應用之指定版本回滾
在上一章的資源的建立方式博客中咱們用到了版本的升級和回滾操做,可是隻能在先後兩個版本之間,這是一個極大的缺點,而接下來的操做是能夠指定某一個版原本進行回滾。

//在指定的命名空間下建立一個deployment資源對象,鏡像用私有倉庫中的鏡像,進行更新和回滾操做,且驗證網頁。

1)搭建registry私有倉庫,且上傳自定義鏡像,過程能夠參考該博文部署私有倉庫

2)建立資源對象:
[root@master ~]# vim namespace-pod1.yaml

apiVersion: v1
kind: Namespace                 #建立命名空間
metadata:
  name: test-namespace
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-deploy1
  namespace: test-namespace
spec:
  template:
    metadata:
      labels:
        name: nginx-web            #建立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             #建立service關聯deployment
  selector:
    name: nginx-web
  ports:
  - name: nginx
    port: 80
    targetPort: 80
    nodePort: 30001
//運行該pod
[root@master ~]# kubectl apply -f namespace-pod1.yaml --record 
namespace/test-namespace configured
deployment.extensions/nginx-deploy1 configured
service/nginx-svc configured
  • 參數:--record:記錄版本信息。
//查看deployment版本信息:
[root@master ~]# kubectl  get deployments. -o wide -n test-namespace

k8s核心資源對象& NameSpace(指定版本回滾)
//訪問web界面:
k8s核心資源對象& NameSpace(指定版本回滾)
k8s核心資源對象& NameSpace(指定版本回滾)

3)進行更新操做,將鏡像版本進行更新至v2版本:

[root@master ~]# cp namespace-pod1.yaml namespace-pod2.yaml 
[root@master ~]# vim namespace-pod2.yaml

k8s核心資源對象& NameSpace(指定版本回滾)

[root@master ~]# kubectl apply -f  namespace-pod2.yaml  --record  #記錄版本信息
namespace/test-namespace configured
deployment.extensions/nginx-deploy1 configured
service/nginx-svc configured
//查看當前鏡像版本:
[root@master ~]# kubectl  get deployments. -o wide -n test-namespace

k8s核心資源對象& NameSpace(指定版本回滾)
//鏡像更新成功,訪問網頁:
k8s核心資源對象& NameSpace(指定版本回滾)

4)進行回滾操做,回滾到指定版本1:

//回滾以前須要先查看歷史版本信息:
[root@master ~]# kubectl  rollout  history deployment  -n test-namespace

k8s核心資源對象& NameSpace(指定版本回滾)
由於我只更新了一次,因此只有兩個版本,固然在生產環境中確定有很是多的一個版本,因此咱們必需要可以指定對應的版本。

//進行回滾:

[root@master ~]# kubectl  rollout undo deployment -n test-namespace  nginx-deploy1 --to-revision=1
deployment.extensions/nginx-deploy1 rolled back
  • --to-revision參數來指定版本,只須要選擇對應的版本號便可。
    //查看deployment的版本,是否回滾成功:
    k8s核心資源對象& NameSpace(指定版本回滾)
    版本回滾成功,測試訪問web界面:
    k8s核心資源對象& NameSpace(指定版本回滾)
    能夠看到回滾成功,網頁內容也進行了回滾操做。

//再次查看歷史版本信息:
k8s核心資源對象& NameSpace(指定版本回滾)
能夠看到進行了回滾操做後,以前的版本1已經變成了最新版本3,版本是以順序的方式進行排列。

———————— 本文至此結束,感謝閱讀 ————————

相關文章
相關標籤/搜索