k8s in action 阅读笔记
副本:生命周期保证
pod:一组容器,不跨工作节点,容器共享linux命名空间(相同主机名、网络接口(ip地址、端口号)、volume共享文件目录)
动机:一个容器一个进程
pod是水平扩展基本单位
pod创建:name、容器镜像、容器名称、监听端口
无service pod通信(调试):配置本地端口->pod端口,转发连接
标签:分组,将单一资源操作扩展至批量
管理pod生命周期
pod存活探针:检测容器(任务级别)的失效,触发容器重启。配置属性(心跳):延迟(容器初始化后开始)、超时、周期
//不检查进程内错误:异常重启非任务级别语义;不应包含外部服务,服务边界内错误
replicationController:创建副本(根据pod模板)故障转移,sum(pod)
保证pod数量 与标签选择器匹配
controller不是对修改动作,而是对修改后的状态进行反应
controller-标签-pod,通过标签解耦直接匹配,保持独立
标签变化独立于pod生命周期
replicaSet:更强的标签匹配能力
daemonSet:建立pod与工作节点的对应关系,如每个节点一个pod(由模板创建),通常为系统服务,优先级高于节点可调度性配置
标签变化关联pod生命周期
单项服务:临时任务
job:单次,优先级高于重启配置
指定单个pod运行次数
指定多个pod并发(可伸缩)、串行
指定超时、周期执行
pod生命周期结束不删除(保留日志)
发现服务
连接(端口)——标签选择器——pod
自动分配内部集群ip(虚拟ip,与服务器端口结合)
服务代理截取连接,随机选择pod(||配置指向同一pod),转发请求
发现服务
环境变量
运行dns服务的pod,其他pod配置dnsPolicy
连接集群外部:不将服务重定向到集群中pod,重定向到外部ip与端口
外部访问服务:
nodeport
loadbalance
ingress控制器:一个(外部)ip
http请求——host头(服务)——查endpoint——pod ip
ingress控制器定位pod,不转发请求
就绪指针
不重启,不删除
eadless 直连pod,不通过代理,负载均衡由dns轮训机制提供
故障排除
确保从内部连接集群ip(虚拟,无法ping)
确保定义了就绪探针,且返回成功
kubectl get endpoints 确认容器是服务的一部分
检查连接服务公开的端口
直连pod ip,确认
确保应用不是仅绑定到本地主机
配置
环境变量(容器级别,pod创建后不可修改)
资源对象configMap,配置集中,保持一致。暴露为卷可热更新
dowanward API:pod、容器元数据——>内部进程
K8s API:本机通过proxy获取 ||pod内部(容器内 curl脚本)与API服务器交互
主容器—http—ambassador容器—https—API服务器,屏蔽连接外部服务器的复杂性
statefulSet:稳定标记、独立存储、节点故障确保不在运行后才可创建替换
浙公网安备 33010602011771号