#運(yùn)行一個(gè)registry容器
[root@master ~]# docker run -tid --name registry -p 5000:5000 --restart always registry:latest
#在所有需要使用私有倉(cāng)庫(kù)的的節(jié)點(diǎn)上進(jìn)行以下配置:
[root@master ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.20.6:5000
#修改上述配置項(xiàng),指定私有倉(cāng)庫(kù)的監(jiān)聽地址及端口
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker
[root@master test]# vim Dockerfile #編寫dockerfile文件
FROM nginx
ADD index.html /usr/share/nginx/html/
[root@master test]# echo "Version:v1" > index.html #編輯版本1的首頁(yè)
[root@master test]# docker build -t 192.168.20.6:5000/ljz:v1 . #制作版本1的鏡像
#制作版本2的鏡像
[root@master test]# echo "Version:v2" > index.html
[root@master test]# docker build -t 192.168.20.6:5000/ljz:v2 .
#制作版本3的鏡像
[root@master test]# echo "Version:v3" > index.html
[root@master test]# docker build -t 192.168.20.6:5000/ljz:v3 .
#將上面三個(gè)鏡像上傳至私有倉(cāng)庫(kù)
[root@master test]# docker push 192.168.20.6:5000/ljz:v1
[root@master test]# docker push 192.168.20.6:5000/ljz:v2
[root@master test]# docker push 192.168.20.6:5000/ljz:v3
[root@master test]# vim ns.yaml #編寫yaml文件
apiVersion: v1
kind: Namespace
metadata:
name: lvjianzhao
[root@master test]# kubectl apply -f ns.yaml #運(yùn)行yaml文件
namespace/lvjianzhao created
[root@master test]# kubectl get ns lvjianzhao #查看創(chuàng)建的namespace。
NAME STATUS AGE
lvjianzhao Active 11s
創(chuàng)建一個(gè)Deployment資源對(duì)象。鏡像版本為v1。
成都創(chuàng)新互聯(lián)專注于印臺(tái)企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站定制開發(fā)。印臺(tái)網(wǎng)站建設(shè)公司,為印臺(tái)等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站策劃,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
[root@master test]# vim lvjianzhao.yaml #編寫yaml文件
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: lvjianzhao
namespace: lvjianzhao
spec:
revisionHistoryLimit: 5 #規(guī)定記錄多少個(gè)版本,這個(gè)字段通過 kubectl explain deploy.spec 命令找到revisionHistoryLimit 行獲得
replicas: 2
template:
metadata:
labels:
name: lvjianzhaoa
spec:
containers:
- name: lvjianzhao
image: 192.168.20.6:5000/ljz:v1 #鏡像版本為1
ports:
- containerPort: 80
[root@master test]# kubectl apply -f lvjianzhao.yaml --record #執(zhí)行該yaml文件, --record表示記錄版本歷史
[root@master test]# kubectl get pod #查看上面yaml文件運(yùn)行的pod
No resources found.
#可以得出結(jié)論,如果在編寫yaml文件時(shí),指定了歸屬于哪個(gè)namespace,
#那么執(zhí)行上面的命令是查看不到運(yùn)行的pod的,而不是沒有運(yùn)行的pod
[root@master test]# kubectl get pod -n lvjianzhao #增加“-n”選項(xiàng),指定名稱空間,即可看對(duì)應(yīng)的pod
NAME READY STATUS RESTARTS AGE
lvjianzhao-865d4b6b6-2mlcj 1/1 Running 0 101s
lvjianzhao-865d4b6b6-7kbnb 1/1 Running 0 101s
[root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao
#查看lvjianzhao的namespace名稱空間的名為lvjianzhao的deployment資源對(duì)象
deployment.extensions/lvjianzhao
REVISION CHANGE-CAUSE
1 kubectl apply --filename=lvjianzhao.yaml --record=true
#可以看到當(dāng)前只有一個(gè)版本
[root@master test]# vim ljz-svc.yaml #創(chuàng)建service的yaml文件
apiVersion: v1
kind: Service
metadata:
name: lvjianzhao-service
namespace: lvjianzhao
spec:
type: NodePort
selector:
name: lvjianzhaoa
ports:
- name: lvjianzhao-port
port: 8080 #這是service的IP端口
targetPort: 80 #這是pod的端口
nodePort: 31111 #這是映射到宿主機(jī)的端口
[root@master test]# kubectl apply -f ljz-svc.yaml #執(zhí)行yaml文件
service/lvjianzhao-service created
[root@master test]# kubectl get svc #同理,若不指定名稱空間,是查不到對(duì)應(yīng)的service的
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 443/TCP 4d1h
[root@master test]# kubectl get svc -n lvjianzhao #使用“-n”選項(xiàng)查看指定的名稱空間中的service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
lvjianzhao-service NodePort 10.104.119.94 8080:31111/TCP 111s
注意:創(chuàng)建的service資源對(duì)象必須和創(chuàng)建的deployment資源對(duì)象在同一個(gè)namespace中,否則無法進(jìn)行關(guān)聯(lián)?。?!
現(xiàn)在客戶端就可以訪問k8s群集中的任意一個(gè)節(jié)點(diǎn)的31111端口訪問其pod提供的服務(wù)了,如下:
如果需要在線修改pod提供的網(wǎng)頁(yè)文件,可以先查看到pod的name,然后直接在主節(jié)點(diǎn)上登錄到此pod即可,命令如下:
[root@master httpd-web]# kubectl get pod -o wide #查看pod的name
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
httpd-devploy1-6f987c9764-5g92w 1/1 Running 0 8m35s 10.244.1.5 node01
httpd-devploy1-6f987c9764-wvgft 1/1 Running 0
[root@master httpd-web]# kubectl exec -it httpd-devploy1-6f987c9764-5g92w /bin/bash #通過指定pod的name,進(jìn)入pod
[root@master test]# sed -i 's/ljz:v1/ljz:v2/' lvjianzhao.yaml #更改為版本2
[root@master test]# kubectl apply -f lvjianzhao.yaml #執(zhí)行
deployment.extensions/lvjianzhao configured
[root@master test]# curl 127.0.0.1:31111 #訪問驗(yàn)證
Version:v2
[root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao
#再次查看歷史版本
deployment.extensions/lvjianzhao
REVISION CHANGE-CAUSE
1 kubectl apply --filename=lvjianzhao.yaml --record=true
2
#現(xiàn)在是有兩個(gè)歷史版本了
#接下來再次升級(jí)并驗(yàn)證
[root@master test]# sed -i 's/ljz:v2/ljz:v3/' lvjianzhao.yaml
[root@master test]# kubectl apply -f lvjianzhao.yaml
[root@master test]# curl 127.0.0.1:31111 #現(xiàn)在是版本3了
Version:v3
[root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao
#查看歷史版本信息
deployment.extensions/lvjianzhao
REVISION CHANGE-CAUSE
1 kubectl apply --filename=lvjianzhao.yaml --record=true
2
3
#現(xiàn)在執(zhí)行回滾操作:
[root@master test]# kubectl rollout undo deployment -n lvjianzhao lvjianzhao --to-revision=1
#回滾到版本1,需要指定namespace,“--to-revision”是指定回滾到哪個(gè)版本
deployment.extensions/lvjianzhao rolled back
[root@master test]# curl 127.0.0.1:31111 #驗(yàn)證
Version:v1
[root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao
#再次查看歷史記錄,發(fā)現(xiàn)版本1變成了版本4。
deployment.extensions/lvjianzhao
REVISION CHANGE-CAUSE
2
3
4 kubectl apply --filename=lvjianzhao.yaml --record=true