k8s的基础概念
k8s本质是一个容器编排系统,可以管理容器的生命周期,应用部署,更新,维护,应用提供服务,扩容缩容应用,故障自愈。
k8s与docker的关系
docker:是一种轻量级的虚拟化技术。运维层面主要用途是:隔离各个应用部署时在系统上的冲突。一般使用dockerfile来自定义容器创建。
k8s是容器管理工具。它可以实现容器集群的自动化部署,自动化扩容,缩容等功能
K8s集群工作模式
k8s集群将机器划分为一个master结点和一群工作结点node
在mster结点机器上运行这一组进程: kube-apiserver, kube-controller-manager 和 kube-scheduler , 这些进程管理这集群资源的调度, 弹性伸缩 Pod调度, 安全控制,系统监控 等功能
简述k8s中的 minikube Kubectl kubelet?
Minikube 是一个本地运行单节点的k8s集群工具
Kubectl 是一个命令行工具,检查集群资源,创建,删除和更新组件,查看应用程序
Kubelet是一个代理服务,在每个结点上运行,并使从服务器与主服务器通信
工作节点kubelet的功能,作用是什么?
- 节点管理
kubelet启动时会向api-server进行注册,然后定义的向api-server汇报本节点的状态,资源使用情况,节点是否失联等相关信息,master知道整个集群所有节点的资源情况。
- pod管理
kubelet负责维护node节点上pod的生命周期(创建,更新,删除)
- 容器健康检查
pod中包含: 启动探针,存活探针,就绪探针。k8s会定期使用探针来检测容器是否存活,是否就绪。
- metrics Server资源监控
node节点上metrics Server 用于监控Pod 的内存,CPU,网络等资源使用情况。
pod是什么?
k8s不会直接处理容器,使用多个容器共存的理念,这组容器就叫做pod
pod是k8s中可以创建管理的最小单元,也是基本单元。
pod有什么特点?
-
每个pod就像一个独立的逻辑机器,k8s会为每个pod分配一个集群内部唯一的IP地址,所以每个pod都有自己的IP地址,主机名,进程等。
-
一个pod可以包含一个或多个容器,1个pod只能运行在单个节点上,不可能1个pod跨节点运行。
-
每个pod都有一个被称为"根容器"的pause容器,也称info容器,pause容器对应的镜像属于k8s的一部分
-
一个pod里的多个容器共享一个pod的IP , 意味这一个pod里面的多个容器所占用的端口不能相同,否则端口冲突。
-
pod是k8s中扩容,缩容的基本单位,k8s的缩容 扩容都是针对pod 而非容器、
pod的重启策略有哪些?
Pod重启容器的策略是针对pod内所有容器的重启策略 , 不是重启pod
Always: 当容器终止退出后,总是重启容器,默认策略是Always
OnFilure: 当容器异常退出,退出状态码非0时,才重启容器
Never: 当容器终止退出,不管退出状态码是什么,从不重启容器。
Pod一直处于pending状态,一般有哪些情况,怎么排查?
- 一个pod刚创建的时候,会处于pending状态,正在拉取镜像,或正在创建容器的过程中
2, 调度器调度失败,Scheduler调度器无法为pod分配一个合适的node结点
- pvc pv 无法动态创建。
deployment如何扩容或缩容
直接修改pod副本数即可
-
修改yaml文件replicates字段数值, 然后 kubectl apply -f xxx.yaml 来实现更新
-
使用 kubectl scale --replicates=5 deployment/deployment-nginx 命令来扩容缩容
deployment的更新策略有哪些?
-
recreate 重建更新, 会杀死集群所有正在运行的pod 然后在重新创建pod
-
rollingUpdate 滚动更新,在集群中逐个更新pod
deployment的回滚命令是什么?
在升级deployment时kubectl set image 命令加上 --record 参数可以记录具体的升级历史信息
使用 kubectl rollout history deployment/deployment-nginx 命令查看deployment升级历史记录
回滚到某个指定版本 kubectl rollout undo deployment/deployment-nginx --to-revision=2 命令来实现
k8s发布(暴露)服务 ,service 的类型有哪些?
-
nodeport: 最常用 用来对集群外暴露service 可以通过NodeIP:NodePort方式访问到service后端的endpoint
-
ClusterIP: k8s默认的ServiceType 通过集群内的ClusterIP在内部发布服务
简述ETCD是什么
etcd 是一个分布式,高可用,一致的key-value存储数据库
1 完全复制: 集群中每个节点都可以使用完整的存档
2.高可用性: 避免单点故障或网络延迟问题
3.一致性: 每次读取都会返回多主机的最新写入。
简述k8s自动扩容机制?
使用 HPA(Horizotal Pod Autoscaler) 控制器基于CPU使用率自动进行Pod扩缩容的功能
HPA周期性检查Pod资源性能指标,并与HPA资源对象中的扩缩容条件进行对比,满足条件对Pod副本数量进行调整。