【从问题中去学习k8s】k8s中的常见面试题(夯实理论基础)(十九)

本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》从问题中去学习k8s

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

《DBA》db的介绍使用(mysql、redis、mongodb...)

思考一下问题:

87、 k8s是怎么进行服务注册的及其原理机制?

参考答案:

复制代码
答:Pod启动后会加载当前环境所有Service信息,以便不同Pod根据Service名进行通信。

详解:
Kubernetes (k8s) 中的服务注册主要是通过 Service 资源来实现的。Service 是一种定义如何访问一组特定 Pod 的方法,它为 Pod 组提供一个统一的访问接口,并且负责将请求负载均衡到后端的各个 Pod。以下是 Kubernetes 中服务注册的基本工作机制和步骤:

### 1. **Pod 标签和选择器(Labels and Selectors)**

服务注册的核心是通过标签(Labels)和选择器(Selectors)来关联 Service 和 Pod。Pod 配置中包含标签,而 Service 配置中包含选择器。Service 的选择器会匹配具有相应标签的 Pod,从而确定哪些 Pod 属于该 Service。

### 示例

假设有一些 Pod,它们的配置中包含了标签 `app: MyApp`:

```yaml
apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: MyApp
spec:
  containers:
    - name: myapp-container
      image: myapp:latest
```

接着,创建一个 Service 来选择这些 Pod:

```yaml
apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: MyApp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 9376
```

在这个例子中,Service `my-service` 通过选择器 `app: MyApp` 找到所有带有相同标签的 Pod,并将它们注册为后端。

### 2. **服务发现**

一旦 Service 被创建,Kubernetes 的 DNS 服务(通常是 CoreDNS)会自动为该 Service 创建一个 DNS 记录。这允许集群中的其他 Pod 通过 Service 的名称来解析和访问 Service,实现服务发现。

例如,如果你的 Service 名称为 `my-service` 并且在 `default` 命名空间,那么它的完整 DNS 名称将是 `my-service.default.svc.cluster.local`。集群中的任何 Pod 都可以使用这个 DNS 名称来访问这个 Service。

### 3. **负载均衡**

当 Service 接收到请求时,它会根据定义的策略(如轮询)将请求分发到后端的多个 Pod 中。这个过程是自动的,确保了负载的均衡分配,提高了应用的可用性和扩展性。

### 总结

Kubernetes 中的服务注册和服务发现机制是自动化的,依赖于 Service 对象和 Pod 标签/选择器的定义。这种设计不仅简化了服务管理,还增强了服务的可扩展性和灵活性。通过 Service,Kubernetes 能够有效地管理大规模的应用部署,确保应用的高可用性和网络的优化。
相关推荐
运维开发故事1 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
Patrick_Wilson3 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生3 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭3 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美4 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵5 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
武子康8 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
通信小呆呆11 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick11 天前
自动对焦学习-3
人工智能·学习·计算机视觉