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 nginx
ADD 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: v1
kind: Namespace
metadata:
  name: lvjianzhao
[root@master test]# kubectl apply -f ns.yaml     #运行yaml文件
namespace/lvjianzhao created
[root@master test]# kubectl get ns lvjianzhao     #查看建立的namespace。
NAME         STATUS   AGE
lvjianzhao   Active   11s

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

[root@master test]# vim lvjianzhao.yaml      #编写yaml文件

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: lvjianzhao
  namespace: lvjianzhao
spec:
  revisionHistoryLimit: 5           #规定记录多少个版本,这个字段经过 kubectl explain deploy.spec  命令找到revisionHistoryLimit <integer>行得到
  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文件运行的pod
No resources found.
#能够得出结论,若是在编写yaml文件时,指定了归属于哪一个namespace,
#那么执行上面的命令是查看不到运行的pod的,而不是没有运行的pod
[root@master test]# kubectl get pod -n lvjianzhao    #增长“-n”选项,指定名称空间,便可看对应的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资源对象
deployment.extensions/lvjianzhao 
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=lvjianzhao.yaml --record=true
#能够看到当前只有一个版本

3)建立一个Service资源对象,关联到上面的Deployment资源对象。

[root@master test]# vim ljz-svc.yaml    #建立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          #这是映射到宿主机的端口
[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)   AGE
kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   4d1h
[root@master test]# kubectl get svc -n lvjianzhao   #使用“-n”选项查看指定的名称空间中的service
NAME                 TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
lvjianzhao-service   NodePort   10.104.119.94   <none>        8080:31111/TCP   111s

注意:建立的service资源对象必须和建立的deployment资源对象在同一个namespace中,不然没法进行关联!!!node

如今客户端就能够访问k8s群集中的任意一个节点的31111端口访问其pod提供的服务了,以下:
K8S的名称空间建立&&版本的升级、回滚操做(回滚到指定版本)nginx

若是须要在线修改pod提供的网页文件,能够先查看到pod的name,而后直接在主节点上登陆到此pod便可,命令以下:web

[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   <none>           <none>
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-CAUSE
1         kubectl apply --filename=lvjianzhao.yaml --record=true
2         <none>
#如今是有两个历史版本了
#接下来再次升级并验证
[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-CAUSE
1         kubectl apply --filename=lvjianzhao.yaml --record=true
2         <none>
3         <none>
#如今执行回滚操做:
[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-CAUSE
2         <none>
3         <none>
4         kubectl apply --filename=lvjianzhao.yaml --record=true
相关文章
相关标签/搜索