10分钟带你了解k8s基础(kubernetes基础概念总结)

3,617 阅读3分钟

kubernetes基础概念总结

简介

kubernetes是由google主导开发的开源容器管理平台,提供多主机集群,容器编排,容器伸缩等功能

基础组件介绍

docker

容器运行环境的一种实现,封装底层容器

etcd

etcdkubernetes集群用来存储集群相关数据的数据仓库

master节点组件

master节点是主集群中的大脑,负责处理外部的api请求,分配调度任务以及管理容器的副本数等

kube-apiserver
  • kubernetes对外的服务入口,其他组件通信的纽带,服务无状态,可水平扩容
kube-scheduler
  • 负责pod的任务调度
kube-controller-manager
  • 处理node节点当机情况
  • 负责保证pod的副本数
  • 管理endpoint,连接service和pod
  • 为新namespace创建默认api token和accounts

node节点组件

node节点负责干活,执行master节点指派的相关任务

kubelet
  • 负责启动停止容器,保证容器运行。
kube-proxy
  • 负责根据service生成网络规则,生成路由规则

组件通信

架构图

![](k8s-

arch.png)

组件间的通信全依赖于kube-apiserver,其他组件通过http协议与kube-apiserver交互。

当使用kubectl或者直接调用kube-apiserver提供的api请求创建pod里和service时工作流程如下:

  • kube-apiserver把相关的pod和service配置存储到etcd
  • kube-schedulerkube-apiserver获取到相关pod的配置,根据集群中的资源和条件限制把pod调度到相应的node节点上
  • kube-controller-managerkube-apiserver获取到相关pod和service的配置,定期检查pod的状态,保证有用户配置的足够数量的pod副本在运行,生成service到pod的规则关系。
  • kubeletkube-apiserver获取分配到本节点的相关pod配置,在本地启动容器并定期检查返回容器状态
  • kube-proxykube-apiserver获取service到pod的规则,在本节点维护iptable或者ipvs相关路由规则

基础概念

pod

  • kubernetes的最小调度单元,一个pod中可以有多个容器,多个容器共享网络和存储卷

service

  • kubernetes抽象出来一个概念,可以理解为负载均衡器,后端接pod

cluster ip

  • service在集群中的ip,相当负载均衡器的ip

ingress

  • 对集群外部暴露集群内部service的一种方式

nodeport

  • 对集群外部暴露服务的第二种方式,跟随service配置,让集群中的node节点都监听相应的端口,可以通过node节点访问集群内部service

loadbalancer

  • 对集群外部暴露集群内部service的一种方式,一般只有在云平台才能使用

deployment

  • 封装了pod/replicaset,可以实现指定pod副本数量,滚动更新,扩容pod,一般一个应用(服务)一个deployment

statefullSet

  • 相当于有状态服务的deployment,重启后,主机名和pod的名称不会改变

daemonSet

  • 在每个node节点都需要运行的pod可以使用daemonSet

job

  • 一次性任务

cronJob

  • 类似于crontab定时执行任务

dns

  • kube-dns/coredns提供集群中的dns服务,可以解析service到cluster ip,实现服务发现

pv

  • 管理员用来提前创建好的存储空间,供用户申请使用

pvc

  • 用户用来申请存储空间

storageClass

  • 定义存储类供pvc使用,当用户通过pvc并指定storageClass请求pv时kubernetes可以根据storageClass动态创建pv

排错技巧

查看日志

查看pod日志
  • kubectl logs pod-name
查看事件
  • kubectl describe pod-name
查看docker日志
  • 通过kubectl get pod -o wide找到容器运行的node节点

  • node节点上通过docker ps -a找到出错的容器

  • docker logs container-id

查看kubelet及其他组件日志
  • journalctl -u kubelet