兩種創建資源的方法
基於命令的方式:
- 簡單直觀快捷,上手快。
- 適合臨時測試或實驗。
基於配置文件的方式:
- 配置文件描述了
What
,即應用最終要達到的狀態。 - 配置文件提供了創建資源的模板,能夠重複部署。
- 可以像管理代碼一樣管理部署。
- 適合正式的、跨環境的、規模化部署。
- 這種方式要求熟悉配置文件的語法,有一定難度。
一,用命令行的方式創建資源
主機 | IP地址 |
---|---|
master | 192.168.1.21 |
node01 | 192.168.1.22 |
node02 | 192.168.1.23 |
僅接受json格式
配置清單(yml、yaml)
[root@master ~]# cd /etc/kubernetes/manifests/
//k8s的yml、yaml文件
1.node01和node02下載nginx鏡像
docker pull nginx
//下載nginx鏡像
2.master創建Pod控制器(test-web),deployment
[root@master ~]# kubectl run test-web --image=nginx --replicas=5
//創建Pod控制器,deployment
3.查看控制器情況
(1)
[root@master ~]# kubectl get deployments.
//查看控制器情況
[root@master ~]# kubectl get pod --all-namespaces -o wide
//顯示pod的節點信息
(2)
[root@master ~]# kubectl get namespaces
//查看k8s名稱空間
[root@master ~]# kubectl describe deployments. test-web
//查看資源詳細信息
查看某種資源對象,沒有指定名稱空間,默認是在default名稱空間。可以加上-n選項,查看指定名稱空間的資源。
[root@master ~]# kubectl get pod -n kube-system
3.刪除test-web控制器
[root@master ~]# kubectl delete deployments. test-web
4.master創建Pod控制器(web),deployment
[root@master ~]# kubectl run web --image=nginx --replicas=5
查看一下pod信息
[root@master ~]# kubectl get pod -o wide
//查看一下pod的節點信息
[root@master ~]# kubectl describe deployments. web
//查看資源詳細信息
注意:直接運行創建的deployment資源對象,是經常使用的一個控制器資源類型,除了deployment,還有rc、rs等等pod控制器,deployment是一個高級的pod控制器。
本機測試訪問nginx
[root@master ~]# curl 10.244.1.7
5.創建service資源類型
[root@master ~]# kubectl expose deployment web --name=web-xgp --port=80 --type=NodePort
//創建service資源類型,這裏我們設置了映射端口
如果想要外網能夠訪問服務,可以暴露deployment資源,得到service資源,但svc資源的類型必須爲NodePort。
映射端口範圍:30000-32767
查看service信息
[root@master ~]# kubectl get svc
瀏覽器測試訪問http://192.168.1.21:30493/
二、服務的擴容與縮容
1. 查看控制器信息
[root@master ~]# kubectl get deployments. -o wide
2.擴容
[root@master ~]# kubectl scale deployment web --replicas=8
查看一下
[root@master ~]# kubectl get deployments. -o wide
3.縮容
[root@master ~]# kubectl scale deployment web --replicas=4
查看一下
[root@master ~]# kubectl get deployments. -o wide
3.通過修改web的yaml文件進行擴容縮容
備份web的yaml文件
[root@master ~]# kubectl get deployments. -o yaml > web.yaml
使用edit修改web的yaml文件
[root@master ~]# kubectl edit deployments. web
查看一下
[root@master ~]# kubectl get deployments. -o wide
三、服務的升級與回滾
node01和node02下載1.15版本的nginx
[root@master ~]# docker pull nginx:1.15
1.master設置服務升級
[root@master ~]# kubectl set image deployment web web=nginx:1.15
查看一下
2.master設置服務回滾
(1)修改配置文件回滾
使用edit修改web的yaml文件
[root@master ~]# kubectl edit deployments. web
查看一下
[root@master ~]# kubectl get deployments. -o wide
(2)命令回滾
[root@master ~]# kubectl rollout undo deployment web
注意:只能回滾到上一次操作的狀態
四、小實驗
實驗環境
主機 | IP地址 | 服務 |
---|---|---|
master | 192.168.1.21 | registry+Deployment |
node01 | 192.168.1.22 | |
node02 | 192.168.1.23 |
1.master 基於httpd製作自己的鏡像,需要3個版本,v1,v2,v3.並且對應的版本鏡像,訪問的主目錄內容不一樣
(1)master下載httpd鏡像
[root@master ~]# docker pull httpd
(2)編寫Dockerfile
[root@master xgp]# vim Dockerfile
FROM httpd
COPY index.html /usr/local/apache2/htdocs/index.html
(3)創建測試網頁v1
[root@master xgp]#echo "<h1>xgp | test-web | httpd:v1<h1>" > index.html
(4)基於Dockerfile創建鏡像 web1
[root@master xgp]# docker build -t web1 .
(5)創建測試網頁v2
[root@master xgp]#echo "<h1>xgp | test-web | httpd:v1<h1>" > index.html
(6)基於Dockerfile創建鏡像 web2
[root@master xgp]# docker build -t web2 .
(7)創建測試網頁v3
[root@master xgp]# echo "<h1>xgp | test-web | httpd:v3<h1>" > index.html
(8)基於Dockerfile創建鏡像 web3
[root@master xgp]# docker build -t web3 .
2.master部署私有倉庫
(1)master下載registry鏡像
[root@master ~]# docker pull registry
(2)啓動registry
[root@master xgp]# docker run -itd --name registry -p 5000:5000 --restart=always registry:latest
(3)修改docker配置文件,加入私有倉庫(三臺)
[root@master xgp]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.21:5000
(4)重啓docker(三臺)
[root@master xgp]# systemctl daemon-reload
[root@master xgp]# systemctl restart docker
3.上傳之前創建的三個web鏡像到私有倉庫
(1)修改鏡像標籤
[root@master xgp]# docker tag web1:latest 192.168.1.21:5000/web1:latest
[root@master xgp]# docker tag web2:latest 192.168.1.21:5000/web2:latest
[root@master xgp]# docker tag web3:latest 192.168.1.21:5000/web3:latest
(2)將三個web鏡像上傳到私有倉庫
[root@master xgp]# docker push 192.168.1.21:5000/web1:latest
[root@master xgp]# docker push 192.168.1.21:5000/web2:latest
[root@master xgp]# docker push 192.168.1.21:5000/web3:latest
4.部署一個Deployment資源對象,要求鏡像使用上述私有鏡像v1版本。6個副本Pod。
[root@master xgp]# kubectl run www1 --image=192.168.1.21:5000/web1:latest --replicas=6
查看一下
[root@master xgp]# kubectl get pod
5.將上述Deployment暴露一個service資源對象,使外網能否訪問服務。
[root@master xgp]# kubectl expose deployment www1 --name=web-xgp --port=80 --type=NodePort
查看一下
[root@master xgp]# kubectl get svc
瀏覽器訪問一下
6.將上述Deployment進行擴容和縮容操作,擴容爲8個副本Pod,然後縮容爲4個副本Pod。
(1)擴容
[root@master xgp]# kubectl scale deployment www1 --replicas=8
查看一下
[root@master xgp]# kubectl get deployments. -o wide
(2)縮容
修改k8s配置文件
備份web的yaml文件
[root@master ~]# kubectl get deployments. -o yaml > www1.yaml
使用edit修改web的yaml文件
[root@master ~]# kubectl edit deployments. www1
查看一下
[root@master xgp]# kubectl get deployments. -o wide
7.將上述Deployment進行升級與回滾操作,將v1版本,升級到v2版本。
(1)升級版本爲web2
[root@master ~]# kubectl set image deployment www1 www1=192.168.1.21:5000/web2
本機測試訪問
[root@master ~]# curl 127.0.0.1:30996
<h1>xgp | test-web | httpd:v2<h1>
瀏覽器測試訪問
(2)回滾版本到web1
<1>修改配置文件回滾
使用edit修改web的yaml文件
[root@master ~]# kubectl edit deployments. www1
查看一下
[root@master ~]# kubectl get deployments. -o wide
訪問一下
<2>命令回滾
[root@master ~]# kubectl rollout undo deployment www1
注意:只能回滾到上一次操作的狀態
訪問一下
____完畢____