控制器模式解析

创建一个pod,有俩个副本,最简单的

例1:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

kube-controller-manager 组件:这个组件,就是一系列控制器的集合
所有控制器:

deployment             job                   podautoscaler          
cloud                  disruption             namespace              
replicaset             serviceaccount         volume
cronjob                garbagecollector       nodelifecycle          replication            statefulSet            daemonSet

项目:Nginx使用卷挂载

可以把你宿主机想要挂在的文件,映射到容器里面
1.node1节点创建将要挂载目录,并写index.html

[root@k8s-node1 ~]# mkdir /var/data
[root@k8s-node1 ~]# cat /var/data/index.html 

在这里插入图片描述
2.创建deployment

[root@k8s-master prome]# cat nginx-dep1.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeName: k8s-node1		#必须指定调度到node1上,因为node1上才有/var/data目录
      containers:
      - name: nginx
        image: daocloud.io/library/nginx
        ports:
        - containerPort: 80
        volumeMounts:  #定义挂载卷
        - mountPath: "/usr/share/nginx/html"
          name: nginx-vol
      volumes:   #定义共享卷
      - name: nginx-vol
        hostPath:
          path: /var/data

3.创建service

[root@k8s-master prome]# cat nginx_svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: NodePort
  ports:
    - port: 8081
      nodePort: 30010
      targetPort: 80
  selector:
    app: nginx

4.访问测试
在这里插入图片描述

滚动更新

概念:

将一个集群中正在运行的多个 Pod 版本,交替地逐一升级的过程,就是"滚动更新"。
比如说pod副本一开始创建的是3个,可以进行增删

第一种方法:

随便运行起来一个pod

apiVersion: apps/v1
kind: Deployment
metadata:
  name: dep01
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
      metadata:
        name: testnginx9
        labels:
          app: nginx
      spec:
        containers:
          - name: testnginx9
            image: daocloud.io/library/nginx:1.12.0-alpine
            ports:
              - containerPort: 80

副本是2个
在这里插入图片描述
运行起来查看俩个pod
在这里插入图片描述
将dep01的副本将2变为3个

[root@kub-k8s-master prome]# kubectl edit deployment/dep01

在这里插入图片描述
再次查看变成3个

[root@k8s-mastet banben]# kubectl get deploy
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
dep01   3/3     3            3           2m51s

减少的话是直接修改成2既可以,这个中间客户是无感知的,也不用从新创建

第二种方法

修改文件 vim nginx.yml
在这里插入图片描述
需要从新运行一下

kubectl apply -f nginx.yml

测试查看
在这里插入图片描述

版本回滚

先随便运行起来一个容器,我这里举例子nginx版本是,1.120
进去查看版本

[root@k8s-mastet banben]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
dep01-75fc9ff55c-dph4f   1/1     Running   0          7m42s
[root@k8s-mastet banben]# kubectl exec -it dep01-75fc9ff55c-dph4f /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ #

在这里插入图片描述
node节点上面先去拉去,要替换的版本
在这里插入图片描述

第一种方法版本升级

先查看自己的副本名称

[root@k8s-mastet banben]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
dep01-75fc9ff55c-dph4f   1/1     Running   0          13m
[root@k8s-mastet banben]# kubectl get  deploy
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
dep01   1/1     1            1           14m
[root@k8s-mastet banben]# kubectl edit deploy dep01

修改成你想替换的版本
在这里插入图片描述
登录查看版本

[root@k8s-mastet banben]# kubectl get pod
NAME                     READY   STATUS    RESTARTS   AGE
dep01-7f66f44c47-nlszb   1/1     Running   0          36s
[root@k8s-mastet banben]# kubectl exec -it dep01-7f66f44c47-nlszb  /bin/sh

在这里插入图片描述

第二种方法

修改配置文件
vim nginx.yml
在这里插入图片描述
需要从新运行一下

[root@k8s-mastet banben]# kubectl apply -f nginx.yml
deployment.apps/dep01 configured

登录测试查看

[root@k8s-mastet banben]# kubectl exec -it dep01-75fc9ff55c-c7qm7  /bin/sh

在这里插入图片描述

第三种方法

回滚到更早之前的版本:

​ 把整个 Deployment 回滚到上一个版本:
使用 kubectl rollout history 命令查看每次 Deployment 变更对应的版本。

```bash
[root@kub-k8s-master prome]# kubectl rollout history deployment/dep01
deployment.apps/dep02 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>

由于在创建这个 Deployment 的时候,指定了–record 参数,所以创建这些版本时执行的 kubectl 命令,都会被记录下来。

[root@kub-k8s-master prome]# kubectl rollout history deployment/dep02 --revision=3
deployment.apps/dep02 with revision #3
Pod Template:
  Labels:	app=web1
	pod-template-hash=8594cd6447
  Containers:
   testnginx9:
    Image:	daocloud.io/library/nginx:1.14
    Port:	80/TCP
    Host Port:	0/TCP
    Environment:	<none>
    Mounts:	<none>
  Volumes:	<none> 

2.在 kubectl rollout undo 命令行最后,加上要回滚到的指定版本的版本号,就可以回滚到指定版本了。

[root@kub-k8s-master prome]# kubectl rollout undo deployment/dep02 --to-revision=2
deployment.apps/dep02 rolled back

验证:

[root@kub-k8s-master prome]# kubectl get pods
NAME                                READY   STATUS             RESTARTS   AGE
dep02-78dbd944fc-8nvxl              1/1     Running            0          86s
dep02-78dbd944fc-sb9sj              1/1     Running            0          88s
[root@kub-k8s-master prome]# kubectl exec -it dep02-78dbd944fc-8nvxl /bin/bash 
root@dep02-78dbd944fc-8nvxl:/# nginx -v
nginx version: nginx/1.13.1
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