k8s基础知识
一、架构master节点:运行如下deamon服务:apiserver:提供restful api服务scheduler:用于调度pod到nodeController Manager:用于管理各种controlleretcd:配置管理网络:如flannelnode节点:kubelet:从scheduler获取pod配置信息,并在节点创建pod。kube-p...
一、架构
master节点:
运行如下deamon服务:
- apiserver:提供restful api服务
- scheduler:用于调度pod到node
- Controller Manager:用于管理各种controller
- etcd:配置管理
- 网络:如flannel
node节点:
- kubelet:从scheduler获取pod配置信息,并在节点创建pod。
- kube-proxy:转发service的请求
- 网络:如flannel
二、核心概念
pod:调度的最基本单元,最基本工作单元,调度的时候整体调度。
pod中所有容器使用同一个网络namespace,共享存储。
pod里一般只有一个容器,或者里面的容器的关联很紧密,共享资源。
kubernetes通过controller来管理pod,controller中定义了pod的部署特性。
controller类型:
1.deployment:最常用的controller,用来部署应用。
2.ReplicaSet:实现pod的多个副本管理。通过部署deployment来自动创建rs,不用直接操作。
3.DaemonSet:用于每个node最多运行一个副本的场景,即deamon。比如ceph,kubernetes自身的服务kube-proxy等。
4.StatefuleSet:用于有状态的应用部署。需要稳定的集群成员应用部署,如etcd
稳定的唯一的网络标识,用于发现集群内部其他成员。如etcd-0,etcd-1
稳定的持久化存储。
启动和关闭时保证有序。
存储必须用pv/pvc或者外部存储。删除或缩容不会删除相关卷,保证数据安全。需要一个headless service生成唯一表示,开发人员手动创建。手工升级。
生成的pod根据名称来匹配存储,实现状态持久化。
5.job:用于运行结束就删除的应用。其他controller里的pod通常是持续运行的长期应用。
6.service:service用于为pod提供负载均衡,用于提供ip和端口访问pod。用kube-proxy使用iptables实现。
7.namespace:命名空间,用于controller和pod等资源的隔离。
default:默认命名空间
kube-system:放系统资源
label:使用label来影响pod的调度,如在某个节点添加label属性有ssd,有该label的pod会调度到指定节点。
job执行失败:失败后会一直重试。容器失败会自动重启。
dns:kubeadm安装后会默认安装kube-dns组件,用于对service做dns映射。是namespace隔离的。
外网访问service:
ClusterIP:默认service,只有cluster内部可以访问。
NodePort:映射到cluster静态端口。每个节点都可以,实际实现用的iptables。
LoadBalancer:云负载均衡
健康检查:
默认健康检查机制:每个容器启动时执行一个进程,判断返回码是不是0,非0则重启容器。
liveness:自定义判断容器是否健康条件,如文件是否存在。不健康则重启。
Readiness:自定义判断容器是否健康条件,不健康设置容器不可用,不对service提供服务。
存储资源:
emptyDir:host上空目录,pod从节点上删除就没了。 hostpath:跟host绑定,host没了就没了。
外部存储:各种云存储,共享存储。
pv和pvc:pv,将外部存储重新规划出一块,由管理员创建和维护。pvc,对pv的申请。
根据回收策略,删除pvc用于回收清理pv,数据清空。也可以保留数据。保留的话再想删除数据就需要删除pv了。
动态pv:指定容量和存储类型等,动态分配pv。使用storageclass。
配置安全管理:
configmap:
非敏感信息,明文存储。volume或者环境变量形式使用。
secret:
加密保存敏感信息,如用户名密码。
以volume形式挂载到pod,也可以用环境变量形式使用。
Helm:包管理器。
网络模型:
每个pod有各自的ip地址,pod内部容器可以通过localhost通信,pod之间可以直接通信。
pod可能不断创建和销毁,ip不固定,所以用service来抽象出pod的ip来访问,同时提供高可用和负载均衡。
CNI:容器网络规范。
插件形式支持很多种网络方案,如Flannel、Calico等
network-policy:使用label来选择pod,并指定与外界通信方式。Flannel没实现,Calico实现了。
k8s集群监控:
Weave Scope
日志管理:
Kubernetes 开发了一个 Elasticsearch 附加组件来实现集群的日志管理。这是一个 Elasticsearch、Fluentd 和 Kibana 的组合。Elasticsearch 是一个搜索引擎,负责存储日志并提供查询接口;Fluentd 负责从 Kubernetes 搜集日志并发送给 Elasticsearch;Kibana 提供了一个 Web GUI,用户可以浏览和搜索存储在 Elasticsearch 中的日志。
ElasticSearch实现
更多推荐
所有评论(0)