博文大綱:
1、資源建立
2、解決客戶端沒法訪問k8s內部pod所運行的服務
3、搭建私有倉庫,並自定義鏡像
4、版本擴容、縮容
5、服務的升級與回滾html
本次博文主要介紹如何使用命令行的方式建立資源!node
[root@master ~]# kubectl run test --image=nginx:latest --replicas=5 //基於httpd的鏡像建立一個deployment類型的控制組,名稱爲test,並指定副本數量爲5 [root@master ~]# kubectl get deployments. //查看deployment控制器 NAME READY UP-TO-DATE AVAILABLE AGE test 5/5 5 5 6m26s //能夠看到deployment的name是咱們指定的test [root@master ~]# kubectl get replicasets. //查看replicasets這個控制器 NAME DESIRED CURRENT READY AGE test-66cbf74d74 5 5 5 7m50s //能夠看到replicasets的NAME就是在deployment的NAME後面追加了一串ID號 [root@master ~]# kubectl get pod -o wide //查看pod的詳細信息 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-66cbf74d74-5tcqz 1/1 Running 0 9m33s 10.244.1.7 node01 <none> <none> test-66cbf74d74-6975b 1/1 Running 0 9m33s 10.244.2.3 node02 <none> <none> test-66cbf74d74-d7wcg 1/1 Running 0 9m33s 10.244.1.6 node01 <none> <none> test-66cbf74d74-d9lj6 1/1 Running 0 9m33s 10.244.1.5 node01 <none> <none> test-66cbf74d74-r4fmp 1/1 Running 0 9m33s 10.244.2.2 node02 <none> <none> //能夠看到該pod的NAME就是在上面replicasets的後面又追加了一段ID
也可使用如下方法,查看控制器的詳細信息!方法以下:nginx
[root@master ~]# kubectl describe deployments. test //查看名爲test控制器的詳細信息
返回的信息如圖:web
[root@master ~]# kubectl describe replicasets. test //查看replicasets控制器的詳細信息
返回的結果如圖:docker
從以上建立一個pod的過程當中,就能夠看出當咱們執行建立資源的命令後,deployment這個控制器會經過replicaset控制器去管理並建立所需的pod!json
當k8s集羣建立pod完成後,集羣內部是能夠訪問pod所提供的服務的,方法以下:vim
[root@master ~]# kubectl get pod -o wide //查看pod的詳細信息 NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES test-66cbf74d74-5tcqz 1/1 Running 0 28m 10.244.1.7 node01 <none> <none> test-66cbf74d74-6975b 1/1 Running 0 28m 10.244.2.3 node02 <none> <none> test-66cbf74d74-d7wcg 1/1 Running 0 28m 10.244.1.6 node01 <none> <none> test-66cbf74d74-d9lj6 1/1 Running 0 28m 10.244.1.5 node01 <none> <none> test-66cbf74d74-r4fmp 1/1 Running 0 28m 10.244.2.2 node02 <none> <none>
集羣內部測試訪問:
集羣內部訪問是沒有問題,可是此時除了集羣內部,外部是訪問不到的,這就很傷腦筋了。不過好在k8s提供了完美的解決方案,實現過程以下:curl
[root@master ~]# kubectl run web --image=nginx:latest --port=80 --replicas=2 //建立一個名爲web的deployment的資源對象,並映射容器的80端口到宿主機 [root@master ~]# kubectl expose deployment web --name=service --port=80 --type=NodePort //建立一個service(名稱能夠自定義),將部署web資源對象的80端口映射出來 [root@master ~]# kubectl get svc service //查看建立service的信息 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service NodePort 10.110.139.176 <none> 80:31070/TCP 35s //能夠看出將部署的服務端口映射到了宿主機的31070端口
客戶端訪問測試:
注意:是訪問羣集中任意節點均可以訪問k8s集羣中pod所提供的服務!ide
搭建私有倉庫能夠參考博文:Docker搭建私有倉庫(registry與Harbor)測試
倉庫選擇registry或者是Harbor均可以,爲了簡單起見。這裏搭建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 --insecure-registry 192.168.1.1:5000 [root@master ~]# systemctl daemon-reload [root@master ~]# systemctl restart docker //重啓docker服務使配置文件生效,node0一、node02的操做一致 [root@node01 ~]# scp root@master:/usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker.service [root@node01 ~]# systemctl daemon-reload [root@node01 ~]# systemctl restart docker //node01的操做 [root@node02 ~]# scp root@master:/usr/lib/systemd/system/docker.service /usr/lib/systemd/system/docker.service [root@node02 ~]# systemctl daemon-reload [root@node02 ~]# systemctl restart docker //node02的操做 ##############搭建私有倉庫完成################## [root@master ~]# mkdir v{1,2,3} [root@master ~]# cd v1 [root@master v1]# echo -e "FROM nginx:latest\nADD index.html /usr/share/nginx/html/" > Dockerfile [root@master v1]# echo -e "<h1>hello lvzhenjiang:v1</h1>" > index.html [root@master v1]# docker build -t 192.168.1.1:5000/nginx:version1 . [root@master v1]# cp Dockerfile ../v2/ [root@master v1]# cp Dockerfile ../v3/ [root@master v1]# echo -e "<h1>hello lvzhenjiang:v2</h1>" > ../v2/index.html [root@master v1]# echo -e "<h1>hello lvzhenjiang:v3</h1>" > ../v3/index.html [root@master v1]# cd ../v2 [root@master v2]# docker build -t 192.168.1.1:5000/nginx:version2 . [root@master v2]# cd ../v3 [root@master v3]# docker build -t 192.168.1.1:5000/nginx:version3 . //生成三個不一樣版本的鏡像,在主頁上進行區分 [root@master v3]# docker push 192.168.1.1:5000/nginx:version1 [root@master v3]# docker push 192.168.1.1:5000/nginx:version2 [root@master v3]# docker push 192.168.1.1:5000/nginx:version3 //將鏡像上傳到私有倉庫中 ##################建立pod進行測試################### [root@master v3]# kubectl run nginx --image=192.168.1.1:5000/nginx:version1 --port=80 --replicas=4 //基於自定義鏡像(192.168.1.1:5000/nginx:v1)建立pod,副本數量爲4個,並映射端口 [root@master v3]# kubectl get pod -o wide | grep nginx | awk '{print $6}' 10.244.2.11 10.244.2.10 10.244.1.16 10.244.1.15 //建立四個副本的IP地址 [root@master v3]# curl 10.244.2.11 <h1>hello lvzhenjiang:v1</h1> [root@master v3]# curl 10.244.2.10 <h1>hello lvzhenjiang:v1</h1> //訪問副本的任意IP地址均可以看到一樣的頁面
第一種方法:
[root@master v3]# kubectl scale deployment nginx --replicas=8 //使用命令行的方式進行擴容操做(縮容也是同樣的道理) [root@master v3]# kubectl get pod -o wide | grep nginx | wc -l 8 [root@master v3]# kubectl get deployments. nginx -o yaml [root@master v3]# kubectl get deployments. nginx -o json //也能夠將nginx資源類型已json或yaml文件格式輸出(其中也可查看到副本的數量)
第二種方法:
[root@master v3]# kubectl edit deployments. nginx //編輯名爲nginx的資源類型 19 spec: //找到spec字段 20 progressDeadlineSeconds: 600 21 replicas: 6 //更改副本數量 //在保存退出的一瞬間就生效了 [root@master v3]# kubectl get pod -o wide | grep nginx | wc -l 6 //查看副本數量
服務升級操做:
[root@master v3]# kubectl set image deployment nginx nginx=192.168.1.1:5000/nginx:version2 //將nginx資源的鏡像升級爲192.168.1.1:5000/nginx:version2 [root@master v3]# kubectl get pod -o wide | grep nginx | awk '{print $6}' 10.244.1.19 10.244.1.21 10.244.1.20 10.244.2.14 10.244.2.15 10.244.2.16 [root@master v3]# curl 10.244.1.19 <h1>hello lvzhenjiang:v2</h1> //能夠經過測試訪問的方式進行驗證 [root@master v3]# kubectl get deployments. nginx -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR nginx 6/6 6 6 18m nginx 192.168.1.1:5000/nginx:version2 run=nginx //能夠經過查看nginx資源的信息進行查看 [root@master v3]# kubectl describe deployments. nginx //也能夠經過查看nginx資源的詳細信息進行查看
查詢結果以下:
[root@master v3]# kubectl set image deployment nginx nginx=192.168.1.1:5000/nginx:version3 //再次升級 [root@master v3]# kubectl get deployments. nginx -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR nginx 6/6 6 6 20m nginx 192.168.1.1:5000/nginx:version3 run=nginx //根據顯示信息能夠看出已經升級成功
服務回滾操做:
[root@master v3]# kubectl rollout undo deployment nginx //對nginx資源進行回滾操做 [root@master v3]# kubectl get deployments. nginx -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR nginx 6/6 4 6 22m nginx 192.168.1.1:5000/nginx:version2 run=nginx //從查詢結果中能夠查看已經回滾到上一個版本 [root@master v3]# kubectl rollout undo deployment nginx [root@master v3]# kubectl get deployments. nginx -o wide NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR nginx 5/6 6 5 53m nginx 192.168.1.1:5000/nginx:version3 run=nginx //再次執行回滾操做,發現又回到版本3
由此能夠看出在k8s集羣中版本的升級、回滾操做與docker swarm中差很少一致!
可是在k8s中回滾操做能夠經過回滾到指定的版本,在之後的博文中會介紹到!
————————本文到此爲止,感謝閱讀————————