K8S的名称空间创建&&版本的升级、回滚操作
K8S的名称空间创建&&版本的升级、回滚操作
1、创建私有仓库
[root@docker-k8s01 ~]# docker run -itd --name registry -p 5000:5000 --restart always registry:latest#在所有需要使用私有仓库的docker主机上添加如下配置[root@docker-k8s01 ~]# vim /usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.171.151:5000#修改完文件后重启使之生效[root@docker-k8s01 ~]# systemctl daemon-reload [root@docker-k8s01 ~]# systemctl restart docker
2、在master节点,自定义一个镜像,基于nginx镜像,默认界面内容改为:Version:v1,版本2内容为:Version:v2.版本3内容为:Version:v3
#编写dockerfile文件[root@docker-k8s01 ~]# vim DockerfileFROM nginx ADD index.html /usr/share/nginx/html#编辑v1版本的首页内容[root@docker-k8s01 ~]# echo "Version:v1" > index.html#制作v1版本的镜像[root@docker-k8s01 ~]# docker build -t 192.168.171.151:5000/zyz:v1 .#制作v2版本的镜像[root@docker-k8s01 ~]# echo "Version:v2" > index.html[root@docker-k8s01 ~]# docker build -t 192.168.171.151:5000/zyz:v2 .#制作v3版本的镜像[root@docker-k8s01 ~]# echo "Version:v3" > index.html [root@docker-k8s01 ~]# docker build -t 192.168.171.151:5000/zyz:v3 .#将制作好的三个版本的镜像上传至私有仓库[root@docker-k8s01 ~]# docker push 192.168.171.151:5000/zyz:v1 [root@docker-k8s01 ~]# docker push 192.168.171.151:5000/zyz:v2[root@docker-k8s01 ~]# docker push 192.168.171.151:5000/zyz:v3
创建一个Namespace.接下来的所有操作都在此名称空间之下
[root@docker-k8s01 ~]# mkdir test[root@docker-k8s01 ~]# cd test/[root@docker-k8s01 test]# vim ns.yamlapiVersion: v1 kind: Namespace metadata: name: zyz [root@docker-k8s01 test]# kubectl apply -f ns.yaml # 运行yaml文件namespace/zyz created [root@docker-k8s01 test]# kubectl get ns zyz # 查看创建的namespaceNAME STATUS AGE zyz Active 30s
创建一个Deployment资源对象,镜像版本为v1
[root@docker-k8s01 test]# vim zyz.yamlapiVersion: extensions/v1beta1 kind: Deployment metadata: name: zyz namespace: zyz spec: revisionHistoryLimit: 5 # 规定记录多少个版本,这个字段通过 kubectl explain deploy.spec 命令找到revisionHistoryLimit <integer>行获得 replicas: 2 template: metadata: labels: name: zyz spec: containers: - name: zyz image: 192.168.171.151:5000/zyz:v1 # 镜像版本为1 ports: - containerPort: 80#执行该yaml文件, --record表示记录版本历史[root@docker-k8s01 test]# kubectl apply -f zyz.yaml --record [root@docker-k8s01 test]# kubectl get pod # 查看上面yaml文件运行的podNo resources found.#可以得出结论,如果在编写yaml文件时,指定了归属于哪个namespace,#那么执行上面的命令是查看不到运行的pod的,而不是没有运行的pod[root@docker-k8s01 test]# kubectl get pod -n zyz # 增加“-n”选项,指定名称空间,即可看对应的podNAME READY STATUS RESTARTS AGE zyz-5d7cb64655-9pdcj 1/1 Running 0 98s zyz-5d7cb64655-zzqcv 1/1 Running 0 98s#查看zyz的namespace名称空间的名为zyz的deployment资源对象[root@docker-k8s01 test]# kubectl rollout history deployment -n zyz zyz deployment.extensions/zyz REVISION CHANGE-CAUSE 1 kubectl apply --filename=zyz.yaml --record=true#可以看到当前只有一个版本,也可以看到filename(文件名称)
创建一个Service资源对象,关联到上面的Deployment资源对象
[root@docker-k8s01 test]# vim zyz-svc.yamlapiVersion: v1 kind: Service metadata: name: zyz-service namespace: zyz spec: type: NodePort selector: name: zyz ports: - name: zyz-port port: 8080 # service的IP接口 targetPort: 80 # pod的端口 nodePort: 31111 # 映射到宿主机的端口[root@docker-k8s01 test]# kubectl apply -f zyz-svc.yaml [root@docker-k8s01 test]# kubectl get svc # 若不指定名称空间,是查不到对应的service的NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 9d [root@docker-k8s01 test]# kubectl get svc -n zyz # 使用“-n”选项查看指定的名称空间中的serviceNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE zyz-service NodePort 10.100.89.145 <none> 8080:31111/TCP 55s
注意:创建的service资源对象必须和创建的deployment资源对象在同一个namespace中,否则无法进行关联!!!
客户端访问k8s群集中的任意一个节点的31111端口访问其pod提供的服务
如果需要在线修改pod提供的网页文件,可以先查看到pod的name,然后直接在主节点上登录到此pod即可,命令如下
[root@docker-k8s01 httpd-web]# kubectl get pod -o wide #查看pod的nameNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES httpd-devploy1-6f987c9764-5g92w 1/1 Running 0 8m35s 10.244.1.5 node01 <none> <none> httpd-devploy1-6f987c9764-wvgft 1/1 Running 0 [root@docker-k8s01 httpd-web]# kubectl exec -it httpd-devploy1-6f987c9764-5g92w /bin/bash #通过指定pod的name,进入pod
现在由1版本,滚动更新至2版本、再到3版本,最后回滚到指定1版本内容
[root@docker-k8s01 test]# sed -i 's/zyz:v1/zyz:v2/' zyz.yaml # 更新为版本2[root@docker-k8s01 test]# kubectl apply -f zyz.yaml # 执行deployment.extensions/zyz configured # 配置成功#访问验证[root@docker-k8s01 test]# curl 192.168.171.151:31111Version:v2#查看历史版本[root@docker-k8s01 test]# kubectl rollout history deployment -n zyz zyz deployment.extensions/zyz REVISION CHANGE-CAUSE 1 kubectl apply --filename=zyz.yaml --record=true2 <none>#现在是有两个历史版本了#接下来再次升级并验证[root@docker-k8s01 test]# sed -i 's/zyz:v2/zyz:v3/' zyz.yaml [root@docker-k8s01 test]# kubectl apply -f zyz.yaml deployment.extensions/zyz configured#再次访问可以看到现在是版本3了[root@docker-k8s01 test]# curl 192.168.171.151:31111Version:v3#查看历史版本信息[root@docker-k8s01 test]# kubectl rollout history deployment -n zyz zyz deployment.extensions/zyz REVISION CHANGE-CAUSE 1 kubectl apply --filename=zyz.yaml --record=true2 <none> 3 <none>#接下来执行回滚操作#回滚到版本1,需要指定namespace,“--to-revision”是指定回滚到哪个版本[root@docker-k8s01 test]# kubectl rollout undo deployment -n zyz zyz --to-revision=1deployment.extensions/zyz rolled back [root@docker-k8s01 test]# curl 192.168.171.151:31111Version:v1 [root@docker-k8s01 test]# kubectl rollout history deployment -n zyz zyz#再次查看历史记录,发现版本1变成了版本4,之前的1已经没有了deployment.extensions/zyz REVISION CHANGE-CAUSE 2 <none> 3 <none> 4 kubectl apply --filename=zyz.yaml --record=true
©著作权归作者所有:来自51CTO博客作者张九冫的原创作品,如需转载,请注明出处,否则将追究法律责任
it资源教程 http://www.137zw.com/