1. 一个deployment如何让外部访问.svc的作用是什么 2. Pod生命周期中的重要行为 运行初始化容器过程(init container) 运行主容器过程(main container) post start liveness readliness StartProbe pre stop 3. k8s资源限制如何做 有什么好处和目的 pod的服务质量QoS是什么意思 4. 如何做命名空间级的资源限制 ResourceQuota 5. node亲和度和反亲和度 有哪些场景需要 6. pod的亲和度和反亲和度 有哪些场景需要 7. 简单说下k8s 污点和污点容忍 有哪些场景下使用 8. k8s如何做自动化监控 需要装哪些组建来获取k8s集群状态和资源状态 kube-state-metrics metrics-server 两个有什么区别 9. 说下你知道的k8s资源 ( deployment svc pod daemonset statefullset job serveraccount ) 10. k8s 如何创建一个只读用户 11 简单说下 role clusterrole rulebinding clusterrole binding 有什么用途 12. 简单说下 k8s数据存储 常用的有哪些 PVC: PersistenVolume 和 PersistentVolumeClaim EmptyDir: pod 销毁时数据会被永久删除! HostPath: pod 销毁后该目录下的数据依然存在! 13. 一个pod启动不了,有哪些排查方式 14. 服务访问不通, 排查思路有哪些 promethues 要问一下 常用的监控组建有哪些 node_export redis_export kafka_export mysql_export 如何做告警抑制 django开发的知识 elk 日志收集 elk grok如何写 ansible 简单了解下深浅 数据库 主从 索引类型 redis 有哪几种数据类型 # kube-state-metrics 主要关注的是业务相关的一些元数据,比如 Deployment、Pod、副本状态等 # metrics-server 主要关注的是资源度量 API 的实现,比如 CPU、文件描述符、内存、请求延时等指标。 用作于HPA和kubectl top 使用 它基于client-go开发, 轮询Kubernetes API,并将Kubernetes的结构化信息转换为metrics https://www.cnblogs.com/wn1m/p/11293865.html https://github.com/yanghongfei/Kubernetes https://k8syaml.com/ https://kubernetes.io/zh/docs/concepts/ # 官方中文文档 https://www.kubernetes.org.cn/k8s # 中文文档中心 https://www.jianshu.com/p/62e71584d1cb # 容器开放接口规范(CRI OCI CNI) https://www.jianshu.com/p/aaae5ea7f7ff # Pod控制器 https://www.cnblogs.com/fuyuteng/p/11598768.html # kubernetes核心组件kube-proxy https://www.cnblogs.com/skyflask/p/11212452.html https://www.cnblogs.com/zhujingzhi/p/9760198.html https://www.cnblogs.com/dream397/p/14955223.html https://www.cnblogs.com/dream397/p/14955223.html Docker编排工具 docker compose, docker swarm, docker machine # 编排(docker 自身工具) Mesos(资源分配) + Marathon(面向容器编排的框架) kuberneters # Mesos Apache Mesos 是一个分布式系统的管理软件,对集群的资源进行分配和管理 # 调度框架,K8S、Mesos、Swarm Kubernetes(哭8 nai 提死)、Apache Mesos(埋搜)、docker Swarm(死我木) # Dcoker Swarm 集群部署 Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的, 代码开源在https://github.com/docker/swarm, 它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的Docker # Docker Machine 是一种可以让您在虚拟主机上安装 Docker 的工具,并可以使用 docker-machine 命令来管理主机。 也可以集中管理所有的 docker 主机,比如快速的给 100 台服务器安装上 docker DevOps: CI:持续集成 (代码自动编译,自动测试) CD:持续交付 delivery (代码通过CI后,打包好交付给运维或仓库) CD:持续部署 Deployment (代码自动发布到线上) Kubernetes: 1.14.3 1.16.3 1.18.4 1.20.6 自动装箱 自我修复 水平扩展 服务发现 负载均衡 自动发布和回滚 密钥和配置管理 存储编排 批处理运行 # k8s核心概念 Deployment(di pao le men te) # 应用管理者 ReplicaSet # 管理Pod的组件副本集() Service # 服务发现 - 找到每个Pod selector # 标签选择器 kube-proxy # kube-proxy 监听 apisever中 Service 的变化 来生成对应的 ipvs # kube-proxy 是k8s中的组件之一,是以Pod形式真实运行的进程,而service的代理功能 有 kube-proxy 来具体实现 lable # 标签 RollingUpdate # 滚动升级 Pod: Label Label Selector # Kubernetes 最小调度单位 有生命周期 Label : key=value Lable Selector pause -- (pao zi) # 把其他容器link到一起负责整个pod的监控检查 # 重要概念:Pod内的容器都是平等的关系,共享Network Namespace、共享文件 # pause容器的最主要的作用:创建共享的网络名称空间,以便于其它容器以平等的关系加入此网络名称空间 # pause进程是pod中所有容器的父进程(即第一个进程)(关联prod里的容器/健康检查汇报给k8s) Container(容器) (ken ten ne) # 容器 # k8s 架构设计 master /node master: API Server Scheduler Controller-Manager。 node: kubelet kube-proxy docker(容器引擎) Pod: Label Label Selector Label : key=value Lable Selector scheduler(si gai zhe le) # 集群中的调度器,负责Pod在集群节点中的调度分配。 ControllerManager(ken chuo le xxx) # 集群内部的管理控制中心,其主要目的是实现Kubernetes集群的故障检测和恢复的自动化工作, # 比如根据RC的定义完成Pod的复制或移除,以确保Pod实例数符合RC副本的定义; # 根据Service与Pod的管理关系,完成服务的Endpoints对象的创建和更新; # 其他诸如Node的发现、管理和状态监控、死亡容器所占磁盘空间及本地缓存的镜像文件的清理等工作也是由Controller Manager完成的。 API Server # 提供了资源对象的唯一操作入口,其他所有组件都必须通过它提供的API来操作资源数据, # 通过对相关的资源数据“全量查询”+“变化监听”,这些组件可以很“实时”地完成相关的业务功能。 etcd # 用于持久化存储集群中所有的资源对象,如Node、Service、Pod、RC、Namespace等; # API Server提供了操作etcd的封装接口API,这些API基本上都是集群中资源对象的增删改查及监听资源变化的接口 prod Kubelet (ku bi 来 特) # 负责本Node节点上的Pod的创建、修改、监控、删除等全生命周期管理,同时Kubelet定时“上报”本Node的状态信息到API Server里 Docker kube-proxy # kube-proxy 监听 apisever中 Service 的变化 来生成对应的 ipvs # POD管理器类型 自主式 Pod # 直接定义 pod 资源配置清单的方式,来启动pod 控制器管理的pod ReplicationController # 目前ReplicationController已经被ReplicaSet完全取代了, # 而我们也不会直接去创建ReplicaSet,是使用Deployment去管理ReplicaSe Deployment(无状态) —— ReplicaSet 副本集控制器 HorizontalPodAutoscaler(后面简称HPA)作为通用横向扩容的实现(先了解) # HPA简介 HPA(Horizontal Pod Autoscaler)是kubernetes(以下简称k8s)的一种资源对象, 能够根据某些指标对在statefulSet、replicaController、replicaSet等集合中的pod数量进行动态伸缩, 使运行在上面的服务对指标的变化有一定的自适应能力。 HPA目前支持四种类型的指标,分别是 Resource、Object、External、Pods 类型的指标 # 其中在稳定版本autoscaling/v1中只支持对CPU指标的动态伸缩,在测试版本autoscaling/v2beta2中支持memory和自定义指标的动态伸缩,并以annotation的方式工作在autoscaling/v1版本中。 apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: mynginx spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: mynginx minReplicas: 2 maxReplicas: 10 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 50 - type: Resource resource: name: memory targetAverageValue: 50Mi StatefulSet (si tei te )—— 有状态 副本集控制器 DaemonSet —— 需要在每个 node上运行一个副本 则需要 DaemonSet Job - 运行作业 CronJob ——周期性作业 附件 (AddOns) # k8s 网络插件 master 和 node 都需要安装 CNI: 网络容器接口 flannel(fu lan ner) # 网络配置 (不支持网络策略) calico (kai li kou) # 网络配置 和 网络策略 # Calico是Kubernetes生态系统中另一种流行的网络选择。虽然Flannel被公认为是最简单的选择, # 但Calico以其性能、灵活性而闻名。Calico的功能更为全面,不仅提供主机和pod之间的网络连接, # 还涉及网络安全和管理。Calico CNI插件在CNI框架内封装了Calico的功能 k8s中网络怎么分层的 node网络 Service 网络 pod 网络