kubeasz 部署v1.27.3 k8s

kubeasz简介

kubeasz 致力于提供快速部署高可用k8s集群的工具, 同时也努力成为k8s实践、使用的参考书;基于二进制方式部署和利用ansible-playbook实现自动化;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组件。

部署步骤

前置准备

i.规划集群

角色数量描述
部署节点1运行ansible/ezctl命令,一般复用第一个master节点
etcd节点3注意etcd集群需要1,3,5,...奇数个节点,一般复用master节点
master节点2高可用集群至少2个master节点
node节点n运行应用负载的节点,可根据需要提升机器配置/增加节点数

ii.部署节点需和其他节点ssh打通

下载ezdown

推荐版本对照

Kubernetes version1.221.231.241.251.261.271.281.29
kubeasz version3.1.13.2.03.6.23.6.23.6.23.6.23.6.23.6.3

 i.下载kubeasz

export release=3.6.2
wget https://github.com/easzlab/kubeasz/releases/download/${release}/ezdown

ii.为如下域名配置加速或者代理

x.x.x.x github.com objects.githubusercontent.com docker.io registry-1.docker.io production.cloudflare.docker.com dl.k8s.io cdn.dl.k8s.io auth.docker.io

在部署节点编排k8s安装

chmod +x ezdown
#初始化
./ezdown -D -k v1.27.3

#容器化运行kubeasz
./ezdown -S

#创建新集群 k8s-01
#docker exec -it kubeasz ezctl new k8s-01
2024-05-16 11:21:35 DEBUG generate custom cluster files in /etc/kubeasz/clusters/k8s-01
2024-05-16 11:21:35 DEBUG set versions
2024-05-16 11:21:35 DEBUG cluster k8s-01: files successfully created.
2024-05-16 11:21:35 INFO next steps 1: to config '/etc/kubeasz/clusters/k8s-01/hosts'
2024-05-16 11:21:35 INFO next steps 2: to config '/etc/kubeasz/clusters/k8s-01/config.yml'

根据实际情况修改配置文件

vim  /etc/kubeasz/clusters/k8s-01/config.yml

...
CLUSTER_NAME: "k8s-edge-cluster"
K8S_VER: "1.27.3"
#master节点证书配置
MASTER_CERT_HOSTS:
  - "10.x.5.122"
  - "10.x.1.213"
  - "10.x.35.13"
  - "域名"
...

vim /etc/kubeasz/clusters/k8s-01/hosts 

...
[etcd]
10.x.5.122
10.x.1.213
10.x.35.13

[kube_master]
10.x.5.122 k8s_nodename='master-01'
10.x.1.213 k8s_nodename='master-02'
10.x.35.13 k8s_nodename='master-03'

[kube_node]
10.x.34.249 k8s_nodename='worker-01'
...

分步安装

#建议使用alias命令
#查看~/.bashrc 文件应该包含:alias dk='docker exec -it kubeasz'
source ~/.bashrc

初始化

#dk ezctl setup k8s-01 01
...
ansible-playbook -i clusters/k8s-01/hosts -e @clusters/k8s-01/config.yml  playbooks/01.prepare.yml
...

部署etcd

i.执行安装

#dk ezctl setup k8s-01 02
...
ansible-playbook -i clusters/k8s-01/hosts -e @clusters/k8s-01/config.yml  playbooks/02.etcd.yml
...

ii.集群状态

#export NODE_IPS="10.x.5.122 10.x.1.213 10.x.35.13"
for ip in ${NODE_IPS}; do ETCDCTL_API=3 /opt/kube/bin/etcdctl --endpoints=https://${ip}:2379 --cacert=/etc/kubernetes/ssl/ca.pem --cert=/etc/kubernetes/ssl/etcd.pem --key=/etc/kubernetes/ssl/etcd-key.pem endpoint health; done

#输出内容
...
https://10.x.5.122:2379 is healthy: successfully committed proposal: took = 15.96023ms
https://10.x.1.213:2379 is healthy: successfully committed proposal: took = 16.849881ms
https://10.x.35.13:2379 is healthy: successfully committed proposal: took = 20.668937ms
...

iii.证书有效期

#openssl x509 -in /etc/kubernetes/ssl/etcd.pem -noout -text |egrep 'Not After'
...
            Not After : May  3 09:09:00 2074 GMT
...

部署runtime

#dk ezctl setup k8s-01 03
...
ansible-playbook -i clusters/k8s-01/hosts -e @clusters/k8s-01/config.yml  playbooks/03.runtime.yml
...

部署master节点

#dk ezctl setup k8s-01 04
...
ansible-playbook -i clusters/k8s-01/hosts -e @clusters/k8s-01/config.yml  playbooks/04.kube-master.yml
...

