K8S的名稱空間建立&&版本的升級、回滾操做

一、建立私有倉庫html

[root@docker-k8s01 ~]# docker run -itd --name registry -p 5000:5000 --restart always registry:latest
#在全部須要使用私有倉庫的docker主機上添加以下配置
[root@docker-k8s01 ~]# vim /usr/lib/systemd/system/docker.service 
ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.171.151:5000
#修改完文件後重啓使之生效
[root@docker-k8s01 ~]# systemctl daemon-reload 
[root@docker-k8s01 ~]# systemctl restart docker

二、在master節點,自定義一個鏡像,基於nginx鏡像,默認界面內容改成:Version:v1,版本2內容爲:Version:v2.版本3內容爲:Version:v3node

#編寫dockerfile文件
[root@docker-k8s01 ~]# vim Dockerfile
FROM  nginx
ADD index.html /usr/share/nginx/html
#編輯v1版本的首頁內容
[root@docker-k8s01 ~]# echo "Version:v1" > index.html
#製做v1版本的鏡像
[root@docker-k8s01 ~]# docker build -t 192.168.171.151:5000/zyz:v1 .
#製做v2版本的鏡像
[root@docker-k8s01 ~]# echo "Version:v2" > index.html
[root@docker-k8s01 ~]# docker build -t 192.168.171.151:5000/zyz:v2 .
#製做v3版本的鏡像
[root@docker-k8s01 ~]# echo "Version:v3" > index.html 
[root@docker-k8s01 ~]# docker build -t 192.168.171.151:5000/zyz:v3 .
#將製做好的三個版本的鏡像上傳至私有倉庫
[root@docker-k8s01 ~]# docker push 192.168.171.151:5000/zyz:v1 
[root@docker-k8s01 ~]# docker push 192.168.171.151:5000/zyz:v2
[root@docker-k8s01 ~]# docker push 192.168.171.151:5000/zyz:v3

建立一個Namespace.接下來的全部操做都在此名稱空間之下nginx

[root@docker-k8s01 ~]# mkdir test
[root@docker-k8s01 ~]# cd test/
[root@docker-k8s01 test]# vim ns.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: zyz
[root@docker-k8s01 test]# kubectl apply -f ns.yaml            # 運行yaml文件
namespace/zyz created
[root@docker-k8s01 test]# kubectl get ns zyz              # 查看建立的namespace
NAME   STATUS   AGE
zyz    Active   30s

建立一個Deployment資源對象,鏡像版本爲v1web

[root@docker-k8s01 test]# vim zyz.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: zyz
  namespace: zyz
spec:
  revisionHistoryLimit: 5         # 規定記錄多少個版本,這個字段經過 kubectl explain deploy.spec  命令找到revisionHistoryLimit <integer>行得到
  replicas: 2
  template:
    metadata:
      labels:
        name: zyz
    spec:
      containers:
      - name: zyz
        image: 192.168.171.151:5000/zyz:v1       # 鏡像版本爲1
        ports:
        - containerPort: 80
#執行該yaml文件,  --record表示記錄版本歷史
[root@docker-k8s01 test]# kubectl apply -f zyz.yaml --record 
[root@docker-k8s01 test]# kubectl get pod              # 查看上面yaml文件運行的pod
No resources found.
#能夠得出結論,若是在編寫yaml文件時,指定了歸屬於哪一個namespace,
#那麼執行上面的命令是查看不到運行的pod的,而不是沒有運行的pod
[root@docker-k8s01 test]# kubectl get pod -n zyz             # 增長「-n」選項,指定名稱空間,便可看對應的pod
NAME                   READY   STATUS    RESTARTS   AGE
zyz-5d7cb64655-9pdcj   1/1     Running   0          98s
zyz-5d7cb64655-zzqcv   1/1     Running   0          98s
#查看zyz的namespace名稱空間的名爲zyz的deployment資源對象
[root@docker-k8s01 test]# kubectl rollout history deployment -n zyz zyz 
deployment.extensions/zyz 
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=zyz.yaml --record=true
#能夠看到當前只有一個版本,也能夠看到filename(文件名稱)

