K8S部署常见问题归纳

一. 常用错误发现手段

我们在部署经常看到的提示是:

[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get "http://localhost:10248/healthz": dial tcp [::1]:10248: connect: connection refused.

这些提示尚不能给与明确的问题细节,常用下列手段进一步发现问题:

  • 服务状态
systemctl status kubelet 
  • 时间日志
journalctl -xeu kubelet
  • 执行jion或者init的时候添加 --v=5
  • 查询系统日志/var/log/messages,例如
tail /var/log/messages

二、错误问题

1. token 过期

问题:
日志发现token过期提示,例如:
The cluster-info ConfigMap does not yet contain a JWS signature for token ID “42mf2r”, will try again

解决方案:

  1. 在master机器上执行查询token信息
kubeadm token list
  1. 如果查询不到信息,锁门token过期了,需要重新生成token
kubeadm token create

查看discovery-token-ca-cert-hash

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
  1. 生成后可以替换kubeadm join语句中的token部分
    kubeadm join 192.168.0.10:6443 --token vpm4o3.p4bn3co35bplw77m
    –discovery-token-ca-cert-hash sha256:23d0fe16f3e825ef81d9682d3dc3a706fdad1712d4213ad4243a7d6d7abd5c36

2. 时间同步问题

问题:
报错:Failed to request cluster-info, will try again: certificate has expired or is not yet valid
解决方案:

ntpdate ntp.aliyun.com

3. docker Cgroup Driver 不是systemd

问题:
server.go:302] “Failed to run kubelet” err="failed to run Kubelet: misconfiguration: kubelet cgroup driver: “systemd” is different …

解决方案:

  1. 修改docker服务的配置文件,“/etc/docker/daemon.json ”文件,添加如下
{
"exec-opts": ["native.cgroupdriver=systemd"]
}

重启dokcer服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

修改后查看docker的 cgroup

 docker info |grep "Cgroup Driver"

Cgroup Driver: systemd #已经更新为了systemd

重启kuberlet:

systemctl restart kubelet

4. Failed to create cgroup(未验证)

问题:
“Failed to create cgroup” err="Cannot set property TasksAccountin
解决方案:

yum update systemd

子节点误执行kubeadm reset

问题:
子节点误执行kubeadm reset
解决方案:

  1. 删除/etc/kubernetes/下所有文件
  2. kubeadm reset
  3. 重新join
