您好,登錄后才能下訂單哦!
當我們執行創建資源的命令后,deployment這個控制器會通過replicaset控制器去管理pod,下面通過一個實例來分析,當我們執行創建資源的命令后,k8s都做了些什么(通過其NAME即可發現規律)?
[root@master ~]# kubectl run test01 --image=nginx:latest --replicas=2
#運行一個nginx容器,指定副本數量為2個
[root@master ~]# kubectl get deployments. #查看deployment控制器
NAME READY UP-TO-DATE AVAILABLE AGE
test01 2/2 2 2 48s
#可以看到deployment的name是我們指定的test01
[root@master ~]# kubectl get replicasets. #然后查看replicasets這個控制器
#注:replicasets可以簡寫為“rs”
NAME DESIRED CURRENT READY AGE
test01-799bb6cd4d 2 2 2 119s
#可以看到replicasets的NAME就是在deployment的NAME后面追加了一串ID號
[root@master ~]# kubectl get pod #查看pod的name
NAME READY STATUS RESTARTS AGE
test01-799bb6cd4d-d88wd 1/1 Running 0 3m18s
test01-799bb6cd4d-x8wpm 1/1 Running 0 3m18s
#可以看到該pod的NAME就是在上面replicasets的后面又追加了一段ID
同時,可以查看每一個資源對象的詳細信息,來驗證上面的說法,如下:
[root@master ~]# kubectl describe deployments test01 #查看test01的詳細信息
返回的信息如下,可以看到其生成了一個新的replicasets控制器,如下:
那么,現在查看其replicasets詳細信息,如下:
如果需要client來訪問k8s部署的服務,那么需要創建一個service資源對象,并且其類型必須是NodePort,客戶端通過訪問service這個資源對象映射的端口,與k8s集群中的proxy進行聯系,以便訪問到部署的服務。
[root@master ~]# kubectl run test02 --image=nginx:latest --port=80 --replicas=2
#基于nginx鏡像創建deployment資源對象,映射容器的80端口到宿主機
[root@master ~]# kubectl expose deployment test02 --name=web01 --port=80 --type=NodePort
#創建一個service,將部署的test02的80端口映射出來
[root@master ~]# kubectl get svc web01 #查看創建的web01這個service的信息
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
web01 NodePort 10.103.223.105 <none> 80:30230/TCP 86s
#可以看到將部署的服務端口映射到了宿主機的30230,
客戶端訪問k8s群集中的任意一個節點的30230端口,都可以訪問到服務的首頁,如下:
#搭建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
#將修改后的配置文件發送到k8s群集中的其他節點
[root@master ~]# scp /usr/lib/systemd/system/docker.service root@node01:/usr/lib/systemd/system/
[root@master ~]# scp /usr/lib/systemd/system/docker.service root@node02:/usr/lib/systemd/system/
#所有更改了docker配置文件的節點都需要進行以下操作,以便更改生效
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
#制作自定義鏡像
[root@master ~]# vim Dockerfile
FROM nginx:latest
ADD index.html /usr/share/nginx/html/
[root@master ~]# echo "hello k8s" > index.html
[root@master ~]# docker build -t 192.168.20.6:5000/nginx:1.10 .
[root@master ~]# docker push 192.168.20.6:5000/nginx:1.10 #上傳至私有倉庫
#基于自定義鏡像運行一個Deployment資源對象,replicas數量為4個。
[root@master ~]# kubectl run test03 --image=192.168.20.6:5000/nginx:1.10 --port=80 --replicas=4
[root@master ~]# kubectl get pod -o wide | grep test03 | awk '{print $6}' #查看四個副本的IP地址
10.244.2.20
10.244.1.18
10.244.1.19
10.244.2.21
#接下來在k8s群集內部訪問該上述四個任意IP,即可看到其提供的服務,如下:
#訪問測試
[root@master ~]# curl 10.244.2.21
hello k8s
[root@master ~]# curl 10.244.2.20
hello k8s
#更新鏡像并上傳至私有倉庫
[root@master ~]# echo "Hello update" > index.html
[root@master ~]# docker build -t 192.168.20.6:5000/nginx:2.20 .
[root@master ~]# docker push 192.168.20.6:5000/nginx:2.20
#更新資源對象,進行擴容
[root@master ~]# kubectl set image deployment test03 test03=192.168.20.6:5000/nginx:2.20 && kubectl scale deployment test03 --replicas=6
#查看pod的IP地址
[root@master ~]# kubectl get pod -o wide | grep test03 | awk '{print $6}'
10.244.2.24
10.244.2.22
10.244.1.21
10.244.2.23
10.244.1.22
10.244.1.20
#訪問測試
[root@master ~]# curl 10.244.1.20
Hello update
[root@master ~]# curl 10.244.1.22
Hello update
[root@master ~]# kubectl rollout undo deployment test03 #執行回滾操作
[root@master ~]# kubectl get pod -o wide | grep test03 | wc -l
#查看replicas的數量還是6個
6
#訪問測試
[root@master ~]# kubectl get pod -o wide | grep test03 | awk '{print $6}'
10.244.1.23
10.244.2.27
10.244.1.24
10.244.1.25
10.244.2.26
10.244.2.25
[root@master ~]# curl 10.244.2.25
hello k8s
[root@master ~]# curl 10.244.2.26
hello k8s
———————— 本文至此結束,感謝閱讀 ————————
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。