k8s、控制器模式解析、定义多少个副本、卷挂载、滚动更新、版本回滚
文章目录控制器模式解析项目:Nginx使用卷挂载滚动更新第一种方法:第二种方法版本回滚第一种方法版本升级第二种方法第三种方法控制器模式解析创建一个pod,有俩个副本,最简单的例1:apiVersion: apps/v1kind: Deploymentmetadata:name: nginx-deploymentspec:selector:matchLabels:app: nginxreplicas
控制器模式解析
创建一个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
更多推荐
所有评论(0)