溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

K8s資源對象的基本管理之使用命令行的方式(升級、回滾、擴(kuò)容、縮容)

發(fā)布時(shí)間:2020-04-08 10:38:14 來源:網(wǎng)絡(luò) 閱讀:543 作者:筱振 欄目:云計(jì)算

博文大綱:
一、資源創(chuàng)建
二、解決客戶端無法訪問k8s內(nèi)部pod所運(yùn)行的服務(wù)
三、搭建私有倉庫,并自定義鏡像
四、版本擴(kuò)容、縮容
五、服務(wù)的升級與回滾

一、資源創(chuàng)建

本次博文主要介紹如何使用命令行的方式創(chuàng)建資源!

[root@master ~]# kubectl run test --image=nginx:latest --replicas=5
//基于httpd的鏡像創(chuàng)建一個deployment類型的控制組,名稱為test,并指定副本數(shù)量為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的詳細(xì)信息
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

也可以使用以下方法,查看控制器的詳細(xì)信息!方法如下:

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

返回的信息如圖:
K8s資源對象的基本管理之使用命令行的方式(升級、回滾、擴(kuò)容、縮容)

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

返回的結(jié)果如圖:
K8s資源對象的基本管理之使用命令行的方式(升級、回滾、擴(kuò)容、縮容)

從以上創(chuàng)建一個pod的過程中,就可以看出當(dāng)我們執(zhí)行創(chuàng)建資源的命令后,deployment這個控制器會通過replicaset控制器去管理并創(chuàng)建所需的pod!

二、解決客戶端無法訪問k8s內(nèi)部pod所運(yùn)行的服務(wù)

當(dāng)k8s集群創(chuàng)建pod完成后,集群內(nèi)部是可以訪問pod所提供的服務(wù)的,方法如下:

[root@master ~]# kubectl get pod -o wide         //查看pod的詳細(xì)信息
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>

集群內(nèi)部測試訪問:
K8s資源對象的基本管理之使用命令行的方式(升級、回滾、擴(kuò)容、縮容)
集群內(nèi)部訪問是沒有問題,但是此時(shí)除了集群內(nèi)部,外部是訪問不到的,這就很傷腦筋了。不過好在k8s提供了完美的解決方案,實(shí)現(xiàn)過程如下:

[root@master ~]# kubectl run web --image=nginx:latest --port=80 --replicas=2
//創(chuàng)建一個名為web的deployment的資源對象,并映射容器的80端口到宿主機(jī)
[root@master ~]# kubectl expose deployment web --name=service --port=80 --type=NodePort
//創(chuàng)建一個service(名稱可以自定義),將部署web資源對象的80端口映射出來
[root@master ~]# kubectl get svc service      //查看創(chuàng)建service的信息
NAME      TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
service   NodePort   10.110.139.176   <none>        80:31070/TCP   35s
//可以看出將部署的服務(wù)端口映射到了宿主機(jī)的31070端口

客戶端訪問測試:
K8s資源對象的基本管理之使用命令行的方式(升級、回滾、擴(kuò)容、縮容)
注意:是訪問群集中任意節(jié)點(diǎn)都可以訪問k8s集群中pod所提供的服務(wù)!

三、搭建私有倉庫,并自定義鏡像

搭建私有倉庫可以參考博文: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服務(wù)使配置文件生效,node01、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 "<h2>hello lvzhenjiang:v1</h2>" > 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 "<h2>hello lvzhenjiang:v2</h2>" > ../v2/index.html
[root@master v1]# echo -e "<h2>hello lvzhenjiang:v3</h2>" > ../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 .
//生成三個不同版本的鏡像,在主頁上進(jìn)行區(qū)分
[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
//將鏡像上傳到私有倉庫中
##################創(chuàng)建pod進(jìn)行測試###################
[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)創(chuàng)建pod,副本數(shù)量為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
//創(chuàng)建四個副本的IP地址
[root@master v3]# curl 10.244.2.11
<h2>hello lvzhenjiang:v1</h2>
[root@master v3]# curl 10.244.2.10
<h2>hello lvzhenjiang:v1</h2>
//訪問副本的任意IP地址都可以看到同樣的頁面

四、版本擴(kuò)容、縮容

第一種方法:

[root@master v3]# kubectl scale deployment nginx --replicas=8
//使用命令行的方式進(jìn)行擴(kuò)容操作(縮容也是一樣的道理)
[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文件格式輸出(其中也可查看到副本的數(shù)量)

第二種方法:

[root@master v3]# kubectl edit deployments. nginx
//編輯名為nginx的資源類型
     19 spec:                  //找到spec字段
     20   progressDeadlineSeconds: 600
     21   replicas: 6           //更改副本數(shù)量
//在保存退出的一瞬間就生效了
[root@master v3]# kubectl get pod -o wide | grep nginx | wc -l
6
//查看副本數(shù)量

五、服務(wù)的升級與回滾

服務(wù)升級操作:

[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
<h2>hello lvzhenjiang:v2</h2>
//可以通過測試訪問的方式進(jìn)行驗(yàn)證
[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資源的信息進(jìn)行查看
[root@master v3]# kubectl describe deployments. nginx
//也可以通過查看nginx資源的詳細(xì)信息進(jìn)行查看

查詢結(jié)果如下:
K8s資源對象的基本管理之使用命令行的方式(升級、回滾、擴(kuò)容、縮容)

[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
//根據(jù)顯示信息可以看出已經(jīng)升級成功

服務(wù)回滾操作:

[root@master v3]# kubectl rollout undo deployment nginx
//對nginx資源進(jìn)行回滾操作
[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
//從查詢結(jié)果中可以查看已經(jīng)回滾到上一個版本
[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
//再次執(zhí)行回滾操作,發(fā)現(xiàn)又回到版本3

由此可以看出在k8s集群中版本的升級、回滾操作與docker swarm中差不多一致!

但是在k8s中回滾操作可以通過回滾到指定的版本,在以后的博文中會介紹到!

————————本文到此為止,感謝閱讀————————

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI