k8s知识点概要

k8s知识点概要

1、首先说一下我对k8s的了解。(什么是Kubernetes?)
Kubernetes是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载平衡。Kubernetes是一个容器集群管理系统, Kubernetes简称K8S。k8s用于容器化应用程序的部署、扩展和管理。
k8s提供了容器编排、资源调度、弹性伸缩、部署管理、服务发现等功能。k8s的目标是让部署容器化应用简单高效。

2、kebernetes 能做什么?(kubernetes的特性是什么?)
Kubernetes是让部署容器化的应用简单并且高效,Kubernetes提供了资源调度、部署管理、服务发现、扩容缩容、监控功能。
K8S优势:
容器编排;轻量级;开源;弹性伸缩;负载均衡

kubernetes的特性:
(1) 自我修复:
在节点故障时重新启动失败的容器,替换和重新部署,保证预期我们设置的副本的数量;
杀死健康检车失败的容器,并且在没有准备好之前是不会处理客户端请求的,保证线上服务不中断。
(2)弹性伸缩:
使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用的程序实例(容器的副本数),
保证应用业务高峰并发时的高可用性。
(3)自动部署和回滚:
k8s 采用滚动更新的策略更新应用,一次更新一个Pod,而不是同时删除所有的pod,如果更新过程中出现问题,将回滚更改,确保升级不影响业务。
(4) 服务发现和负载均衡
k8s为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP的问题
(5)机密数据(密码,证书)和配置管理
k8s提供存储能力(可以把密码加密放在容器存储中)
管理机密数据和应用程序的配置,而不需要把敏感的数据暴露在镜像里,提高敏感数据的安全性,并且可以把一些常用的配置存储在k8s中,方便应用程序的使用
(6)存储编排
挂载外部的存储系统,无论是来自本地存储,公有云,还是网络存储NFS、Ceph都作为集群资源的一部分使用,极大的提高存储使用灵活性
(7) 批处理
提供一次性任务,定时任务,满足批量数据处理和分析的场景。
3、Kubernetes与Docker有什么关系?
Docker提供容器的生命周期管理,Docker镜像构建运行时容器。但是,由于这些单独的容器必须通信,因此使用Kubernetes。因此,我Docker构建容器,这些容器通过Kubernetes相互通信。

4、Kubernetes集群架构与组件。
Kubernetes属于主从分布式架构,主要由Master和Worker Node组成,包括客户端命令行工具kubectl和其它附加项。
Master作为控制节点,对集群进行统一的调度和管理;比如所有的增加、删除、修改、查找容器都是在master上操作。Master由API Server、Scheduler调度器、存储etcd和Controller-Manger Server控制器管理器组件组成;
Worker Node:作为真正的工作节点,运行业务应用的容器;Node 由 Master 管理,Node 负责监控并汇报容器的状态,并根据 Master 的要求管理容器的生命周期。Worker Node包含kubelet、kube proxy和Container Runtime;
kubectl:客户端工机具,用于通过命令行与API Server进行交互,对Kubernetes集群进行操作,实现在集群中进行增删改查等操作;
总结:
Master 组件:
Master是集群控制管理节点,k8s集群的管理节点,负责管理集群,所有的命令都经由master处理,比如所有的增加、删除、修改、查找容器都是在master上操作。拥有Etcd存储服务,运行Api Server进程,Controller Manager服务进程及Scheduler服务进程,关联工作节点Node。

kube-apiserver :
Kubernetes API 集群的统一入口,各组件的协调者,增删改查和监听操作都交给APIServer处理后再提交给etcd数据库做持久化存储
Kube-controller-manager:
处理集群中常规后台任务,一个资源对应一个控制器,而controllerManager就是负责处理这些控制器。
kube-scheduler:
Kubernetes Schedule 是kubernetes的调度服务,负责资源调度(Pod调度)的进程,根据调度算法为新创建的Pod选择一个Node节点。
etcd:
Kubernetes使用etcd作为集群整体存储,分布式键值存储系统,用于保存集群状态数据,比如Pod,Service等对象信息。
Node组件:
Node节点是kubernetes集群的工作负载节点。Node是Kubernetes集群操作的单元,用来承载被分配Pod的运行,是Pod运行的宿主机。关联Master管理节点,运行docker eninge服务,守护进程kubelet及负载均衡器kube-proxy。
kubelet:
  kubelet 是Master在Node节点上的Agent,管理本机运行容器的生命周期,比如创建容器,Pod挂载数据卷,下载secret,获取容器和节点状态等工作,kubelet 将每个Pod转换成一组容器
kube-proxy:
  在Node节点上实现Pod网络代理,维护网络规则和四层负载均衡工作。实现让Pod节点(一个或者多个容器)对外提供服务
docker引擎:
容器引擎,运行容器

Kubernetes 核心概念总结:
Pod
• 最小部署单元
• 一组容器的集合
• 一个Pod中的容器共享网络命名空间
• Pod是短暂的
Controllers:controller负责维护集群的状态,比如故障检测、自动扩展、滚动更新
• ReplicaSet : 确保预期的Pod副本数量
• Deployment : 无状态应用部署
• StatefulSet : 有状态应用部署
• Job : 一次性任务
• Cronjob : 定时任务
更高级层次对象,部署和管理Pod
Service
• 防止Pod失联
• 定义一组Pod的访问策略
Label : 标签,附加到某个资源上,用于关联对象、查询和筛选
ns: 命名空间,将对象逻辑上隔离

5、请你总结一下Kubernetes各组件之间的关系?
(1)Kubernetes的架构由一个master和多个node组成,master通过api提供服务,接受kubectl的请求来调度管理整个集群。 kubectl:是 k8s 平台的一个管理命令。
(2)Controller Manager是Kubernetes所有资源对象的自动化控制中心。
(3)service 则对外网提供的服务。
(4)Kubernetes 是个管理平台,node上的 proxy 拥有提供真实服务公网 IP。客户端访问kubernetes 中提供的服务,是直接访问到 kube-proxy。
(5)在 Kubernetes 中 pod 是一个基本单元,一个 pod 可以是提供相同功能的多个 container,这些容器会被部署在同一个node上。node是运行 Kubelet 中容器的宿主机。node接受 master的指令创建 pod 或者容器。

6、如何使用kubeadm搭建Kubernetes 容器集群管理系统。
K8s三种部署方式:
(1)Minikube单点部署k8s。
(2)Kubeadm:Kubeadm也是一个工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群。
(3)二进制部署k8s。

7、kubernetes 常用命令总结
下面是要重点记住的命令哦!
查看组件健康状态:kubectl get cs
查看节点信息:kubectl get nodes
获取当前系统上所有在运行的pod的状态:kubectl get pods -n kube-system
获取当前系统的名称空间:kubectl get ns
查看pod的详细信息,则添加选项-o wide: kubectl get pods -n kube-system -o wide
删除node节点: kubectl delete node
重置kubeadm: kubeadm reset
删除 pod: kubectl delete pod+pod名
查看pod:kubectl get pod
删除 deployment:kubectl delete deployment +部署名
删除service:kubectl get svc
删除服务:kubectl delete svc +服务名
查看集群中的所有namespace:kubectl get namespace
描述资源对象:kubectl describe nodes
kubectl describe pods -n kubectl describe
kubectl describe pods
查看资源对象:
kubectl get nodes
kubectl get pods -n -o wide
查看容器的日志:
kubectl logs
kubectl logs -f -c (相当于tail -f 命令)
使用 describe 查看 pod 的详细描述信息:
语法: kubectl describe pod pod名字
语法: kubectl describe node node名字
语法: kubectl describe deployment deployment名字
创建资源对象:kubectl create -f xxx.yaml(文件)、kubectl create -f
显示Pod的更多信息:kubectl get pods -n -o wide
以yaml格式显示:kubectl get pods -n -o yaml

kubectl 相关命令参数总结:
总结(一定要记住的)
kubectl edit 使用默认的编辑器编辑一个资源。
kubectl replace 通过文件名或标准输入替换一个资源
kubectl patch 使用补丁修改、 更新资源的字段
kubectl apply 通过文件名或标准输入对资源应用配置
kubectl scale 扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job
kubectl autoscale Deployment/ReplicaSet/RC 的自动扩展设定
kubectl cordon 标记节点不可调度
kubectl uncordon 标记节点可调度
kubectl drain 驱逐节点上的应用,准备下线维护设定(node 进入维护模式)