建立一個Service資源對象,關聯到上面的Deployment資源對象docker

[root@docker-k8s01 test]# vim zyz-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: zyz-service
  namespace: zyz
spec:
  type: NodePort
  selector:
    name: zyz
  ports:
  - name: zyz-port
    port: 8080           # service的IP接口
    targetPort: 80          # pod的端口
    nodePort: 31111       # 映射到宿主機的端口
[root@docker-k8s01 test]# kubectl apply -f zyz-svc.yaml 
[root@docker-k8s01 test]# kubectl get svc           # 若不指定名稱空間,是查不到對應的service的
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   9d
[root@docker-k8s01 test]# kubectl get svc -n zyz           # 使用「-n」選項查看指定的名稱空間中的service
NAME          TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
zyz-service   NodePort   10.100.89.145   <none>        8080:31111/TCP   55s

注意:建立的service資源對象必須和建立的deployment資源對象在同一個namespace中,不然沒法進行關聯!!!vim

客戶端訪問k8s羣集中的任意一個節點的31111端口訪問其pod提供的服務
K8S的名稱空間建立&&版本的升級、回滾操做
若是須要在線修改pod提供的網頁文件,能夠先查看到pod的name,而後直接在主節點上登陸到此pod便可,命令以下api

[root@docker-k8s01 httpd-web]# kubectl get pod -o wide       #查看pod的name
NAME                              READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES
httpd-devploy1-6f987c9764-5g92w   1/1     Running   0          8m35s   10.244.1.5   node01   <none>           <none>
httpd-devploy1-6f987c9764-wvgft   1/1     Running   0     
[root@docker-k8s01 httpd-web]# kubectl exec -it httpd-devploy1-6f987c9764-5g92w /bin/bash    #經過指定pod的name,進入pod

如今由1版本,滾動更新至2版本、再到3版本,最後回滾到指定1版本內容bash

[root@docker-k8s01 test]# sed -i 's/zyz:v1/zyz:v2/' zyz.yaml        # 更新爲版本2
[root@docker-k8s01 test]# kubectl apply -f zyz.yaml      # 執行
deployment.extensions/zyz configured          # 配置成功
#訪問驗證
[root@docker-k8s01 test]# curl 192.168.171.151:31111
Version:v2
#查看歷史版本
[root@docker-k8s01 test]# kubectl rollout history deployment -n zyz zyz 
deployment.extensions/zyz 
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=zyz.yaml --record=true
2         <none>
#如今是有兩個歷史版本了
#接下來再次升級並驗證
[root@docker-k8s01 test]# sed -i 's/zyz:v2/zyz:v3/' zyz.yaml 
[root@docker-k8s01 test]# kubectl apply -f zyz.yaml 
deployment.extensions/zyz configured
#再次訪問能夠看到如今是版本3了
[root@docker-k8s01 test]# curl 192.168.171.151:31111
Version:v3
#查看歷史版本信息
[root@docker-k8s01 test]# kubectl rollout history deployment -n zyz zyz 
deployment.extensions/zyz 
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=zyz.yaml --record=true
2         <none>
3         <none>
#接下來執行回滾操做
#回滾到版本1,須要指定namespace,「--to-revision」是指定回滾到哪一個版本
[root@docker-k8s01 test]# kubectl rollout undo deployment -n zyz zyz --to-revision=1
deployment.extensions/zyz rolled back
[root@docker-k8s01 test]# curl 192.168.171.151:31111
Version:v1
[root@docker-k8s01 test]# kubectl rollout history deployment -n zyz zyz
#再次查看歷史記錄,發現版本1變成了版本4,以前的1已經沒有了
deployment.extensions/zyz 
REVISION  CHANGE-CAUSE
2         <none>
3         <none>
4         kubectl apply --filename=zyz.yaml --record=true
相關文章
相關標籤/搜索