#運行一個registry容器 [root@master ~]# docker run -tid --name registry -p 5000:5000 --restart always registry:latest #在全部須要使用私有倉庫的的節點上進行如下配置: [root@master ~]# vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.20.6:5000 #修改上述配置項,指定私有倉庫的監聽地址及端口 [root@master ~]# systemctl daemon-reload [root@master ~]# systemctl restart docker
[root@master test]# vim Dockerfile #編寫dockerfile文件 FROM nginx ADD index.html /usr/share/nginx/html/ [root@master test]# echo "Version:v1" > index.html #編輯版本1的首頁 [root@master test]# docker build -t 192.168.20.6:5000/ljz:v1 . #製做版本1的鏡像 #製做版本2的鏡像 [root@master test]# echo "Version:v2" > index.html [root@master test]# docker build -t 192.168.20.6:5000/ljz:v2 . #製做版本3的鏡像 [root@master test]# echo "Version:v3" > index.html [root@master test]# docker build -t 192.168.20.6:5000/ljz:v3 . #將上面三個鏡像上傳至私有倉庫 [root@master test]# docker push 192.168.20.6:5000/ljz:v1 [root@master test]# docker push 192.168.20.6:5000/ljz:v2 [root@master test]# docker push 192.168.20.6:5000/ljz:v3
[root@master test]# vim ns.yaml #編寫yaml文件 apiVersion: v1 kind: Namespace metadata: name: lvjianzhao [root@master test]# kubectl apply -f ns.yaml #運行yaml文件 namespace/lvjianzhao created [root@master test]# kubectl get ns lvjianzhao #查看建立的namespace。 NAME STATUS AGE lvjianzhao Active 11s
建立一個Deployment資源對象。鏡像版本爲v1。html
[root@master test]# vim lvjianzhao.yaml #編寫yaml文件 apiVersion: extensions/v1beta1 kind: Deployment metadata: name: lvjianzhao namespace: lvjianzhao spec: revisionHistoryLimit: 5 #規定記錄多少個版本,這個字段經過 kubectl explain deploy.spec 命令找到revisionHistoryLimit <integer>行得到 replicas: 2 template: metadata: labels: name: lvjianzhaoa spec: containers: - name: lvjianzhao image: 192.168.20.6:5000/ljz:v1 #鏡像版本爲1 ports: - containerPort: 80 [root@master test]# kubectl apply -f lvjianzhao.yaml --record #執行該yaml文件, --record表示記錄版本歷史 [root@master test]# kubectl get pod #查看上面yaml文件運行的pod No resources found. #能夠得出結論,若是在編寫yaml文件時,指定了歸屬於哪一個namespace, #那麼執行上面的命令是查看不到運行的pod的,而不是沒有運行的pod [root@master test]# kubectl get pod -n lvjianzhao #增長「-n」選項,指定名稱空間,便可看對應的pod NAME READY STATUS RESTARTS AGE lvjianzhao-865d4b6b6-2mlcj 1/1 Running 0 101s lvjianzhao-865d4b6b6-7kbnb 1/1 Running 0 101s [root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao #查看lvjianzhao的namespace名稱空間的名爲lvjianzhao的deployment資源對象 deployment.extensions/lvjianzhao REVISION CHANGE-CAUSE 1 kubectl apply --filename=lvjianzhao.yaml --record=true #能夠看到當前只有一個版本
[root@master test]# vim ljz-svc.yaml #建立service的yaml文件 apiVersion: v1 kind: Service metadata: name: lvjianzhao-service namespace: lvjianzhao spec: type: NodePort selector: name: lvjianzhaoa ports: - name: lvjianzhao-port port: 8080 #這是service的IP端口 targetPort: 80 #這是pod的端口 nodePort: 31111 #這是映射到宿主機的端口 [root@master test]# kubectl apply -f ljz-svc.yaml #執行yaml文件 service/lvjianzhao-service created [root@master test]# kubectl get svc #同理,若不指定名稱空間,是查不到對應的service的 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 4d1h [root@master test]# kubectl get svc -n lvjianzhao #使用「-n」選項查看指定的名稱空間中的service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE lvjianzhao-service NodePort 10.104.119.94 <none> 8080:31111/TCP 111s
注意:建立的service資源對象必須和建立的deployment資源對象在同一個namespace中,不然沒法進行關聯!!!node
如今客戶端就能夠訪問k8s羣集中的任意一個節點的31111端口訪問其pod提供的服務了,以下:
nginx
若是須要在線修改pod提供的網頁文件,能夠先查看到pod的name,而後直接在主節點上登陸到此pod便可,命令以下:web
[root@master 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@master httpd-web]# kubectl exec -it httpd-devploy1-6f987c9764-5g92w /bin/bash #經過指定pod的name,進入pod
[root@master test]# sed -i 's/ljz:v1/ljz:v2/' lvjianzhao.yaml #更改成版本2 [root@master test]# kubectl apply -f lvjianzhao.yaml #執行 deployment.extensions/lvjianzhao configured [root@master test]# curl 127.0.0.1:31111 #訪問驗證 Version:v2 [root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao #再次查看歷史版本 deployment.extensions/lvjianzhao REVISION CHANGE-CAUSE 1 kubectl apply --filename=lvjianzhao.yaml --record=true 2 <none> #如今是有兩個歷史版本了 #接下來再次升級並驗證 [root@master test]# sed -i 's/ljz:v2/ljz:v3/' lvjianzhao.yaml [root@master test]# kubectl apply -f lvjianzhao.yaml [root@master test]# curl 127.0.0.1:31111 #如今是版本3了 Version:v3 [root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao #查看歷史版本信息 deployment.extensions/lvjianzhao REVISION CHANGE-CAUSE 1 kubectl apply --filename=lvjianzhao.yaml --record=true 2 <none> 3 <none> #如今執行回滾操做: [root@master test]# kubectl rollout undo deployment -n lvjianzhao lvjianzhao --to-revision=1 #回滾到版本1,須要指定namespace,「--to-revision」是指定回滾到哪一個版本 deployment.extensions/lvjianzhao rolled back [root@master test]# curl 127.0.0.1:31111 #驗證 Version:v1 [root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao #再次查看歷史記錄,發現版本1變成了版本4。 deployment.extensions/lvjianzhao REVISION CHANGE-CAUSE 2 <none> 3 <none> 4 kubectl apply --filename=lvjianzhao.yaml --record=true