云原生-k8s核心概念(pod,deploy,service,ingress,configmap,volume)

本文详细介绍了Kubernetes中的关键概念,包括namespace、Pod、Deployment、Service、NodePort、ingress、存储Volume(如PV、PVC)、ConfigMap和Secret。讨论了如何通过这些组件实现资源隔离、多副本管理、服务发现、外部访问、数据持久化以及安全配置。通过实例展示了如何使用这些工具在云原生环境中构建和管理应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Gitee-k8s学习
云原生实战-kubernetes核心实战

namespace

Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离
请添加图片描述

Pod

Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。
请添加图片描述

Deployment

kubernetes很少直接控制Pod,一般都是通过Pod控制器来完成的。Pod控制器用于pod的管理,确保pod资源符合预期的状态,当pod的资源出现故障时,会尝试进行重启或重建pod。
请添加图片描述
deployment:pod控制器,控制一组标签相同的pod,使Pod拥有多副本,自愈,扩缩容,滚动更新,版本回退等能力

请添加图片描述

service

Service可以看作是一组同类Pod对外的访问接口。同类pod指的是标签相同的pod
即可以通过pod的ip访问pod,一组同类的pod统一对外提供一个ip地址叫service ip,访问service ip,然后请求轮询给到service下的各个pod
请添加图片描述
在这里插入图片描述
svc两种模式,ClusterIP默认是集群内ip才能访问,
下面为例子,在master节点上可以通过pod ip访问pod,也可以通过访问service,让service将请求轮询打到同一label的pod上
在这里插入图片描述
在这里插入图片描述

NodePort-SVC

如果希望将Service暴露给集群外部使用,那么就要使用到另外一种类型的Service,称为NodePort类型。NodePort的工作原理其实就是将service的端口映射到Node的一个端口上,然后就可以通过NodeIp:NodePort来访问service了
请添加图片描述
如下图:和下下图,集群内任意一个Nodeip:NodePort,
外部访问通过NodePort,打到对应的Nodeport类型的service上(service port),然后service将请求分给service下统一label的pod,每个pod有自己的port,在配置文件中叫targetport
在这里插入图片描述
请添加图片描述

ingress

ingress:kubernetes中的一个对象,作用是定义请求如何转发到service的规则
ingress controller:具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发,实现方式有很多,比如Nginx, Contour, Haproxy等等
请添加图片描述
如下配置,hello.atguigu.com这个域名直接访问到hello-server这个service,然后根据service的配置文件轮询分配给同一个label的pod。

apiVersion: networking.k8s.io/v1
kind: Ingress  
metadata:
  name: ingress-host-bar
spec:
  ingressClassName: nginx
  rules:
  - host: "hello.atguigu.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        
