k8s基础知识

一、架构

master节点:

k8s基础知识

运行如下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实现