1 概念
- 在集群上管理和运行容器的对象
2 Pod和Controller关系
- Pod是通过Controller实现应用的运维,比如
伸缩、滚动升级 - Pod和Controller之间通过label标签建立关系
- Pod中使用labels打标签
- Controller中使用selector:matchLabels选择标签
3 Deplotment控制器应用场景
- 部署无状态应用
- 管理Pod和ReplicaSet
- 部署、滚动升级等功能
- 应用场景:
web服务``微服务
4 yaml文件字段说明
5 Deployment控制器部署应用
// 1 导出一个deployment控制器的web应用的yaml文件kubectl create deployment web --image=nginx --dry-run=client -o yaml > web.yaml// 2 使用yaml文件应用部署kubectl apply -f web.yaml// 3 对外发布kubectl expose deployment web --port=80 --type=NodePort --target-port=6565 --name=web1 -o yaml > web1.yaml// 4 执行yaml文件kubectl apply -f web1.yaml// 5 查看svckubectl get pods,svc// 6 通过ip:port访问测试
6 升级回滚
// 1 修改yaml文件,固定images版本// 2 部署应用kubectl apply -f web.yaml// 3 升级images版本kubectl set image deployment web nginx=nginx:1.17// 4 查看升级状态kubectl rollout status deployment web// 5 回滚// 5.1 查看历史版本kubectl rollout history deployment web// 5.2 回滚到上一个版本kubectl rollout undo deployment web// 5.3 回滚到指定版本kubectl rollout undo deployment web --to-revision=[指定版本]
6.1 升级过程
- 先生成一个新的pod,下载升级后的版本
- 下载成功后删除原pod
- 运行新的pod
- 如果有多个副本,按顺序一个个执行1~3
- 优点:保证线上服务不中断
7 弹性伸缩
// 将副本数量拓展到指定数量kubectl scale deployment web --replicas = 10
8 无状态和有状态
8.1 无状态
- 认为Pod都是一样的
- 没有顺序要求
- 不用考虑在那个node上运行
- 随意进行伸缩和拓展
8.2 有状态
- 上面的因素都需要考虑到
- 让每个Pod独立的,要保持Pod启动顺序和唯一性
- 唯一的网络标识符,持久存储
- 有序,比如mysql主从
9 部署有状态应用StatefulSet(TDDO-35)
deployment和statefulset区别
statefulset时有身份(唯一标识),规则如下:
- 根据主机名 + 按照一定规则生成域名
- 每个Pod有唯一主机名
- 唯一域名:
- 格式:主机名称.service名称.名称空间.svc.cluster.local
10 部署守护进程DeamonSet
- 在每个node上运行一个Pod,新加入的node也同样运行在一个pod里。
10.1 新建yaml文件
apiVersion: app/v1kind: DeamonSetmetadata:name: ds-testlabels:app: filebeatspec:selector:matchLabels:app: filebeattemplate:matadata:labels:app: filebeatspec:containers:- name: logsimage: nginxports:- containerPort: 80volumnMounts:- name: varlogmountPath: /tmp/logvolumes:- name: varloghostPath:path: /var/log
10.2 部署守护进程
// 1 部署应用kubectl apply -f ds.yaml// 2 进入pod查看日志kubectl exec -it ds bash// 3 pod内查看日志ls /tmp/log
11 一次任务和定时任务
11.1 一次性任务(Job)
新建yaml文件
apiVersion: batch/v1kind: Jobmetadata:name: pispec:template:spec:containers:- name: piimage: perlcommand:["prel", "-Mbignum=bpi", "-wle", "print bpi(2000)"]restartPolicy: NeverbackkoffLimit: 4
部署Job
// 1 部署应用kubectl create -f job.yaml// 2 查看jobkubectl get jobs// 3 查看日志kubeclt logs [pod名]
11.2 定时任务(CornJob)
新建yaml文件
apiVersion: batch/v1kind: CornJobmetadata:name: hellospec:schedule: "*/1 * * * *",jobTemplate:spec:containers:- name: helloimage: busyboxargs:- /bin/sh- -c- data; echo Hello from the Kubernetes clusterrestartPolicy: OnFailure
部署Job
// 1 部署应用kubectl apply -f cronjob.yaml// 2 查看jobkubectl get jobs// 3 查看日志kubeclt logs [pod名]
