1.Pod容器分类
• Infrastructure Container: 基础容器
• 维护整个Pod网络空间
• InitContainers: 初始化容器
• 先于业务容器开始执行
• Containers: 业务容器
• 并行启动
2.镜像拉取策略
• IfNotPresent:默认值,镜像在宿主机上不存在时才拉取
• Always:每次创建 Pod 都会重新拉取一次镜像
• Never: Pod 永远不会主动拉取这个镜像
3.资源限制
Pod和Container的资源请求和限制:
• spec.containers[].resources.limits.cpu
• spec.containers[].resources.limits.memory
• spec.containers[].resources.requests.cpu
• spec.containers[].resources.requests.memory
request可以理解为预分配,即判断集群现有资源,limit和docker资源限制类似。
4.重启策略(restartPolicy)
• Always:当容器终止退出后,总是重启容器,默认策略。
• OnFailure:当容器异常退出(退出状态码非0)时,才重启容器。
• Never:当容器终止退出,从不重启容器。
5.健康检查(Probe)
Probe有以下两种类型:
livenessProbe
如果检查失败,将杀死容器,根据Pod的restartPolicy来操作。
readinessProbe
如果检查失败, Kubernetes会把Pod从service endpoints中剔除。
Probe支持以下三种检查方法:
httpGet
发送HTTP请求, 返回200-400范围状态码为成功。
exec
执行Shell命令返回状态码是0为成功。
tcpSocket
发起TCP Socket建立成功。
参考网站:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
6.调度约束
• nodeName用于将Pod调度到指定的Node名称上
• nodeSelector用于将Pod调度到匹配Label的Node上
7.故障排查
1.Pod与controllers的关系
• controllers:在集群上管理和运行容器的对象
• 通过label-selector相关联
• Pod通过控制器实现应用的运维,如伸缩,滚动升级等
2.Deployment
• 部署无状态应用
• 管理Pod和ReplicaSet
• 具有上线部署、副本设定、滚动升级、回滚等功能
• 提供声明式更新,例如只更新一个新的Image
应用场景: Web服务,微服务
3.DaemonSet
• 在每一个Node上运行一个Pod
• 新加入的Node也同样会自动运行一个Pod
应用场景: Agent
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
4.Job
Job分为普通任务(Job)和定时任务(CronJob)
• 一次性执行
应用场景:离线数据处理,视频解码等业务
https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/
5.CronJob
定时任务,像Linux的Crontab一样。
• 定时任务
应用场景:通知,备份
https://kubernetes.io/docs/tasks/job/automated-tasks-with-cron-jobs/
6.Statefulset
部署有状态应用,需要考虑网络ID 和存储问题
如mysql jenkins等
1.service简介
• 防止Pod失联(服务发现)
• 定义一组Pod的访问策略(负载均衡)
• 支持ClusterIP, NodePort以及LoadBalancer三种类型
• Service的底层实现主要有iptables和ipvs二种网络模式
2.Pod与Service的关系
• 通过label-selector相关联
• 通过Service实现Pod的负载均衡(TCP/UDP 4层)
3.Service类型
ClusterIP: 分配一个内部集群IP地址,只能在集群内部访问(同Namespace内的Pod),默认ServiceType。
ClusterIP 模式的 Service 为你提供的,就是一个 Pod 的稳定的 IP 地址,即 VIP。
NodePort: 分配一个内部集群IP地址,并在每个节点上启用一个端口来暴露服务,可以在集群外部访问。
访问地址: <NodeIP>:<NodePort>
LoadBalancer: 分配一个内部集群IP地址,并在每个节点上启用一个端口来暴露服务。
除此之外, Kubernetes会请求底层云平台上的负载均衡器,将每个Node([NodeIP]:[NodePort])作为后端添加进去。一般云服务提供商支持,自建集群不支持该类型。
4.Service代理模式
Iptables VS IPVS
Iptables:
• 灵活,功能强大
• 规则遍历匹配和更新,呈线性时延
• 可扩展性
IPVS:
• 工作在内核态,有更好的性能
• 调度算法丰富: rr, wrr, lc, wlc, ip hash...
默认是iptables模式,如果需要使用ipvs,需要修改configmap(kubeadm方式部署,如果是二进制,修改kube-proxy配置文件),服务器开启ipvs。
5.DNS
DNS服务监视Kubernetes API,为每一个Service创建DNS记录用于域名解析。
ClusterIP A记录格式: <service-name>.<namespace-name>.svc.cluster.local
示例: my-svc.my-namespace.svc.cluster.local
小结:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。