Delopment VS StatefulSet
都是工作负载资源,用来管理pod。核心区别在于:Deployment 用于无状态应用,StatefulSet 用于有状态应用
- 身份和网络标识
- 存储
- 启停顺序
举个例子:Web 服务用 Deployment,因为每个实例都一样,挂了随时换。数据库用 StatefulSet,因为每个节点有自己的数据和固定名字,比如主从集群需要知道哪个是 master。
Network Policy
是k8s的网络策略资源,是一种声明式规则,用来控制 Pod 之间以及 Pod 与外部之间的网络流量。
- 定义资源
- apiserver储存在etcd,cni插件监听
- 挂载到主机的容器网络数据路径
本质:Pod 级防火墙系统
PV VS PVC
pv和pvc是k8s集群的存储的两层抽象
pv是集群存储资源,集群级别,代表真实的存储,比如NFS或者云硬盘,管理员可以提前配置或者通过strongclass动态供应
pvc是集群存储请求资源,namespace级别,只需要声明我需要短大的空间,什么访问方式。集群就会绑定pv,这是可以通过pvc使用存储
Job和CronJob
job:执行一次任务,比如数据计算,pod跑完,job就结束。
CronJob:执行定时任务,会在固定时间,创建job执行任务,比如说备份数据库。
Helm的版本控制
Chart 版本:安装包
Release 版本:部署历史
Service
流量没有真的经过service的cluster ip,因为这是一个抽象概念,只在iptables中做匹配。
- ClusterIP:集群内部访问的ip,给服务提供一个虚拟ip。
- NodeIP:在clusterIP的基础上,进行端口映射,把服务映射到节点的指定端口
- LoadBalance:云厂商提供的负载均衡,比如阿里云提供一个公网ip,通过ip随机选择一个节点,访问service。还可以搭配nginx,指定nordport,Nginx 截取端口流量,根据规则转发到不同 Service
- ExternalName:把服务映射到外部域名,比如有一个外部数据库mysql.com,想让集群内步访问可以用它。
ReplicaSet VS ReplicationController
标签选择器不一样
我们使用deploment管理replicaset,因为replicaset只保证pod的数量,deploment可以进行滚动更新和回滚。
rollout进行回滚
DaemonSet
- nodeSelector
- Taint
- NoSchedule
- PreferNoSchedule
- NoExecute
- tolerations
helm
集群的包管理器,把应用打包成chart,进行一键式管理。
- chart目录:
- 升级卡住:
helm status <你的release名称> -n <命名空间>
helm history <你的release名称> -n <命名空间>
查看所有相关 Pod 的状态
可能持久化资源没准备好,节点资源不足
Helm Release 历史损坏(Secret 残留):helm升级失败,或者中断,导致release的secret处于pending-upgrade状态,不能再upgrade
处理:回滚到上一次状态,修改错误后重新upgrade
注意:helm upgrade --atomic=true
ingress
管理外部服务到集群内部,是资源
ingress资源需要ingress controller实行,比如。