Kubernetes(二)
Controller
Controller是在集群上管理和运行容器的对象.Controller是实际存在的,Pod是虚拟机的.
Pod和Controller的关系
Pod通过Controller实现应用的运维.比如弹性伸缩,滚动升级等.
Pod 和 Controller 之间是通过label标签来建立关系的,同时Controller又被称为控制器工作负载.
Deployment控制器应用
- deployment可以部署 无状态应用
- 管理 Pod 和 ReplicaSet
- 部署、滚动升级等功能
- 应用场景: 微服务、web服务
Deployment表示用户对K8S集群的一次更新操作.Deployment是一个比RS(ReplicaSet)应用模型更广的API对象.
Deployment部署应用
使用Deployment部署应用
1 | kubectl create deployment web --image=nginx |
使用YAML进行配置
尝试使用代码创建一个镜像
1 | kubectl create deployment web --image=nginx --dry-run -o yaml > nginx.yaml |
输出yaml配置文件.nginx.yaml
1 | apiVersion: apps/v1 |
selector 和 label 就是我们Pod 和 Controller之间建立关系的桥梁
使用yaml创建Pod
生成yaml文件之后,就可以通过该配置文件快速创建Pod对象
1 | kubectl apply -f nginx.yaml |
但是这个方式创建的,只能在集群内部进行访问,所以还需要对外暴露端口
1 | kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 |
参数说明:
1 | --port 内部的端口号 |
导出对应的配置文件
1 | kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml |
得到web1.yaml
然后通过下面的命令查看对外暴露的服务.
1 | kubectl get pods,svc |
访问对应的 url,即可看到 nginx
升级回滚和弹性伸缩
- 升级: 假设版本从1.0升级到1.1 这就是应用的升级,升级过程可以保证应用不中断.
- 回滚: 从版本1.1回滚到1.0,这就叫应用回滚.
- 弹性伸缩: 我们根据不同的业务场景,来改变Pod数量对外提供服务.这就是弹性伸缩.
应用升级和回滚
首先创建一个1.0版本的Pod
1 | apiVersion: apps/v1 |
指定版本为1.0,然后开始创建Pod
1 | kubectl apply -f nginx.yaml |
docker images命令拉取1.0
将nginx从1.0升级到1.1
1 | kubectl set image deployment web nginx=nginx:1.1 |