这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战
0. 相关概念
- Docker:提供容器生命周期管理,构建运行时容器。
- K8S:提供容器间的通信网络,容器编排。
- GKE:Google Container Engine,Docker容器和集群的开源管理平台。
- Heapster:每个节点上运行的一个POD,提供集群范围的数据聚合器,代理查询节点的使用信息。
- Node:也叫worker node,代表物理机或VM,提供运行POD等服务,供master调度。包含 kubelet 和 kube-proxy等组件。
- Master Node:包含 kube-controller-manager,kube-apiserver,kube-scheduler 等组件。
- kube-apiserver:接受客户端请求,作为前端组件。
- kube-scheduler:工作分配和管理,跟踪资源利用率。
- Etcd:分布式键值存储数据库,存储 k8s 集群的配置数据。
- 负载均衡器:内部负载即kube-scheduler的工作,将pod分配到各个node的容器。外部负载即流量引导,如各种网络插件。
- Ingress网络:一组规则,k8s的入口(网关);Ingress是一个API对象,通过HTTP管理外部访问,以此暴露服务。
- 云控制器:Node Controller、Route Controller、Volume Controller、Service Controller。
- 常用监控&可视化工具:Heapster 采集,Prometheus 收集(node exporter),InfluxDB 存储,Grafana 展示。
1. Pod
调度的最小单位,包含一个或多个容器。通常以yaml格式作为配置文件。
apiVersion: v1
kind: Deployment
metadata:
name: NAME-service-deployment
spec:
replicas: 2 # 启动 POD 的数目
selector:
matchLabels:
app: NAME-service
template:
metadata:
labels:
app: NAME-service
spec:
containers:
- name: NAME-service
lifecycle:
preStop: # 定义优雅退出的钩子命令
exec:
command:
- "/bin/sh"
- "-c"
- "curl -s -X POST http://127.0.0.1:8080/shutdown; \
sleep 30; \
"
2. Volumn
(1)概念
- 存储卷
- 作用:多个 Pod/Container 之间共享/同步文件。
(2)种类
- Volumn:普通型。随着 POD 创建而生成,随着 POD 删除而回收。
- Persistent Volumn:持久型。
- Dynamic Volumn Provisioning:提供动态存储。
Persistent Volumn (PV) < PersistentVolumeClaim (PVC) == Pod < Node
(3)具体实现
- EmptyDir 对应一个空文件夹;
- ConfigMap:从 apiserver 中获取当前 ConfigMap 对象,以键值对形式写到目标文件中;
- Secret:类似ConfigMap;
(4)生命周期
- Attach 附着
- Mount 挂载
- Unmount 卸载
- Detach 分离
(5)访问模式
- ReadWriteOnce:只能被单个节点读写。
- ReadOnlyMany:只读模式,可以被多个节点访问。
- ReadWriteMany:支持多个节点读写。
(6)回收策略
- Retain:默认保留,可手动回收。
- Delete:关联的 Volumn 一同删除。
(7)管理
- VolumeManager:负责创建等管理;
- AttachDetachController:负责挂载/卸载;
- PVController:负责PV的变更;