<think>嗯,用户现在想了解Kubernetes的八大核心资源,可能是在学习Kubernetes资源管理或者需要查阅相关文档。我之前回答过Docker优化的问题,现在需要转到K8S的资源部分。首先,我需要确认用户提到的“八大资源”具体指哪些,因为Kubernetes的资源类型很多,不同资料可能有不同的分类方式。 根据用户提供的引用,尤其是引用[3]提到Kubernetes容器编排工具,管理容器化应用。所以核心资源应该包括最基础的Pod、Deployment、Service这些。常见的资源类型还有ConfigMap、Secret、Volume、Namespace、ServiceAccount,可能再加上ReplicaSet、StatefulSet、DaemonSet等控制器。但用户说八大,可能需要归纳成八类,或者用户可能指的是最常用的八种。 我需要先列出Kubernetes中最核心的资源,确保覆盖主要部分。例如,Pod、Deployment、Service、ConfigMap、Secret、PersistentVolume、Namespace、ServiceAccount。这可能是常见的八大资源。不过可能需要确认是否有其他资源更常被提及。 接下来,每个资源需要解释其作用、使用场景和示例。比如Pod是基本部署单元,Deployment管理Pod副本,Service提供网络访问,ConfigMap管理配置,Secret管理敏感信息,PersistentVolume持久化存储,Namespace资源隔离,ServiceAccount身份认证。 用户可能想了解这些资源如何协同工作,比如一个应用部署流程会涉及Deployment创建Pod,Service暴露服务,ConfigMap挂载配置,Volume挂载存储,ServiceAccount设置权限等。所以需要结构清晰地分点说明,每个资源单独一部分,包括定义、作用和示例YAML片段。 另外,用户之前的问题是关于Docker优化的,现在转向K8S资源,可能需要稍微衔接一下,比如提到K8S作为编排工具如何管理这些资源,但可能不需要深入,重点在资源本身。 需要注意引用之前的回答中的相关信息,但用户这次的引用中并没有直接提到资源部分,所以可能不需要引用之前的脚注。不过用户提供的引用[3]提到Kubernetes容器编排框架,由CNCF托管,所以可以在介绍时引用,比如提到Kubernetes作为编排工具的背景。 另外,用户可能希望了解资源之间的关系,比如Deployment管理ReplicaSet,ReplicaSet管理Pod,Service指向Pod等。是否需要包含这部分?但八大资源可能更侧重基础,所以可能简要说明即可。 最后,生成的相关问题需要考虑用户可能进一步想了解的,比如资源定义语法、资源管理命令、资源监控等,或者更深入的控制器如StatefulSet、DaemonSet的区别,或者资源配额管理。</think>### Kubernetes 八大核心资源详解 Kubernetes 通过定义多种资源类型来管理容器化应用的生命周期、网络、存储等模块。以下是其最核心的八类资源及其作用: --- #### 1. **Pod** - **定义**:Kubernetes 的最小调度单元,封装一个或多个容器(如业务容器、Sidecar 容器)[^3]。 - **作用**:提供共享网络和存储的容器运行环境,支持容器间直接通信。 - **示例**: ```yaml apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx image: nginx:alpine ``` --- #### 2. **Deployment** - **定义**:声明式管理 Pod 副本的控制器,支持滚动更新和回滚[^3]。 - **作用**:确保指定数量的 Pod 副本始终运行,适用于无状态应用(如 Web 服务)。 - **示例**: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: web-deploy spec: replicas: 3 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: web image: nginx:alpine ``` --- #### 3. **Service** - **定义**:为 Pod 提供稳定的网络访问入口,通过标签选择器关联后端 Pod[^3]。 - **作用**:实现负载均衡和服务发现,支持 ClusterIP、NodePort、LoadBalancer 等类型。 - **示例**: ```yaml apiVersion: v1 kind: Service metadata: name: web-svc spec: selector: app: web ports: - protocol: TCP port: 80 targetPort: 80 type: ClusterIP ``` --- #### 4. **ConfigMap** - **定义**:以键值对形式存储非敏感配置数据(如环境变量、配置文件)。 - **作用**:解耦应用配置与镜像,支持动态更新配置。 - **示例**: ```yaml apiVersion: v1 kind: ConfigMap metadata: name: app-config data: app.conf: | server.port=8080 logging.level=INFO ``` --- #### 5. **Secret** - **定义**:存储敏感信息(如密码、密钥),数据以 Base64 编码保存。 - **作用**:安全传递敏感数据到 Pod,避免硬编码。 - **示例**: ```yaml apiVersion: v1 kind: Secret metadata: name: db-secret type: Opaque data: username: YWRtaW4= # admin password: MWYyZDFlMmU2N2Rm # 1f2d1e2e67df ``` --- #### 6. **PersistentVolume (PV) / PersistentVolumeClaim (PVC)** - **定义**: - **PV**:集群级别的存储资源(如云盘、NFS)。 - **PVC**:用户对存储资源的请求,绑定到具体 PV。 - **作用**:为有状态应用(如数据库)提供持久化存储。 - **示例**(PVC): ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: data-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi ``` --- #### 7. **Namespace** - **定义**:逻辑隔离集群资源的虚拟分组(如开发、测试环境)。 - **作用**:限制资源配额,避免命名冲突。 - **示例**: ```yaml apiVersion: v1 kind: Namespace metadata: name: production ``` --- #### 8. **ServiceAccount** - **定义**:为 Pod 分配身份认证信息,用于访问 Kubernetes API。 - **作用**:控制 Pod 的权限范围,实现最小权限原则。 - **示例**: ```yaml apiVersion: v1 kind: ServiceAccount metadata: name: backend-sa ``` --- ### 资源协同关系 1. **Deployment 创建 Pod**:通过模板定义 Pod 副本。 2. **Service 关联 Pod**:通过标签选择器将流量分发到 Pod。 3. **ConfigMap/Secret 注入配置**:通过 Volume 或环境变量挂载到容器---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值