Kubernetes上的一些常见标签

本文介绍了Kubernetes中Node标签的多种类型及其用途,包括通过runtime.GOOS获取的arch标签、可自定义的hostname标签、由cloudprovider定义的instance-type标签以及与区域和可用区相关的failure-domain标签。

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

  • beta.kubernetes.io/arch=amd64 
    Node的label,通过golang的runtime.GOOS来获取

  • kubernetes.io/hostname
    Node的label,node的hostname,可以通过kubelet参数–hostname-override
    来修改

  • beta.kubernetes.io/instance-type
    Node的label,通过cloudprovider来定义,当需要调度基于实例类型的时候,可以指定.

  • failure-domain.beta.kubernetes.io和region/failure-domain.beta.kubernetes.io/zone
    Node/persistentVolume的标签,
    Node上的通过cloud provider中定义的zone信息来设置该label的内容
    persistentVolume上的是通过persistentVolumeLabel admission controller来添加zone labels

Link: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#always-co-located-in-the-same-node

### Kubernetes 实操面试常见问题及答案汇总 #### 1. 如何验证 Kubernetes 集群的状态? 可以使用 `kubectl get nodes` 命令查看节点状态,以及 `kubectl cluster-info` 查看集群基本信息。如果需要更详细的健康状况信息,可以通过 `kubectl get componentstatuses` 获取控制平面组件的运行状态[^1]。 ```bash kubectl get nodes kubectl cluster-info kubectl get componentstatuses ``` --- #### 2. 如何排查 Pod 启动失败的原因? 当 Pod 处于 `CrashLoopBackOff` 或其他异常状态时,可通过以下命令获取日志并分析原因: - 使用 `kubectl describe pod <pod-name>` 查看事件详情。 - 使用 `kubectl logs <pod-name> --previous` 查看之前的崩溃日志。 ```bash kubectl describe pod <pod-name> kubectl logs <pod-name> --previous ``` --- #### 3. 如何动态扩展 ReplicaSet 的副本数量? ReplicaSet 是通过 `.spec.replicas` 字段定义副本数目的。要动态调整副本数目,可执行如下命令: ```bash kubectl scale rs <replicaset-name> --replicas=<new-replica-count> ``` 例如,将 ReplicaSet 扩展至 5 个副本: ```bash kubectl scale rs my-replicaset --replicas=5 ``` --- #### 4. 如何配置 Service 并测试其负载均衡能力? 创建一个 ClusterIP 类型的服务后,可以通过以下方式测试其负载均衡效果: - 访问服务 IP 和端口,观察流量是否被分发到不同的 Pod 上。 - 可以借助工具如 `curl` 测试多次请求的结果。 示例 YAML 文件: ```yaml apiVersion: v1 kind: Service metadata: name: my-service spec: selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 ``` 应用配置文件并通过 `kubectl apply -f service.yaml` 创建服务。 --- #### 5. 如何设置资源配额(Resource Quota)? 可以在命名空间级别设置 CPU 和内存的最大限额。以下是示例 YAML 文件: ```yaml apiVersion: v1 kind: ResourceQuota metadata: name: mem-cpu-demo spec: hard: requests.cpu: "1" requests.memory: 1Gi limits.cpu: "2" limits.memory: 2Gi ``` 应用此配置文件即可生效: ```bash kubectl apply -f resource-quota.yaml ``` --- #### 6. 如何部署 StatefulSet 应用程序? StatefulSet 主要用于有状态的应用场景,比如数据库。下面是一个简单的 MySQL StatefulSet 示例: ```yaml apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: k8s.gcr.io/nginx-slim:0.8 ports: - containerPort: 80 name: web ``` 应用配置文件: ```bash kubectl apply -f statefulset.yaml ``` --- #### 7. 如何实现滚动更新 Deployment? 滚动更新允许逐步替换旧版本的 Pod 而不中断服务。可以通过修改镜像标签触发滚动更新: ```bash kubectl set image deployment/<deployment-name> <container-name>=<new-image>:<tag> ``` 例如: ```bash kubectl set image deployment/my-deployment nginx-container=nginx:latest ``` --- #### 8. 如何回滚到之前的一个版本? 如果发现新版本存在问题,可以快速回滚到前一个版本: ```bash kubectl rollout undo deployment/<deployment-name> ``` 指定具体的历史修订版号也可以: ```bash kubectl rollout undo deployment/<deployment-name> --to-revision=<revision-number> ``` --- #### 9. 如何监控 Node 资源使用率? Kubernetes 中的 kubelet 组件会利用 cAdvisor 来收集容器和节点级别的资源使用情况,并将其报告给 API Server[^1]。管理员可以通过 Metrics Server 查询这些指标: 安装 Metrics Server: ```bash kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml ``` 查询节点或 Pod 的资源使用量: ```bash kubectl top node kubectl top pod ``` --- #### 10. 如何调试网络连接问题? 如果遇到网络连通性问题,可以尝试以下方法: - 使用 `kubectl exec` 进入目标 Pod 并 ping 其他 Pod 或外部地址。 - 检查 NetworkPolicy 是否阻止了某些流量。 - 如果使用 CNI 插件(如 Calico),可以检查插件的日志和服务状态。 示例命令: ```bash kubectl exec -it <pod-name> -- /bin/sh ping <destination-ip-or-hostname> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值