部署node节点

#dk ezctl setup k8s-01 05
...
ansible-playbook -i clusters/k8s-01/hosts -e @clusters/k8s-01/config.yml  playbooks/05.kube-node.yml
...

部署network

#dk ezctl setup k8s-01 06
...
ansible-playbook -i clusters/k8s-01/hosts -e @clusters/k8s-01/config.yml  playbooks/06.network.yml
...

安装其他应用插件

#dk ezctl setup k8s-01 07
...
ansible-playbook -i clusters/k8s-01/hosts -e @clusters/k8s-01/config.yml  playbooks/07.cluster-addon.yml
...

配置kubectl

i. 配置/root/.kube/config

#从部机拷贝该文件 & 修改server配置
/etc/kubeasz/clusters/k8s-01/kubectl.kubeconfig

ii.配置系统PATH

#vim /etc/profile
...
export PATH=/opt/kube/bin/:$PATH
...

iii.测试下

#kubectl cluster-info
Kubernetes control plane is running at https://10.x.1.213:6443

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

常见操作

添加节点

列举管理的集群

@#dk ezctl list
2025-01-02 10:36:12 INFO list of managed clusters:
==> cluster 1:	k8s-03 (current)

向目标集群添加node

@#dk ezctl add-node ${cluster-name} ${node-ip} k8s_nodename=${k8s_nodename}

参考

kubeasz/docs/setup/00-planning_and_overall_intro.md at master · easzlab/kubeasz · GitHub

https://blog.51cto.com/flyfish225/6324517

<think> 我们正在解决Kubernetes 1.27.5版本中大部分Deployment指标采集不到的问题。根据之前的对话,我们知道kube-state-metrics是采集Deployment指标的关键组件。因此,解决方案将围绕kube-state-metrics展开。 可能的原因和解决方案: 1. kube-state-metrics未部署或版本不兼容:确保部署了与Kubernetes 1.27兼容的kube-state-metrics版本(建议v2.7.0+)。 2. kube-state-metrics运行异常:检查Pod状态和日志。 3. 权限问题:确保kube-state-metrics有足够的RBAC权限。 4. 服务发现和抓取配置:如果使用Prometheus,确保其正确配置了抓取kube-state-metrics的规则。 5. 网络问题:确保Prometheus可以访问kube-state-metrics的服务。 步骤: 步骤1:检查kube-state-metrics部署 步骤2:检查kube-state-metrics的RBAC权限 步骤3:验证kube-state-metrics的指标端点 步骤4:检查Prometheus的抓取配置 详细步骤: 步骤1:检查kube-state-metrics部署 - 确认kube-state-metrics是否已经部署,并且运行在集群中。 - 检查Pod状态: ```bash kubectl get pods -n kube-system | grep kube-state-metrics ``` - 如果未部署,则进行部署。可以使用以下命令(使用兼容版本,例如v2.7.0): ```bash kubectl apply -f https://github.com/kubernetes-sigs/kube-state-metrics/releases/download/v2.7.0/kube-state-metrics.yaml ``` 步骤2:检查kube-state-metrics的RBAC权限 - 确保kube-state-metrics有足够的权限访问Deployment等资源。通常,部署文件已经包含了必要的RBAC配置,但有时可能被修改。 - 检查ClusterRole: ```bash kubectl describe clusterrole kube-state-metrics ``` 在规则中应该包含如下权限: ```yaml - apiGroups: ["apps"] resources: ["deployments"] verbs: ["list", "watch"] ``` 步骤3:验证kube-state-metrics的指标端点 - 通过端口转发访问kube-state-metrics的指标端点,查看是否有Deployment相关的指标(如kube_deployment_*): ```bash kubectl port-forward -n kube-system service/kube-state-metrics 8080:8080 ``` 然后访问:http://localhost:8080/metrics,搜索`kube_deployment_`开头的指标。 步骤4:检查Prometheus的抓取配置 - 如果使用Prometheus,确保其配置了抓取kube-state-metrics的job。通常,Prometheus通过服务发现自动找到kube-state-metrics,但需要确认。 - 检查Prometheus的target页面,看是否有kube-state-metrics的端点,并且状态是UP。 - 配置示例(在Prometheus的配置文件中): ```yaml - job_name: &#39;kube-state-metrics&#39; static_configs: - targets: [&#39;kube-state-metrics.kube-system.svc.cluster.local:8080&#39;] ``` 或者使用Kubernetes服务发现: ```yaml - job_name: &#39;kubernetes-service-endpoints&#39; kubernetes_sd_configs: - role: endpoints relabel_configs: - source_labels: [__meta_kubernetes_service_label_app_kubernetes_io_name] action: keep regex: kube-state-metrics ``` 如果以上步骤都正常,但仍然采集不到指标,可以考虑升级kube-state-metrics版本或查看其GitHub issue中是否有已知问题。 常见问题: - 问题:kube-state-metrics版本过旧,不支持Kubernetes 1.27的新API。 解决:升级到最新版(至少v2.7.0)。 验证: - 修改一个Deployment的配置(例如更新镜像),然后观察指标`kube_deployment_metadata_generation`是否变化。 相关问题: 1. 如何升级kube-state-metrics? 2. 如何为kube-state-metrics配置自定义指标? 3. kube-state-metrics和metrics-server有什么区别? 4. 如何解决Prometheus无法发现kube-state-metrics服务的问题? 5. 如何通过Grafana展示Deployment指标? </think>### Kubernetes 1.27.5 Deployment 指标采集不到解决方案 #### 🔧 核心排查步骤 1. **验证 kube-state-metrics 部署状态** ```bash # 检查 Pod 状态 kubectl get pods -n kube-system -l app.kubernetes.io/name=kube-state-metrics # 查看日志(重点关注权限错误) kubectl logs -n kube-system <pod-name> | grep -i "deployment\|forbidden" ``` ✅ 正常状态示例: `kube-state-metrics-7f6d4c9dfd-r2zjk 1/1 Running 0 2d` 2. **检查 RBAC 权限配置** 确保 ClusterRole 包含 deployments 资源的访问权限(关键配置): ```yaml # kube-state-metrics-clusterRole.yaml 片段 apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kube-state-metrics rules: - apiGroups: ["apps"] resources: ["deployments"] # 必须存在 verbs: ["list", "watch"] # 必须包含 ``` ⚠️ **修复命令**: ```bash kubectl auth reconcile -f https://github.com/kubernetes-sigs/kube-state-metrics/releases/download/v2.7.0/rbac.yaml ``` 3. **升级 kube-state-metrics 版本** Kubernetes 1.27.5 需使用 **v2.7.0+** 版本: ```bash # Helm 升级(推荐) helm upgrade kube-state-metrics bitnami/kube-state-metrics \ --version 4.7.0 \ # Chart 版本对应 kube-state-metrics v2.7.0 --set image.tag=v2.7.0 # 或直接应用 YAML kubectl apply -f https://github.com/kubernetes-sigs/kube-state-metrics/releases/download/v2.7.0/kube-state-metrics.yaml ``` 4. **验证指标端点数据** ```bash # 临时端口转发 kubectl port-forward svc/kube-state-metrics 8080:8080 -n kube-system # 检查 Deployment 指标 curl -s localhost:8080/metrics | grep "kube_deployment_.*_generation" ``` ✅ 应有类似输出: `kube_deployment_metadata_generation{namespace="default",deployment="web"} 3` 5. **检查 Prometheus 抓取配置** 在 Prometheus 的配置中确认包含: ```yaml scrape_configs: - job_name: &#39;kube-state-metrics&#39; kubernetes_sd_configs: - role: endpoints relabel_configs: - source_labels: [__meta_kubernetes_service_label_app_kubernetes_io_name] action: keep regex: kube-state-metrics # 必须匹配服务标签 ``` #### 🚨 常见问题诊断表 | 现象 | 排查点 | 修复方案 | |------|---------|----------| | 完全无指标 | RBAC 权限缺失 | 更新 ClusterRole 绑定 | | 部分命名空间无数据 | NetworkPolicy 限制 | 放行 kube-state-metrics 到目标 NS | | 指标值不更新 | kube-state-metrics 版本过低 | 升级至 v2.7.0+ | | Prometheus 显示超时 | 服务发现配置错误 | 检查 relabel_configs 匹配规则 | | 间歇性采集失败 | 资源配额不足 | 增加 kube-state-metrics 内存限制至 256Mi | #### 📊 指标恢复验证方法 ```bash # 创建测试 Deployment kubectl create deployment test-metrics --image=nginx # 强制触发指标更新 kubectl annotate deployment test-metrics test/force-update=$(date +%s) # 验证指标存在 curl -s localhost:8080/metrics | grep "test-metrics" ``` 预期输出应包含: `kube_deployment_metadata_generation{...,deployment="test-metrics"} 2` > **技术说明**:Deployment 指标依赖 kube-state-metrics 对 Kubernetes API Server 的 watch 机制,任何中断连接(如 API 限流、网络隔离)都会导致指标丢失[^1]。建议监控 `kube-state-metrics_list_total{resource="deployments"}` 指标跟踪监听状态。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值