K8s資源對象管理+(升級、回滾、擴容、縮容)

1、資源建立

一)、資源建立的方式之一,命令的方式建立資源,理解命令運行以後的動做,經過查看資源的方式,總結Pod名稱的由來。html

[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-2j9jr   1/1     Running   0          2m8s   10.244.1.2   node02   <none>           <none>
test-66cbf74d74-54p95   1/1     Running   0          2m8s   10.244.2.4   node01   <none>           <none>
test-66cbf74d74-5pkjs   1/1     Running   0          2m8s   10.244.2.2   node01   <none>           <none>
test-66cbf74d74-lcmdl   1/1     Running   0          2m8s   10.244.2.3   node01   <none>           <none>
test-66cbf74d74-wh574   1/1     Running   0          2m8s   10.244.1.3   node02   <none>           <none>
//能夠看到該pod的NAME就是在上面replicasets的後面又追加了一段ID

也能夠使用如下方法,查看控制器的詳細信息!方法以下:node

[root@master ~]# kubectl describe deployments. test
//查看名爲test控制器的詳細信息

返回的信息如圖:
K8s資源對象管理+(升級、回滾、擴容、縮容)nginx

[root@master ~]# kubectl describe replicasets. test
//查看replicasets控制器的詳細信息

返回的結果如圖:
K8s資源對象管理+(升級、回滾、擴容、縮容)
從以上建立一個pod的過程當中,就能夠看出當咱們執行建立資源的命令後,deployment這個控制器會經過replicaset控制器去管理並建立所需的pod!web

2、解決客戶端沒法訪問k8s內部pod所運行的服務

當k8s集羣建立pod完成後,集羣內部是能夠訪問pod所提供的服務的,方法以下:docker

[root@master ~]#  kubectl get pod -o wide 
NAME                    READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
test-66cbf74d74-2j9jr   1/1     Running   0          22m   10.244.1.2   node02   <none>           <none>
test-66cbf74d74-54p95   1/1     Running   0          22m   10.244.2.4   node01   <none>           <none>
test-66cbf74d74-5pkjs   1/1     Running   0          22m   10.244.2.2   node01   <none>           <none>
test-66cbf74d74-lcmdl   1/1     Running   0          22m   10.244.2.3   node01   <none>           <none>
test-66cbf74d74-wh574   1/1     Running   0          22m   10.244.1.3   node02   <none>           <none>
[root@master ~]# curl  -I   10.244.1.2 
HTTP/1.1 200 OK
Server: nginx/1.19.1
Date: Wed, 12 Aug 2020 10:47:40 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 07 Jul 2020 15:52:25 GMT
Connection: keep-alive
ETag: "5f049a39-264"
Accept-Ranges: bytes
//這裏顯示內部訪問是沒有問題的

注:集羣內部訪問是沒有問題,可是此時除了集羣內部,外部是訪問不到的,這就很傷腦筋了。不過好在k8s提供了完美的解決方案,實現過程以下:json

[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    
NAME      TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
service   NodePort   10.111.15.250   <none>        80:31293/TCP   2s
//能夠看出將部署的服務端口映射到了宿主機的31293端口

K8s資源對象管理+(升級、回滾、擴容、縮容)
注:是訪問羣集中任意節點均可以訪問k8s集羣中pod所提供的服務!vim

3、搭建私有倉庫,並自定義鏡像

倉庫選擇registry或者是Harbor均可以,爲了簡單起見。這裏搭建registry私有倉庫,方法以下:curl

[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.45.129:5000
[root@master ~]# scp  /usr/lib/systemd/system/docker.service node01:/usr/lib/systemd/system/docker.service
[root@master ~]# scp  /usr/lib/systemd/system/docker.service node02:/usr/lib/systemd/system/docker.service
//將更改完的配置文件複製到另外兩臺worker節點上
[root@master ~]# systemctl  daemon-reload 
[root@master ~]# systemctl  restart  docker.service
//另外兩臺worker主機也需重啓docker服務
[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 bjq:v1</h1>" > index.html
[root@master v1]# docker build -t 192.168.45.129:5000/nginx:version1 .
[root@master v1]# cp Dockerfile ../v2/
[root@master v1]# cp Dockerfile ../v3/
[root@master v1]# echo -e "<h1>hello bjq:v2</h1>" > ../v2/index.html
[root@master v1]# echo -e "<h1>hello bjq:v3</h1>" > ../v3/index.html
[root@master v1]# cd ../v2
[root@master v2]# docker build -t 192.168.45.129:5000/nginx:version2 .
[root@master v2]# cd ../v3
[root@master v3]# docker build -t 192.168.45.129:5000/nginx:version3 .
//生成三個不一樣版本的鏡像,在主頁上進行區分
[root@master v3]# docker push 192.168.45.129:5000/nginx:version1
[root@master v3]# docker push 192.168.45.129:5000/nginx:version2
[root@master v3]# docker push 192.168.45.129:5000/nginx:version3
//將鏡像上傳到私有倉庫中
##################建立pod進行測試###################
[root@master v3]# kubectl run nginx --image=192.168.45.129:5000/nginx:version1 --port=80 --replicas=4
//基於自定義鏡像(192.168.45.129: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 bjq:v1</h1>
[root@master v3]# curl 10.244.2.10
<h1>hello bjq:v1</h1>
//訪問副本的任意IP地址均可以看到一樣的頁面

4、版本擴容、縮容

第一種方法:ide

[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
//查看副本數量

5、服務的升級與回滾

服務升級操做:

[root@master v3]# kubectl set image deployment nginx nginx=192.168.45.129:5000/nginx:version2
//將nginx資源的鏡像升級爲192.168.45.129: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.45.129:5000/nginx:version2   run=nginx
//能夠經過查看nginx資源的信息進行查看
[root@master v3]# kubectl describe deployments. nginx
//也能夠經過查看nginx資源的詳細信息進行查看

查詢結果以下:
K8s資源對象管理+(升級、回滾、擴容、縮容)

[root@master v3]#  kubectl set image deployment nginx nginx=192.168.45.129: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.45.129: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.45.129: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.45.129:5000/nginx:version3   run=nginx
//再次執行回滾操做,發現又回到版本3

由此能夠看出在k8s集羣中版本的升級、回滾操做與docker swarm中差很少一致!

相關文章
相關標籤/搜索