Kubernetes(二)

Kubernetes(二)

Controller

Controller是在集群上管理和运行容器的对象.Controller是实际存在的,Pod是虚拟机的.

Pod和Controller的关系

Pod通过Controller实现应用的运维.比如弹性伸缩,滚动升级等.

Pod 和 Controller 之间是通过label标签来建立关系的,同时Controller又被称为控制器工作负载.

image-20210204145653827

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: web
name: web
spec:
replicas: 1
# selector
selector:
matchLabels:
app: web
strategy: {}
template:
metadata:
creationTimestamp: null
# labels
labels:
app: web
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}

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
2
3
4
--port 内部的端口号
--target-port 暴露给外部访问的端口号
--name 名称
--type 类型

导出对应的配置文件

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: web
name: web
spec:
replicas: 1
selector:
matchLabels:
app: web
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: web
spec:
containers:
- image: nginx:1.0
name: nginx
resources: {}
status: {}

指定版本为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