1.什么是有状态服务,什么是无状态服务

一、什么是无状态服务(Stateless Service)?

无状态服务是指服务实例之间没有依赖关系,也不需要保存客户端的状态信息。每次请求都独立处理,服务器不记录任何会话或用户上下文。

在 Kubernetes 中的体现:

  • 使用 Deployment 控制器管理;

  • Pod 可以被随意删除、重启、替换;

  • 所有 Pod 提供相同的功能;

  • 适合横向扩展,多个副本可以并行工作。

二、什么是有状态服务(Stateful Service)?

有状态服务是指服务实例之间存在顺序、唯一性标识和持久化状态的需求。每个 Pod 有唯一的网络标识,并且通常与特定的存储卷绑定。

在 Kubernetes 中的体现:

  • 使用 StatefulSet 控制器管理;

  • 每个 Pod 有稳定的主机名和序号(如 web-0, web-1, web-2);

  • 每个 Pod 可绑定一个独立的 PersistentVolume;

  • 启动和终止是有顺序的(有序部署、有序终止);

  • 适合需要持久化存储、身份识别的应用。

2.什么是冗余

一、什么是冗余(Redundancy)?

冗余 是指在系统设计中,为了提高可靠性、容错性或可用性,有意重复某些关键组件或数据。即使某个部分发生故障,冗余机制也能确保系统继续正常运行。


二、常见的冗余类型

1. 硬件冗余

  • 在服务器、网络设备、存储等硬件层面部署多个备份。

  • 示例:

    • 多块硬盘做 RAID 提高存储可靠性;

    • 双电源、双网卡提升服务器稳定性;

    • 多台服务器负载均衡,防止单点故障。

2. 数据冗余

  • 数据在多个节点上备份,防止数据丢失。

  • 示例:

    • 数据库主从复制(如 MySQL 主从、PostgreSQL 流复制);

    • 分布式文件系统(如 HDFS、Ceph)自动保存多份副本;

    • Kubernetes 中的 PersistentVolume + StatefulSet 实现有状态服务的数据冗余。

3. 服务冗余

  • 同一个服务部署多个实例,通过负载均衡对外提供服务。

  • 示例:

    • 使用 Kubernetes 的 Deployment 部署多个 Pod;

    • 使用 Nginx 或 HAProxy 做反向代理和负载均衡;

    • 微服务架构中使用服务注册与发现机制(如 Nacos、Consul)实现高可用。

4. 网络冗余

  • 多条网络路径或多个网络接口,防止网络中断。

  • 示例:

    • 多个交换机互连;

    • 网络链路聚合(Bonding);

    • 使用 Kubernetes 的 CNI 插件(如 Calico、Cilium)构建高可用网络。

三、冗余的作用

作用

说明

提高可用性

即使某一部分故障,系统仍能正常运行

增强容错能力

自动切换到备份系统,用户无感知

保障数据安全

多份数据副本,防止数据丢失

支持横向扩展

多个节点并行处理请求,提升性能

3.在k8s中无状态服务的冗余如何实现

在 Kubernetes(k8s)中,无状态服务的冗余主要通过 Deployment 控制器 和 副本机制(Replica) 实现。其核心目标是确保服务具备高可用性,即使某个 Pod 出现故障,也能自动恢复并保持服务正常运行。

步骤

操作

目的

1

创建 Deployment 并设置 replicas

实现服务冗余

2

创建 Service

提供统一访问入口

3

配置 liveness/readiness 探针

自动检测 Pod 健康状态

4

设置滚动更新策略

支持零停机更新

5

使用拓扑分布约束(可选)

实现跨节点/区域的高可用

4.kubectl create中的--dry-run=client有什么作用,用于什么场景

kubectl create 命令中的 --dry-run=client 是一个非常有用的参数,它的作用是模拟执行命令,但不真正提交到 Kubernetes 集群中。可以通过在后面加入-o yaml来生成示例yaml文件。

5.Deployment的主要功能是什么,解决了什么问题

Deployment 是 Kubernetes 中用于管理无状态服务(Stateless Service) 的控制器,它的核心作用是:确保指定数量的 Pod 副本始终处于运行状态,并支持滚动更新和回滚,解决了应用部署不稳定、版本更新中断、Pod 异常后无法自动恢复等问题。

6.Deployment其后端调用的那个服务

Deployment 是 Kubernetes 中用于管理无状态服务(Stateless Service) 的控制器,它本身并不直接“调用”某个后端服务,而是通常配合 Service 使用。真正用于暴露服务、供客户端或其它服务访问的是 Service 资源。

