一、K8S图概
二、K8S文字介绍
K8S
docker:容器本质上讲就是运行在操作系统上的一个进程,只不过加入了对资源的隔离和限制
namespace隔离:unix 的unshare方法进行隔离
cgroups资源配置:CPU,内存,网络限制
docker镜像:解决运行容器快速启动,复制,迁移。同时采用OTA方式建立镜像仓库,节约空间。
组件
Master
- apiserver
- etcd
- scheduler
- Manager-controller
- cloud-manager
Worker
- kubelet
- kube-proxy
安装
安装注意事项
- 虚拟机硬件条件:kubeadm init要求最低 2核
- docker推荐:kubeadm init推荐docker使用systemd作为cgroup驱动
Master
- docker
- kubectl
- kubeadm
Worker
- docker
- kubectl
- kubelet
- kubeadm(kubeadm join 10.206.0.3:6443 --token执行的时候)
常用对象
基础
-
K8s最小的调度单元:Pod
-
Pod健康状态监控:由kubelet对容器定期诊断
-
检测容器健康状态
-
StartupProbe探针:检查容器内应用程序是否已经启动,如果设置该属性,则会禁止其他探针,直到它成功。
- 启动检查
-
LivenessProbe探针:检查容器是否处于运行状态
- 存活检查
-
ReadinessProbe探针:检查容器是否处于可接受请求服务的状态
- 就绪检查
-
-
处理器
- ExecAction:在容器中执行命令。命令退出状态为0则表示成功。
- TCPSocketAction:容器IP地址的特定端口上执行一个TCP检查,如果端口处于打开,则成功。
- HTTPGetAction:容器IP地址特定端口和路径执行GET请求,若返回200~400,则成功
-
-
网络实现
-
问题
-
集群内
- Container与Container之间通信问题
- Pod与Pod之间通信问题
- Pod与服务之间通信问题
-
集群外
- 外部应用于服务通信问题
-
-
解决方案
-
集群内Pod的通信方式
-
环境变量
- kubelet为service创建一组环境变量
- service先于pod创建,否则环境变量不生效
- 相互依赖的环境变量有先后顺序,不会读取到前面为复制的变量
-
DNS
-
为每一个service创建一个DNS
-
普通服务DNS:
- my-svc.my-namespace.svc.cluster-domain.example
-
Deployment、DaemonSet DNS:
- pod-ip-address.deployment-name.my-namespace.svc.cluster-domain.example
-
Pod设置DNS:
- hostname默认取metadata.name,若需要自定义则通过spec.hostname指定值
- spc.subdomain可以指定子域名值
-
-
-
-
集群外访问Service的通信方式
-
ClusterIP:默认,内部IP,只能在集群内部访问服务;特别的,当Cluster=None的时,为Headless服务
-
NodePort:对节点暴露服务,意味着可以通过任意NodePort上访问这个服务
-
LoadBlance:是发布服务到互联网的标椎方式
-
Ingress:集群中服务的外部访问进行管理的API对象。
- Ingress资源仅支持用于转发HTTP流量的规则
-
-
控制器
-
副本控制器:ReplicaSet
-
Deployement
- 无状态应用;RC+版本管理
-
StatefulSets
- 有状态应用
-
DaemonSet
-
每个节点上只能跑一个Pod
-
网络Daemon
-
存储Daemon
- ceph,glusterd
-
日志收集Daemon
- flunentd,logstash
-
监控Daemon
- Prometheus Node Export或者collectd
-
-
-
Job(CroJob 1.8版本之后废除)
数据持久化
-
volume
- emptyDir:Pod指定节点,并创建emptyDir卷;Pod销毁,卷消失
- hostPath:节点中的文件挂在到Pod上
- nfs服务:网络文件存储系统
- glusterfs
- cepthfs
- ceph
-
PV/PVC
- PVC:用户申请
- PV:存储卷,管理者创建
- SC(Storage Class):动态创建PV
-
PV+PVC+NFS做持久化
配置分离
- ConfigMap
- Secret
插件
网络
-
解决Pod之间通信问题,CNI插件
- flannel:简单
- calico:复杂
存储
-
rook+ceph:分布式存储
- rook:存储编排器
- ceph:分布式文件存储系统
微服务监控三大类
-
Logging:用户主动记录的离散事件,记录的信息一般是非结构化的文本内容,在用户进行问题分析判断时可以提供更为详尽的线索
- logstash:收集日志
- ELK elasticsearch:存储日志
- kibana:数据展示
-
Metrics:具有聚合属性的采集数据,旨在为用户展示某个指标在某个时段的运行状态,用于查看一些指标和趋势。
- node export:收集node数据工具
- prometheus:数据库+数据抓取工具
- Grafana:图形化工具
-
Tracing:记录一次请求调用的生命周期全过程,其中包括服务调用和处理时长等信息,含有请求上下文环境,由一个全局唯一的 Trace ID 来进行标识和串联整个调用链路,非常适合微服务架构的监控场景。
- Skywalking,ping-point,zipkin
私有镜像库搭建
- JFrog Container Registry(JCR)