网站首页 > 文章精选 正文
1. K8s 是为了解决什么问题出现?的和 Docker 有什么关系
k8s目的在于简化容器化应用程序的部署和管理,它提供了多种功能,例如自动上线和回滚、容器自我修复、水平扩展、存储编排、配置管理等,以满足程序化管理多方面的需求。
Docker 是一个容器化平台,而 k8s 是 Docker 等容器平台的协调器。
2. K8s中有哪些核心组件,它们分别负责什么
master节点
(1)kube-apiserver: 提供kubernetes API服务,负责处理外部和内部组件的请求,并将这些操作存储到etcd中
(2)etcd:一个分布式键值存储系统,用于存储kubernetes集群的数据。etcd 是CoreOS开源的,并不属于kubernetes集群本身,因此etcd可以独立于集群进行部署
(3)kube-controller-manager:负责管理多个控制器的程序,包括Node Controller、Replication Controller、Service Controller等
(4)kube-scheduler:根据判定的算法,将未指定节点的Pod分配到合适的节点上
node节点
(1)kubelet:运行在每个节点上,负责管理pod和容器的生命周期。如启动容器、挂载数据卷、获取容器状态以及向管理节点汇报等。
(2)kube-proxy:也是运行在每个节点上,负责实现集群内部的网络代理和负载均衡器功能。
(3)container-runtime(容器运行时):实际运行和管理容器的服务。kubernetes支持多种容器运行时,如Docker、containerd、CRI-O等,以及支持kubernetes CRI的实现
3.K8s中的最小单元是什么
Pod是K8s中最小的可部署和管理单元。
4. 什么是容器运行时,有哪些常用的
容器运行时(Container Runtime)是容器技术的核心组件,负责创建、管理和运行容器。它是容器化应用程序的底层引擎,提供了容器的基础执行环境和应用隔离机制
常见的容器进行时:
(1)Docker Engine
Docker 是最流行的容器运行时,提供了完整的容器生命周期管理功能。它通过集成 containerd 和 runc 来实现容器的创建和管理。
(2)containerd
containerd 是由 Docker 团队开发的下一代容器运行时,专注于高性能和可扩展性。
(3)CRI-O
CRI-O 是专门为 Kubernetes 设计的轻量级容器运行时。
(4)runc
runc 是一个低级容器运行时,实现了 OCI 标准。
(5)cri-dockerd
cri-dockerd 是一个适配器,允许 Kubernetes 使用 Docker 作为容器运行时。它将 Kubernetes 的 CRI 请求转换为 Docker 的原生 API 调用。
5. 什么是CNI,有哪些常用的
CNI(Container Network Interface) 是 Kubernetes 网络模型的实现标准,负责实现 pod 之间的直接通信:包括容器与主机的通信、同节点pod通信、跨节点pod通信
常用的有
(1)Flannel:最初识时常用网络插件,它使用了虚拟网络技术来实现容器之间的通信,支持多种网络后端
(2)Calico:基于 BGP的网络插件,它使用路由表来路由容器之间的流量,支持多种网络拓扑结构,并提供了安全性和网络策略功能
(3)Cilium:基于eBPF (Extended Berkeley Packet Filter)技术的网络插件,它使用 Linux 内核的动态插件来提供网络功能,如路由、负载均衡、安全性和网络策略等
6. Pod与容器有什么区别
Pod | 容器 | |
抽象层次 | K8s最小调度单元 | 应用运行实例 |
网络 | 共享网络命名空间 | 独立网络命名空间 |
存储 | 可共享存储卷 | 独立文件系统 |
生命周期 | 统一管理多个容器 | 单个进程生命周期 |
调度 | 作为整体被调度 | 不能直接被K8s调度 |
IP地址 | 一个Pod一个IP | 容器共享Pod IP |
7. 使用kubeadm安装一个Kubernetes集群
8. 使用Nginx镜像运行一个pod
(1)使用命令行创建
kubectl run nginx-pod --image=nginx:latest --port=80
(2)使用yaml
apiVersion: v1
kind: Pod
metadata:
labels:
app: nginx-pod
name: nginx-pod
spec:
containers:
- name: web
image: nginx:1.23
ports:
- containerPort: 80
kubectl apply -f nginx-pod.yaml
9.如何查看此pod的事件
# 查看Pod事件
kubectl describe pod nginx-pod
# 只查看事件部分
kubectl get events --field-selector involvedObject.name=nginx-pod
# 查看所有事件并按时间排序
kubectl get events --sort-by=.metadata.creationTimestamp
# 实时监控事件
kubectl get events --watch
10.如何查看pod的日志
# 查看Pod日志
kubectl logs nginx-pod
# 实时查看日志
kubectl logs -f nginx-pod
# 查看最近100行日志
kubectl logs --tail=100 nginx-pod
# 查看最近1小时的日志
kubectl logs --since=1h nginx-pod
# 多容器Pod指定容器
kubectl logs nginx-pod -c nginx
# 查看之前容器的日志
kubectl logs nginx-pod --previous
11.如何查看Pod启动在哪个机器上
# 查看Pod所在节点
kubectl get pod nginx-pod -o wide
# 详细信息包含节点
kubectl describe pod nginx-pod | grep Node
# 使用JSONPath查询
kubectl get pod nginx-pod -o jsonpath='{.spec.nodeName}'
# 查看节点上的所有Pod
kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=<node-name>
12. 如何进入Pod中的容器
# 进入Pod中的容器
kubectl exec -it nginx-pod -- /bin/bash
# 如果没有bash,使用sh
kubectl exec -it nginx-pod -- /bin/sh
# 多容器Pod指定容器
kubectl exec -it nginx-pod -c nginx -- /bin/bash
13.K8s中什么是抽象资源,什么是实例资源
抽象资源:代表期望状态的资源对象。你通过创建或修改抽象资源来声明你希望系统达到什么状态(例如,“运行 3 个 Nginx 副本”),而不是直接命令系统如何操作。
实例资源:代表实际状态(Actual State)的资源对象。它们是系统中真实存在并运行的实体,是抽象资源所声明的期望状态被控制器具体化后的结果。
14. Pod是抽象对象还是实例
在 Kubernetes 中,Pod 既可以是抽象定义(蓝图),也可以是具体实例(运行时对象)
当你编写一个 Pod 的 YAML清单文件时,你定义的是 Pod 的期望状态。这个文件描述了你希望的Kubernetes 创建什么样的 Pod:它应该运行什么容器、需要多少 CPU/内存、挂载哪些卷、使用哪些标签等。此时,这个 YAML 文件中的Pod是一个抽象的定义或模板。它本身还不是一个运行中的实体。它只是一个声明式的描述。
而当我们创建"nginx-pod"时,它是Pod类型的一个具体实例。
15. 有哪些方法可以访问到上面部署的Nginx
方法一:端口转发
# 将本地8080端口转发到Pod的80端口
kubectl port-forward nginx-pod 8080:80
# 访问
curl http://localhost:8080
方法二:创建Service(推荐)
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: ClusterIP # 集群内访问
kubectl apply -f nginx-service.yaml
# 集群内访问
curl http://nginx-service
方法三:NodePort Service(外部访问)
apiVersion: v1
kind: Service
metadata:
name: nginx-nodeport
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 30080
type: NodePort
# 通过任意节点IP访问
curl http://<node-ip>:30080
方法四:LoadBalancer(云环境)
apiVersion: v1
kind: Service
metadata:
name: nginx-lb
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: LoadBalancer
方法五:Ingress(HTTP/HTTPS路由)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-ingress
spec:
rules:
- host: nginx.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: nginx-service
port:
number: 80
16. Pod如何重启
Pod重启的几种方式:
(1)删除Pod(让控制器重建):
# 如果Pod由Deployment管理
kubectl delete pod nginx-pod
# Deployment会自动创建新的Pod
(2)重启Deployment:
kubectl rollout restart deployment nginx-deployment
(3)更新Pod配置触发重启:
# 添加或修改环境变量
kubectl patch pod nginx-pod -p '{"spec":{"containers":[{"name":"nginx","env":[{"name":"RESTART","value":"'$(date)'"}]}]}}'
(4)容器内重启服务:
kubectl exec nginx-pod -- nginx -s reload
17. 如何删除上面创建的Pod
# 直接删除Pod
kubectl delete pod nginx-pod
# 使用YAML文件删除
kubectl delete -f nginx-pod.yaml
# 强制删除)
kubectl delete pod nginx-pod --force --grace-period=0
18. 这样单独创建Pod有什么缺点
(1)如果 Pod 运行的节点宕机、内核崩溃或 Pod 本身内部容器崩溃,Kubernetes 不会自动重新创建这个 Pod。
(2)当需要更新 Pod 的镜像版本或配置时,无法实现零停机更新。
(3)需要增加或减少服务实例数量时,必须手动创建或删除每个Pod 的YAML定义并应用。
(4)单独创建的 Pod 是单点,没有副本概念,一旦故障服务即中断。
猜你喜欢
- 2025-07-09 别被云原生忽悠了:接地气的 K8s 生产落地长这样
- 2025-07-09 简单了解下Kubernetes网络通信(kubernetes网络模型)
- 2025-07-09 pod结构说明-运行容器的容器(容器中pod是什么意思)
- 2025-07-09 k8s实践(三):pod常用操作(k8s pod service deployment)
- 2025-07-09 Kubernetes 核心概念全景图:Pod、Node、Cluster、Control Plane 等
- 2025-07-09 K8S之调度器-精细控制Pod分布(k8s pod调度过程详解)
- 2025-07-09 【超融合云计算中心】核心K8S容器实践应用指南
- 2025-07-09 Kubernetes从零到精通(01-简介)(kubernetes入门教程)
- 2025-07-09 service详解(service理解)
- 2025-07-09 kubernetes基本概念(kubernetes架构详解)
- 最近发表
-
- 五分钟轻松熟悉一个k8s Operator应用制作
- iLogtail 使用入门 - K8S 环境日志采集到 SLS
- k8s之配置CNI网络(k8s 网络配置)
- Linux系统K8S集群架构及常用操作命令之K9S安装及使用
- Centos 安装部署Kubernetes(K8s)(k8s环境搭建 centos)
- 集群外部署Prometheus+Grafana监控K8S解析
- k8s安装UI管理工具Kuboard安装(k8s安装步骤)
- k8s中使用Helm安装生产级别redis集群
- K8s集群(K8s集群添加新节点更新步骤)
- Kubernetes (k8s) 基本命令速查(k8s kubernetes教程)
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)