kubernetes基础概念总结
简介
kubernetes
是由google主导开发的开源容器管理平台,提供多主机集群,容器编排,容器伸缩等功能
基础组件介绍
docker
容器运行环境的一种实现,封装底层容器
etcd
etcd
是kubernetes
集群用来存储集群相关数据的数据仓库
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-
image
arch.png)
组件间的通信全依赖于kube-apiserver
,其他组件通过http协议与kube-apiserver
交互。
当使用kubectl或者直接调用kube-apiserver
提供的api请求创建pod里和service时工作流程如下:
kube-apiserver
把相关的pod和service配置存储到etcd
中kube-scheduler
从kube-apiserver
获取到相关pod的配置,根据集群中的资源和条件限制把pod调度到相应的node
节点上kube-controller-manager
从kube-apiserver
获取到相关pod和service的配置,定期检查pod的状态,保证有用户配置的足够数量的pod副本在运行,生成service到pod的规则关系。kubelet
从kube-apiserver
获取分配到本节点的相关pod配置,在本地启动容器并定期检查返回容器状态kube-proxy
从kube-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
作者:CountingStars_
链接:https://www.jianshu.com/p/95c2bc74e2b2