文章目录
- 一、Pod
- 1. pod概述
- 2. pod存在意义
- 3. Pod实现机制
- 4. pod镜像拉取策略
- 5. pod资源限制
- 6. pod重启机制
- 7. pod健康检查
- 8. 创建pod流程
- 9. pod调度
- 二、Controller
- 1. 什么是Controller
- 2. Pod和Controller关系
- 3. deployment应用场景
- 4. 使用deployment部署应用(yaml)
- 5. 应用升级回滚和弹性伸缩
- 6. StatefulSet 部署有状态应用——无状态和有状态
- 7. 部署有状态应用
- 8. 部署守护进程DaemonSet
- 9. job(一次性任务)
- 10. cronjob(定时任务)
- 三、service
- 1. Service存在意义
- 2. Pod和Service关系
- 3. 常用Service类型
- 四、配置管理—Serect
- 五、配置管理—ConfigMap
一、Pod
1. pod概述
- 最小部署单元
- 包含多个容器(一组容器的集合)
- 一个pod中容器共享网络命名空间(NameSpace)
- pod是短暂的
2. pod存在意义
-
创建容器使用docker,一个docker对应的是一个容器,一个容器有进程,一个容器运行一个应用程序
-
pod是多进程设计,运行多个应用程序
一个pod有多个容器,一个容器里面运行一个应用程序
原因参考这篇文章 -
pod存在为了亲密性
①两个应用之间进行交互
②网络之间调用
③两个应用需要频繁调用
3. Pod实现机制
1)共享网络
通过Pause容器,把其他业务容器加入到Pause容器里面,让所有业务容器在同一个namespace中,从而实现网络共享。
- pod实现共享网络机制
①创建Pause容器(也叫info容器,也叫根容器)
②创建业务容器1,2,……
③业务容器一次加入到info容器(pause容器)中,创建出独有的IP,mac地址,port
使得所有业务容器在同一个namespace中,实现网络共享。
2)共享存储
通过引用数据卷概念Volumn,使用数据卷进行持久化存储
- pod实现共享存储机制
现有2个node节点
①node1中pod产生的数据会存储到数据卷中持久化存储
②node1宕机/挂掉后
③node1中的pod会到node2中继续运行,通过读取数据卷中存储的数据
从而实现持久化存储。
4. pod镜像拉取策略
5. pod资源限制
6. pod重启机制
7. pod健康检查
8. 创建pod流程
9. pod调度
- 影响调度的属性
- pod资源吸纳之对pod调度产生影响
- 节点选择器标签影响pod调度
节点选择器工作流程⬇
- 节点亲和性影响pod调度
节点亲和性 nodeAffinity 和之前 nodeSelector 基本一样的,根据节点上标签约束来绝对pod调度到哪些节点上。
- 污点和污点容忍
二、Controller
1. 什么是Controller
在集群上管理和运行容器的对象
2. Pod和Controller关系
(1)Pod是通过Controller实现应用的运维,比如伸缩、滚动升级等等
(2)Pod和Controller之间通过label标签关系
3. deployment应用场景
(1)部署无状态应用
(2)管理Pod和ReplicaSet
(3)部署,滚动升级等功能
应用场景:web服务,微服务
4. 使用deployment部署应用(yaml)
# 第一步:导出yaml文件
kubectl create deployment web --image=nginx --dry-run -o yaml > web.yaml
# 第二部:使用yaml部署应用
kubectl apply -f web.yaml
# 第三部:对外发布(暴露对外端口号)
kubectl expose deployment web --port=80 --type=NodePort=80 --name-web1 -o yaml > web1.yaml
kubectl apply -f web1.yaml
kubectl get pods,svc
# ip+端口能否访问nginx
5. 应用升级回滚和弹性伸缩
# 应用升级
kubectl set image deployment web nginx=nginx:1.15
# 查看升级状态
kuectl rollout status deployment web
# 查看升级版本
kubectl rollout history deployment web
# 回滚到上一个版本
kubectl rollout undo deployment web
# 回滚到指定版本
kubectl rollout undo deployment web --to-revision=2
# 弹性伸缩
kubectl scale deployment web --replicas=10
6. StatefulSet 部署有状态应用——无状态和有状态
(1)无状态:
①认为Pod都是一样的
②没有顺序要求
③不用考虑在哪个node运行
④随意进行伸缩和扩展
(2)有状态
上面因素都要考虑到
①让每个Pod都是独立的,保持pod启动顺序和唯一性
②唯一的网络标识符,持久储存
③有序,比如MySQL主从
7. 部署有状态应用
- 无头service:通俗讲就是将ClusterIP值设为none,即ClusterIP:none
(1)StatefulSet部署有状态应用
8. 部署守护进程DaemonSet
(1)在每个node上运行一个pod,新加入的node也同样在一个pod里面
例子:在每个node节点安装数据采集工具
9. job(一次性任务)
10. cronjob(定时任务)
三、service
1. Service存在意义
(1)防止Pod失联(服务发现)
(2)定义一组Pod访问策略(负载均衡)
2. Pod和Service关系
根据label和selector标签建立关联
3. 常用Service类型
(1)ClusterIP:集群内部使用
(2)NodePort:对外访问应用使用
(3)LoadBalancer:对外访问应用使用,公有云
node内网部署应用,外网一般不能访问到的
- 找到一台可以进行外网访问机器,安装nginx,反向代理
** 手工把可以访问节点添加到nginx里面
LoadBalancer:公有云,把负载均衡,控制器
四、配置管理—Serect
作用:加密数据,存在etcd里面,让pod容器以挂载Volume方式进行访问。
场景:凭证
- 创建serect加密数据
- 以变量形式挂载到容器中
kubectl exec
:在指定容器内执行命令
- 以Volume形式挂在到Pod容器中
五、配置管理—ConfigMap
作用:存储不加密数据到etcd,以变量或者Volume挂载到pod容器中。
场景:配置文件
- 创建配置文件
- 创建configmap
- 以Volume挂载到pod容器中