K8S初识(一)

188 阅读2分钟

这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战

0. 相关概念

  1. Docker:提供容器生命周期管理,构建运行时容器。
  2. K8S:提供容器间的通信网络,容器编排。
  3. GKE:Google Container Engine,Docker容器和集群的开源管理平台。
  4. Heapster:每个节点上运行的一个POD,提供集群范围的数据聚合器,代理查询节点的使用信息。
  5. Node:也叫worker node,代表物理机或VM,提供运行POD等服务,供master调度。包含 kubelet 和 kube-proxy等组件。
  6. Master Node:包含 kube-controller-manager,kube-apiserver,kube-scheduler 等组件。
  7. kube-apiserver:接受客户端请求,作为前端组件。
  8. kube-scheduler:工作分配和管理,跟踪资源利用率。
  9. Etcd:分布式键值存储数据库,存储 k8s 集群的配置数据。
  10. 负载均衡器:内部负载即kube-scheduler的工作,将pod分配到各个node的容器。外部负载即流量引导,如各种网络插件。
  11. Ingress网络:一组规则,k8s的入口(网关);Ingress是一个API对象,通过HTTP管理外部访问,以此暴露服务。
  12. 云控制器:Node Controller、Route Controller、Volume Controller、Service Controller。
  13. 常用监控&可视化工具: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)概念

  1. 存储卷
  2. 作用:多个 Pod/Container 之间共享/同步文件。

(2)种类

  1. Volumn:普通型。随着 POD 创建而生成,随着 POD 删除而回收。
  2. Persistent Volumn:持久型。
  3. Dynamic Volumn Provisioning:提供动态存储。

Persistent Volumn (PV) < PersistentVolumeClaim (PVC) == Pod < Node

(3)具体实现

  1. EmptyDir 对应一个空文件夹;
  2. ConfigMap:从 apiserver 中获取当前 ConfigMap 对象,以键值对形式写到目标文件中;
  3. Secret:类似ConfigMap;

(4)生命周期

  1. Attach 附着
  2. Mount 挂载
  3. Unmount 卸载
  4. Detach 分离

(5)访问模式

  1. ReadWriteOnce:只能被单个节点读写。
  2. ReadOnlyMany:只读模式,可以被多个节点访问。
  3. ReadWriteMany:支持多个节点读写。

(6)回收策略

  1. Retain:默认保留,可手动回收。
  2. Delete:关联的 Volumn 一同删除。

(7)管理

  1. VolumeManager:负责创建等管理;
  2. AttachDetachController:负责挂载/卸载;
  3. PVController:负责PV的变更;