k8s基本概念
k8s架构
Kubelet
-
节点代理,pod 管理,处理master中api-server下发的节点任务,每个节点都会启动 kubelet进程
-
容器健康检查:kubelet 创建了容器之后还要查看容器是否正常运行,如果容器运行出错,就要根据 pod 设置的重启策略进行处理。
-
容器监控:kubelet 会监控所在节点的资源使用情况,并定时向 master 报告,资源使用数据都是通过 cAdvisor 获取的。知道整个集群所有节点的资源情况,对于 pod 的调度和正常运行至关重要。
k8sPod
Pod基本概念
-
最小部署单元
-
一组容器的集合
-
一个Pod中的容器共享网络命名空间与存储
-
Pod是短暂
Pod存在的意义
Pod实现机制
- 共享网络:在一个Pod中创建一个或者多个容器,前提会创建一个infrastructure Container(基础容器)维护整个Pod网络空间,其他创建容器会与该容器有联系,使用共同的网络(IP相同),相同的namespace。
- 共享存储:独立于Node之外的数据卷
Pod容器分类与设计模式
Pod与controller的关系
通过应用部署controller,controller通过label-selector关联Pod
k8s控制器
Deployment控制器功能与应用场景
- 部署无状态应用
- 管理Pod与ReplicaSet
- 具有上线部署、副本设定、滚动升级、回滚等功能
- 提供声明式更新,例如只更新一个新的Image
应用场景:Web服务、微服务
yaml字段解析
应用升级和回滚
Service存在的意义
-
service是通过kube-proxy来实现的
-
防止Pod失联(服务发现){获取可用Pod的IP列表}
-
定义一组Pod的访问策略(负载均衡)
Pod与Service的关系
Service类型
第一种
第二种
第三种(主流 )
Deployment和StatefulSet-有状态应用守护者
Ingress Controller
意义:在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,在Kubernetes 目前 提供了以下几种方案:NodePort、LoadBalancer、Ingress
Ingress是基于域名,负载均衡还是用nginx
CICD
传统模式:
ps:传统方式会将打包好的jar包
使用k8s集成:
ps:一次构建多环境部署,前提应用的配置不能写死,可配置在配置中心或者configmap
Namespace命名空间
ps:通过服务命名隔离,但是通过cluster-ip或者是Pod的ip访问是不受限制的,属于**单维度。**
Resource多维度集群资源管理
资源:
- CPU
- GPU
- 内存
- 持久化存储
核心设计
- Requests
- Limits
样例:
ps:cpu:100m相当于0.1核cpu,1cpu = 1000m
k8s会根据requests和limits判断服务等级:
Pod驱逐策略-Eviction
Label标签
例如:Pod打上标签,ReplicaSer(RS)可以知道哪些是自己的,Service知道哪些是自己的
Scheduler调度策略
部署策略
实现业务负载均衡四层和七层代理
k8s下的service、cluster-ip、nodeport都是四层的负载均衡。
Ingress-nginx是7层的负载均衡器 ,同时负责统一管理外部对k8s cluster中Service的请求。
负载均衡,就是根据请求的信息不同,来决定怎么样转发流量。
四层负载均衡,就是根据请求的ip+端口,根据设定的规则,将请求转发到后端对应的IP+端口上。
七层负载均衡,则是在四层基础上,再去考虑应用层的特征。比如说一个WEB服务器的负载均衡,除了根据IP+80端口来判断之外,还可以根据七层URL,浏览器类别,来决定如何去转发流量。
K8s常见的日志采集问题和解决方案
常见方案
远程日志
SideCar
LogAgent
LogPilot
K8s的监控
Prometheus
- 一系列服务的组合
- 系统和服务的监控报警平台
特征
架构
数据类型
数据来源
服务器基础指标
docker容器指标
k8s组件
基于K8s开发一个容器管理平台
未完待续…..