这里写自定义目录标题
k8s特性
- 自动装箱
- 自我修复
- 水平扩展
- 服务发现和负载均衡
- 自动发布和回滚
- 密钥和配置管理
- 存储编排
- 批量处理执行
Master Node
etcd
是 Kubernetes 提供的一个高可用的键值数据库,用于保存集群所有的网络配置和资源对象的状态信息,也就是保存了整个集群的状态。数据变更都是通过api server进行的。
- 整个kubernetes系统中一共有两个服务需要用到etcd用来协同和存储配置
- 1)网络插件flannel,其它网络插件也需要用到etcd存储网络的配置信息;
- 2)kubernetes本身,包括各种资源对象的状态和元信息配置。
- 命令
- 【查看状态】service etcd status
- 日志查看
- sudo journalctl -xe |grep etcd
- 路径
- /opt/k8s-install/systemd
kube-apiserver
kube-APIserver提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。
- 功能
- 提供了集群管理的REST API接口(包括认证授权、数据校验以及集群状态变更)
- 提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd)
- 是资源配额控制的入口
- 拥有完备的集群安全机制
- API访问
- 本地端口8080
- 用于接收HTTP请求
- 默认的IP地址为“localhost”
- 非认证或授权的HTTP请求通过该端口访问API Server
- 安全端口6443
- 用于接收HTTPS请求
- 默认IP地址为非本地(Non-Localhost)网络端口
- 用于基于Tocken文件或客户端证书及HTTP Base的认证
- 用于基于策略的授权
- 本地端口8080
- 命令
- 【查看状态】service kube-apiserver status
kube-controller-manager
kube-Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
- 命令
- 【查看状态】service kube-controller-manager status
kube-scheduler
kube-scheduler是以插件形式存在的组件,正因为以插件形式存在,所以其具有可扩展可定制的特性。kube-scheduler相当于整个集群的调度决策者,其通过预选和优选两个过程决定容器的最佳调度位置。
kube-scheduler(调度器)的指责主要是为新创建的pod在集群中寻找最合适的node,并将pod调度到Node上
从集群所有节点中,根据调度算法挑选出所有可以运行该pod的节点
再根据调度算法从上述node节点选择最优节点作为最终结果
Scheduler调度器运行在master节点,它的核心功能是监听apiserver来获取PodSpec.NodeName为空的pod,然后为pod创建一个binding指示pod应该调度到哪个节点上,调度结果写入apiserver
- 功能
- 集群高可用:如果 kube-scheduler 设置了 leader-elect 选举启动参数,那么会通过 etcd 进行节点选主( kube-scheduler 和 kube-controller-manager 都使用了一主多从的高可用方案)
- 调度资源监听:通过 list-Watch 机制监听 kube-apiserver 上资源的变化,这里的资源主要指的是 Pod 和 Node
- 调度节点分配:通过预选(Predicates)与优选(Priorites)策略,为待调度的 Pod 分配一个 Node 进行绑定并填充nodeName,同时将分配结果通过 kube-apiserver 写入 etcd
- 命令
- 【查看状态】service kube-scheduler status
Worker Node
kubelet
会监视已分配给节点的pod,负责pod的生命周期管理,同时与Master密切协作,维护和管理该Node上面的所有容器,实现集群管理的基本功能。即Node节点通过kubelet与master组件交互,可以理解为kubelet是Master在每个Node节点上面的agent。本质上,它负责使Pod的运行状态与期望的状态一致。
kube-proxy
是实现service的通信与负载均衡机制的重要组件,将到service的请求转发到后端的pod上。
- 命令
- 【启动】service kube-proxy start
- 【查看状态 】service kube-proxy status
- 【启动】 systemctl start kube-proxy
- 【查看状态 】 systemctl stop kube-proxy
docker
是负责容器的创建和管理工作。
核心组件
CoreDNS
在k8s集群中调度运行提供DNS服务的Pod,同一集群中的其他Pod可使用此DNS服务解决主机名。
coredns 实现了集群内部通过服务名进行可以访问
k8s通过其附件组件之一的KubeDNS(或CoreDNS)为系统内置了服务发现功能,它会为每个service配置DNS名称,并允许集群内的客户端直接使用此名称发出访问请求,而service则通过iptables或ipvs内建立负载均衡机制
使用coreDNS实现K8S基于DNS的服务发现:https://www.kubernetes.org.cn/4694.html
Ingress Controller
Service是一种工作于传输层的负载均衡器,而Ingress 是在应用层实现的HTTP(s) 负载均衡机制。
Heapster
容器和节点的性能监控与分析系统,它收集并解析多种指标数据,如资源利用率,生命周期事件等。
Kubernetes Dashboard
Kubernetes 集群的全部功能都要基于Web 的UI,来管理集群中的应用甚至是集群自身。
calico
calico为容器和虚拟机工作负载提供一个安全的网络连接。
calico on K8S从入门到精通: https://www.kubernetes.org.cn/4960.html
常用命令
命令 | 解释 |
---|---|
kubectl apply、create、delete、replace -f deployment.yaml | 通过yaml文件创建,删除,替换资源 |
kubectl delete [pod、deploy、svc、node、ds、ns…] {资源名} [-n namespace] | 删除资源,除了kubectl delete pod之外,其他慎用 |
kubectl describe [po、deploy、svc、node、ds、ns、…] {资源名} [-n namespace] | 查询某个资源的详细信息 |
kubectl edit [cm、depoly、svc] {资源名} [-n namespace] | 编辑yaml文件内容 |
kubectl exec -it {pod名称} [容器名称] [bash、sh] [-n namespace] | 进入到容器中 |
kubectl get [po、deploy、svc、node、ds、ns、…] [-o wide -n namespace] | 查询某种资源的信息po: pod、deploy: deployment、svc: service、node: node、ds: deamonSet、ns: namespace -o wide -n namespace根据查询的资源类型不同可选 |
kubectl logs {pod名字} | 查询某个pod的输出日志 |
exit | 退出容器 |
常用脚本
强制删除pod
kubectl delete pod node-pod-q5z72 --force --grace-period=0 -nkube-system
重启kube-system命名空间下所有calico pod
kubectl get po -nkube-system|grep calico | awk ‘{print $1}’ | xargs kubectl delete pod -nkube-system
清理集群中所有状态为Evicted的pod
#!/bin/bash
# '去除第一行'
for ns in `kubectl get ns | awk 'NR>1{print $1}'`
do
kubectl get pods -n ${ns} | grep Evicted | awk '{print $1}' | xargs kubectl delete pod -n ${ns}
done