7.什么是滚动更新,默认值是多少,如何设置如果使用Deployment启动了多个Pod,那么S其他服务是否需要挨个访问其ip或域名?有什么更好的方法

问题

解答

什么是滚动更新?

一种逐步替换旧 Pod 的方式,实现零停机更新

默认滚动更新参数?

maxSurge=1, maxUnavailable=1

如何自定义滚动更新?

在 Deployment 中设置 strategy.rollingUpdate 字段

多 Pod 是否需逐个访问?

不需要,应使用 Service 统一访问

推荐访问方式?

使用 Service 的名称进行访问,如 http://service-name.namespace

Service 的作用?

提供稳定入口 + 自动负载均衡 + 健康检查

9.什么是Service,其主要功能是什么

在 Kubernetes 中,Service 是一种抽象资源,用于定义一组 Pod 的访问策略。它为这些 Pod 提供了一个统一的访问入口(IP 和端口),并实现请求的负载均衡。即使 Pod 被删除、重建或调度到其他节点,Service 提供的 IP 和 DNS 名称保持不变,从而确保服务调用方无需关心后端 Pod 的具体位置和生命周期。

Service 是 Kubernetes 中用于实现服务发现、负载均衡和稳定访问的核心机制,解决了 Pod 生命周期短暂、IP 不稳定的问题,是微服务架构中不可或缺的组件。


主要功能:

功能

描述

稳定访问入口

无论后端 Pod 如何变化,Service 提供固定的 IP 和 DNS 名称

负载均衡

自动将请求分发到多个后端 Pod 上,支持轮询等策略

健康检查集成

只将流量转发给健康的 Pod(配合 readinessProbe)

服务发现

配合 Kubernetes 内置 DNS 实现服务自动发现

网络隔离控制

支持 ClusterIP、NodePort、LoadBalancer 等类型,控制访问范围

10.Service的底层使用的什么服务

Kubernetes 的 Service 底层依赖 kube-proxy + iptables/IPVS + Endpoints + CoreDNS 实现服务发现与负载均衡,使得服务调用方可以通过稳定 IP 和 DNS 名称访问一组 Pod。

11.Service有几种网络类型,区别是什么

场景

推荐 Service 类型

微服务间调用

ClusterIP

开发测试环境

NodePort

对外提供服务(云平台)

LoadBalancer

引用外部系统

ExternalName

统一入口管理

Ingress(非 Service 类型,但可组合使用)

12.endpoint是什么与service有什么关系

在 Kubernetes 中,Endpoint(端点) 是一个关键资源对象,它与 Service 有密切关系。理解它们之间的联系有助于你更好地掌握服务发现、负载均衡和网络通信机制。

一、什么是 Endpoint?

Endpoint 是 Kubernetes 中用于记录一组 Pod 的 IP 地址和端口 的资源。它是 Service 实现负载均衡和访问路由的基础。

  • 每个 Service 都会自动创建一个同名的 Endpoint;

  • Endpoint 包含了所有匹配该 Service selector 的 Pod 的真实地址(IP + Port);

  • 当 Pod 被删除或新建时,Kubernetes 控制器会自动更新对应的 Endpoint。


二、Service 和 Endpoint 的关系

角色

描述

Service

提供一个稳定的虚拟 IP 和 DNS 名称,作为访问入口

Endpoint

记录实际后端 Pod 的 IP 和端口信息

13.BusyBox在K8s中有什么作用

BusyBox 是 Kubernetes 中用于调试网络、测试 DNS、验证存储挂载等操作的“瑞士军刀”,是运维人员排查问题时的必备工具。

14.创建一个Deployment,启动多副本Nginx,并为其设置ClusterlP类型的Service,使用busybox访问此Service验证是否能够访问到所有Nginx副本

Deplayment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80

Service:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: ClusterIP

busybox:

apiVersion: v1
kind: Pod
metadata:
  name: busybox
spec:
  containers:
    - name: busybox
      image: busybox
      command:
        - sh
        - -c
        - |
          while true; do
            wget -qO- http://nginx-service.default.svc.cluster.local
            echo "----------------------"
            sleep 1
          done

15.设置kubectl别名为k,并配置命令自动补全

设置别名

alias k='kubectl'

加载脚本

source <(kubectl completion bash)

绑定补全

complete -o default -F __start_kubectl k

加载配置

source ~/.bashrc

以他人的幸福为幸福,以他人的享乐为享乐。