千家信息网

K8S的名称空间创建&&版本的升级、回滚操作(回滚到指定版本)

发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,创建一个私有仓库。#运行一个registry容器[root@master ~]# docker run -tid --name registry -p 5000:5000 --restart alwa
千家信息网最后更新 2025年02月07日K8S的名称空间创建&&版本的升级、回滚操作(回滚到指定版本)
创建一个私有仓库。
#运行一个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#修改上述配置项,指定私有仓库的监听地址及端口[root@master ~]# systemctl daemon-reload [root@master ~]# systemctl restart docker
1)在master节点,自定义一个镜像,基于nginx镜像,默认界面内容改为:Version:v1,版本2内容为:Version:v2.版本3内容为:Version:v3
[root@master test]# vim Dockerfile       #编写dockerfile文件FROM nginxADD index.html /usr/share/nginx/html/[root@master test]# echo "Version:v1" > index.html   #编辑版本1的首页[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 .#将上面三个镜像上传至私有仓库[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
2)创建一个Namespace.接下来的所有操作都在此名称空间之下。
[root@master test]# vim ns.yaml      #编写yaml文件apiVersion: v1kind: Namespacemetadata:  name: lvjianzhao[root@master test]# kubectl apply -f ns.yaml     #运行yaml文件namespace/lvjianzhao created[root@master test]# kubectl get ns lvjianzhao     #查看创建的namespace。NAME         STATUS   AGElvjianzhao   Active   11s

创建一个Deployment资源对象。镜像版本为v1。

[root@master test]# vim lvjianzhao.yaml      #编写yaml文件apiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: lvjianzhao  namespace: lvjianzhaospec:  revisionHistoryLimit: 5           #规定记录多少个版本,这个字段通过 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  #执行该yaml文件,  --record表示记录版本历史[root@master test]# kubectl get pod  #查看上面yaml文件运行的podNo resources found.#可以得出结论,如果在编写yaml文件时,指定了归属于哪个namespace,#那么执行上面的命令是查看不到运行的pod的,而不是没有运行的pod[root@master test]# kubectl get pod -n lvjianzhao    #增加"-n"选项,指定名称空间,即可看对应的podNAME                         READY   STATUS    RESTARTS   AGElvjianzhao-865d4b6b6-2mlcj   1/1     Running   0          101slvjianzhao-865d4b6b6-7kbnb   1/1     Running   0          101s[root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao #查看lvjianzhao的namespace名称空间的名为lvjianzhao的deployment资源对象deployment.extensions/lvjianzhao REVISION  CHANGE-CAUSE1         kubectl apply --filename=lvjianzhao.yaml --record=true#可以看到当前只有一个版本
3)创建一个Service资源对象,关联到上面的Deployment资源对象。
[root@master test]# vim ljz-svc.yaml    #创建service的yaml文件apiVersion: v1kind: Servicemetadata:  name: lvjianzhao-service  namespace: lvjianzhaospec:  type: NodePort  selector:    name: lvjianzhaoa  ports:  - name: lvjianzhao-port    port: 8080    #这是service的IP端口    targetPort: 80     #这是pod的端口    nodePort: 31111          #这是映射到宿主机的端口[root@master test]# kubectl apply -f ljz-svc.yaml   #执行yaml文件service/lvjianzhao-service created[root@master test]# kubectl get svc         #同理,若不指定名称空间,是查不到对应的service的NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGEkubernetes   ClusterIP   10.96.0.1            443/TCP   4d1h[root@master test]# kubectl get svc -n lvjianzhao   #使用"-n"选项查看指定的名称空间中的serviceNAME                 TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGElvjianzhao-service   NodePort   10.104.119.94           8080:31111/TCP   111s

注意:创建的service资源对象必须和创建的deployment资源对象在同一个namespace中,否则无法进行关联!!!

现在客户端就可以访问k8s群集中的任意一个节点的31111端口访问其pod提供的服务了,如下:

如果需要在线修改pod提供的网页文件,可以先查看到pod的name,然后直接在主节点上登录到此pod即可,命令如下:

[root@master httpd-web]# kubectl get pod -o wide       #查看pod的nameNAME                              READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATEShttpd-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,进入pod
现在由1版本,滚动更新至2版本、再到3版本,最后回滚到指定1版本内容。
[root@master test]# sed -i 's/ljz:v1/ljz:v2/' lvjianzhao.yaml   #更改为版本2[root@master test]# kubectl apply -f lvjianzhao.yaml    #执行deployment.extensions/lvjianzhao configured[root@master test]# curl 127.0.0.1:31111    #访问验证Version:v2[root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao #再次查看历史版本deployment.extensions/lvjianzhao REVISION  CHANGE-CAUSE1         kubectl apply --filename=lvjianzhao.yaml --record=true2         #现在是有两个历史版本了#接下来再次升级并验证[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     #现在是版本3了Version:v3[root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao #查看历史版本信息deployment.extensions/lvjianzhao REVISION  CHANGE-CAUSE1         kubectl apply --filename=lvjianzhao.yaml --record=true2         3         #现在执行回滚操作:[root@master test]# kubectl rollout undo deployment -n lvjianzhao lvjianzhao --to-revision=1   #回滚到版本1,需要指定namespace,"--to-revision"是指定回滚到哪个版本deployment.extensions/lvjianzhao rolled back[root@master test]# curl 127.0.0.1:31111   #验证Version:v1[root@master test]# kubectl rollout history deployment -n lvjianzhao lvjianzhao #再次查看历史记录,发现版本1变成了版本4。deployment.extensions/lvjianzhao REVISION  CHANGE-CAUSE2         3         4         kubectl apply --filename=lvjianzhao.yaml --record=true
0