8、你对Kubernetes的集群了解多少?
部署文件将具有提供给集群服务所需的所有配置。部署文件将被提供给API,然后由集群服务决定如何在环境中安排这些pod,并确保正确运行的pod数量。因此,位于服务前面的API,工作节点和节点运行的Kubelet进程,共同构成了Kubernetes集群。

9、什么是Kubectl?
Kubectl是一个平台,您可以使用该平台将命令传递给集群。因此,它提供了针对Kubernetes集群运行命令的方法,相当于一个命令行工具。

10、你对Kube-proxy有什么了解?
Kube-proxy可以在每个节点上运行,并且可以跨后端网络服务进行简单的TCP / UDP数据包转发。基本上,它是一个网络代理,它反映了每个节点上Kubernetes API中配置的服务。因此,Docker可链接的兼容环境变量提供由代理打开的群集IP和端口。

11、简要说下Kubernetes有哪些核心组件以及这些组件负责什么工作?(面试题)
etcd:提供数据库服务保存了整个集群的状态。
kube-apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制。
kube-controller-manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等 。kube-proxy:负责为Service提供内部的服务发现和负载均衡,并维护网络规则 。
docker引擎:是负责管理运行容器的软件。

12、k8s怎样监控?
首先要了解k8s需要监控什么。
(1)Kubernetes本身监控:Node资源利用率,Node数量,Pods数量(Node)资源对象状态
(2) Pod监控:Pod数量,容器资源利用率,应用程序。
对于容器的监控 :
prometheus使用cadvisor采集容器监控指标,cadvisor集成在k8s的kubelet中-通过prometheus进程存储-使用grafana进行展现。
对于node的监控:
通过node_exporter采集当前主机的资源-通过prometheus进程存储-使用grafana进行展现。
对于master的监控:
通过kube-state-metrics插件从k8s中获取到apiserver的相关数据-通过prometheus进程存储-使用grafana进行展现

13、Kubernetes 存储系统
存储系统组成:
(1)Volume是最基础的存储抽象,其支持多种类型,包括本地存储、NFS、FC以及众多的云存储,通过volume属性来定义存储的类型,通过volumeMount来定义容器内的挂载点。

(2)PersistentVolume(PV,持久卷),是集群中由管理员配置的一块存储,PV是Kubernetes中的一个资源对象,就和节点是集群资源一样,它的生命周期独立于使用PV的任何pod个体。

(3)PersistentVolumeClaim(PVC,持久卷声明),PVC是用户对存储资源PV的请求,它类似于一个pod,pod消耗节点资源,而PVC消耗PV资源。

(3) PVC是对PV的请求,当和Storage Class(Storage Class是PV的分类器)一起使用时,它将触发与相匹配PV的动态绑定。

14、K8s如何进行后端持久化存储?
可以搭建ceph集群,使用k8s创建容器测试挂载,实现数据持久化存储。

15、k8s的ELK集群监控容器日志知识点总结。架构选择(ELK VS EFK)
ELK
1、多个Filebeat在各个业务端进行日志采集,然后上传至Logstash。

2、多个Logstash节点并行(负载均衡,不作为集群),对日志记录进行过滤处理,然后上传至Elasticsearch集群。

3、多个Elasticsearch构成集群服务,提供日志的索引和存储能力。

4、Kibana负责对Elasticsearch中的日志数据进行检索、分析。
在该架构中,还可以加入中间件,如Redis、Kafak:Kafka集群作为消息缓冲队列,可以降低大量FIlebeat对Logstash的并发访问压力。
EFK
Elasticsearch + Fluentd + Kibana。Fluentd作为日志采集客户端。相对于Filebeat,Fluentd并没有突出的优势。推荐ELK架构。
日志采集方式:
方式1:Node级日志代理
方式2:伴生容器(sidecar [ˈsaɪdkɑːr] container)作为日志代理
方式3:应用直接上传日志
最好采用ELK+Filebeat架构!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值