k8s学习笔记
k8s学习笔记(一)
kubernetes是google的开源容器编排调度引擎。用户只要定义出服务的最终状态,kubernetets就可以自动帮你将服务达到和维持再最终状态。因为kubernets这个名字太差,很多时候简称为k8s。 这篇是看k8s handbook的学习笔记
架构
-
Global
-
Master
-
Node
核心组件
- etcd保存了整个集群的状态;
- apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
- controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
- kubelet负责维护容器的生命周期,同时也负责Volume(CSI)和网络(CNI)的管理;
- Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
- kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;
周边组件
- CoreDNS负责为整个集群提供DNS服务
- Ingress Controller为服务提供外网入口
- Prometheus提供资源监控
- Dashboard提供GUI
- Federation提供跨可用区的集群
k8s对象(objects)
Kubernetes 对象是 “目标性记录” —— 一旦创建对象,Kubernetes 系统将持续工作以确保对象存在。通过创建对象,可以有效地告知 Kubernetes 系统,所需要的集群工作负载看起来是什么样子的,这就是 Kubernetes 集群的 期望状态。
资源对象
- Pod
- ReplicaSet
- ReplicationController
- Deployment
- StatefulSet
- DaemonSet
- Job
- CronJob
- HorizontalPodAutoscaler
配置对象
- Node
- Namespace
- Service
- Secret
- ConfigMap
- Ingress
- Label
- CustomResourceDefinition
- ServiceAccount
存储对象
- Volume
- Persistent Volume
策略对象
- SecurityContext
- ResourceQutoa
- LimitRange
资源配置与配额
- Pod级别,最小资源调度单位
- Namespace级别,限制资源配额和每个Pod的资源使用区间
服务发现与负载均衡
- Service 直接用Service提供cluster内部的负载均衡,并借助cloud provider提供的LB提供外部访问
- Ingress 还是用Service提供cluster内部的负载均衡,但是通过自定义LB提供外部访问
- Service Load Balancer 把load balancer直接跑在容器中,实现Bare Metal的Service Load Balancer
- Custom Locad Balancer 自定义负载均衡,并替代kube-proxy,一般在物理部署Kubernetes时使用,方便接入公司已有的外部服务
安全与权限管理
- 网络隔离 calico/flannel等插件
- 资源隔离 pod/namespace
- 身份隔离 RBAC