<think>好的,我现在要帮用户整理KubernetesK8s)的面试题,包括框架原理、常用命令和常见问题。首先,我需要明确用户的需求,他们可能正在准备面试,需要全面而详尽的内容。用户提到“详尽版本”,所以需要覆盖广泛的主题,同时保持结构清晰。 首先,我应该从框架原理入手,因为这是面试中常问的核心内容。需要解释K8s的架构,包括Master节点和Worker节点的组件。每个组件的作用必须清楚,比如API Server、etcd、Controller Manager、Scheduler、kubelet、kube-proxy等。可能还需要对比不同版本的变化,比如cloud-controller-manager的引入。 接下来是核心概念,比如PodDeploymentServiceIngressConfigMap和Secret、Volume、Namespace、Label和Selector。这些是基础,必须详细说明各自的作用和使用场景。例如,Service的类型ClusterIP、NodePort、LoadBalancer的区别,以及Ingress如何管理外部访问。 然后是调度机制,包括资源请求与限制、污点和容忍、节点亲和性。这部分需要结合实际例子,说明如何优化Pod的调度策略。 工作负载控制器部分,Deployment、StatefulSet、DaemonSet、Job/CronJob的区别和应用场景,比如Deployment用于无状态应用,StatefulSet适用于有状态服务。 网络模型方面,需要解释K8s的网络通信,Pod之间如何通信,CNI的作用,以及Service的负载均衡机制。存储部分要区分临时卷和持久卷,PV和PVC的绑定过程。 接下来是常用命令,用户可能需要快速查阅,所以需要列出kubectl的常见操作,如查看资源、创建/删除、调试Pod、扩展应用、暴露Service等。命令示例要准确,比如使用`kubectl get pods -o wide`查看详细信息。 常见问题部分需要覆盖实际应用中的典型问题,比如ImagePullBackOff的可能原因,Pending状态的排查方法,如何查看日志和进入容器调试。滚动更新和回滚的步骤,以及网络策略和存储问题的处理。 最后,面试题示例要涵盖基础、进阶和场景题,测试用户的理解深度,比如etcd的作用、Deployment和StatefulSet的区别、ServiceIngress的差异,以及故障排查的实际操作。 需要确保内容准确,结构合理,使用中文,符合LaTeX格式要求。检查是否有遗漏的重要概念,比如RBAC、Helm、Operator模式,这些可能也是高级面试会涉及的内容。同时,要避免过于技术化的术语,保持解释的易懂性。可能还需要加入一些最佳实践,比如资源限制的设置,健康检查的配置,帮助用户全面准备。</think>以下为KubernetesK8s)面试题的详尽整理,涵盖框架原理、常用命令和常见问题: # 一、框架原理 ## 1. 核心架构 $$ \text{K8s架构} = \text{Master节点} + \text{Worker节点} $$ - **Master组件**: - **API Server**:集群操作的唯一入口(RESTful API) - **etcd**:分布式键值存储数据库(存储集群状态) - **Controller Manager**:维护集群状态(节点控制/副本控制等) - **Scheduler**:调度Pod到合适节点 - **Cloud Controller Manager**(v1.6+):对接云平台 - **Worker组件**: - **kubelet**:管理Pod生命周期 - **kube-proxy**:维护网络规则(Service实现核心- **容器运行时**:Docker/Containerd/CRI-O ## 2. 核心概念 - **Pod**:最小部署单元(1个或多个容器共享网络/存储) - **Deployment**:声明式管理Pod副本集(支持滚动更新) - **Service**:定义Pod访问策略(ClusterIP/NodePort/LoadBalancer) - **Ingress**:管理外部访问(HTTP/HTTPS路由规则) - **ConfigMap/Secret**:配置与敏感数据管理 - **Volume**:数据持久化存储(emptyDir/hostPath/PV等) - **Namespace**:逻辑隔离集群资源 - **Label/Selector**:资源标识与选择机制 ## 3. 调度机制 - **资源请求与限制**: ```yaml resources: requests: cpu: "0.5" memory: "512Mi" limits: cpu: "1" memory: "1Gi" ``` - **Taint(污点)与Toleration(容忍)**:节点排斥策略 - **节点亲和性**:强制/优先调度规则 ## 4. 工作负载控制器 | 类型 | 适用场景 | 特点 | |---------------|-------------------------|-----------------------------| | Deployment | 无状态应用 | 滚动更新、版本回滚 | | StatefulSet | 有状态应用(如数据库) | 固定网络标识、有序部署 | | DaemonSet | 集群守护进程(如日志收集)| 每个节点运行一个Pod | | Job/CronJob | 批处理任务 | 任务完成后终止 | ## 5. 网络模型 - **Pod间通信**:每个Pod分配唯一IP,直接通信 - **Service网络**:虚拟IP+端口映射(kube-proxy维护iptables/ipvs规则) - **CNI插件**:Calico/Flannel/Weave等实现网络方案 ## 6. 存储机制 - **Volume类型**: - 临时卷:emptyDir - 节点卷:hostPath - 网络存储:NFS/CEPH - **PV/PVC**:持久卷声明与绑定 # 二、常用命令速查 ## 1. 基础操作 ```bash kubectl get pods -n [namespace] # 查看Pod列表 kubectl describe pod [pod-name] # 查看Pod详情 kubectl create -f config.yaml # 创建资源 kubectl delete pod [pod-name] # 删除资源 ``` ## 2. 调试命令 ```bash kubectl logs [pod-name] -c [container] # 查看容器日志 kubectl exec -it [pod-name] -- /bin/bash # 进入容器 kubectl port-forward [pod] 8080:80 # 端口转发 ``` ## 3. 部署管理 ```bash kubectl scale deploy [name] --replicas=3 # 扩展副本数 kubectl rollout status deploy/[name] # 查看滚动更新状态 kubectl rollout undo deploy/[name] # 回滚版本 ``` # 三、常见问题排查 ## 1. Pod异常状态 - **ImagePullBackOff**: - 镜像名称错误 - 私有仓库认证失败 - 网络不通 - **Pending**: - 资源不足(CPU/Memory) - 节点存在污点 - 未匹配节点选择器 ## 2. 网络问题 ```bash kubectl get endpoints [service-name] # 检查Service后端Pod iptables-save | grep [service-ip] # 验证iptables规则 nslookup [service-name].[namespace] # 测试DNS解析 ``` ## 3. 存储问题 ```bash kubectl describe pvc [pvc-name] # 查看PVC绑定状态 kubectl get storageclass # 检查存储类配置 df -h # 查看节点磁盘空间 ``` # 四、高频面试题 ## 基础题 1. etcd在K8s中的作用是什么? 2. Deployment和StatefulSet的主要区别? 3. Service ClusterIP与NodePort的区别? ## 进阶题 1. 如何实现蓝绿部署?给出具体方案 2. 描述Pod创建的全流程(API Server到kubelet) 3. Ingress Controller的工作原理? ## 场景题 1. 当Pod持续重启时,如何快速定位问题? 2. 如何实现跨命名空间的服务访问? 3. 设计一个高可用K8s集群需要考虑哪些因素? # 五、最佳实践 1. **资源限制**:所有Pod必须设置requests/limits 2. **健康检查**: ```yaml livenessProbe: httpGet: path: /healthz port: 8080 readinessProbe: tcpSocket: port: 80 ``` 3. **HPA配置**:基于CPU/内存的自动扩缩容 $$ \text{延伸学习} \rightarrow \text{RBAC权限控制} \quad \text{Helm包管理} \quad \text{Operator模式} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值