一、建立私有倉庫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提供的服務
若是須要在線修改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