Rancher2.X与K8S

本文介绍了Rancher2.4.X的搭建及K8S的基础知识,包括K8S的编排调度功能、Master和Node节点的角色、Pod作为最小调度单元的概念,以及Controller的管理方式。此外,还讲解了Service在负载均衡和访问容器中的作用,以及Namespace的逻辑隔离功能。Rancher作为一个开源的容器管理平台,提供了对Docker和Kubernetes的全面支持,包括基础设施编排、容器编排与调度、应用商店和企业级权限管理等功能。

序言

搭建完了Rancher2.4.X,整理一下知识点,其中包括了K8S.方便后面我们玩.知识点当然是持续更新

K8S

K8S是容器编排调度引擎.提供了如下的内容:

  • 简化应用部署
  • 提高硬件资源利用率
  • 健康检查和自修复
  • 自动扩容缩容
  • 服务发现和负载均衡

K8S内部的元素(从元素上看K8S是很复杂的)

k8s集群由Master节点Node(Worker)节点组成。

Master节点

Master节点指的是集群控制节点,管理和控制整个集群,基本上k8s的所有控制命令都发给它,它负责具体的执行过程。(如下的机器上运行的程序都可以在Rancher起来后通过docker ps看到----cuiyaonan2000@163.com)

在Master上主要运行着:

  1. Kubernetes Controller Manager(kube-controller-manager):k8s中所有资源对象的自动化控制中心,维护管理集群的状态,比如故障检测,自动扩展,滚动更新等。
  2. Kubernetes Scheduler(kube-scheduler): 负责资源调度,按照预定的调度策略将Pod调度到相应的机器上。(这里的POD即最小的工作单元)
  3. etcd:保存整个集群的状态。----这个东西在Rancher2.5.1中一直报错~~~

Node节点

除了master以外的节点被称为Node或者Worker节点,可以在master中使用命令 kubectl get nodes查看集群中的node节点。每个Node都会被Master分配一些工作负载(Docker容器)---工作负载就是容器了cuyaonan2000@163.com,当某个Node宕机时,该节点上的工作负载就会被Master自动转移到其它节点上。在Node上主要运行着:

  1. kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master密切协作,实现集群管理的基本功能
  2. kube-proxy:实现service的通信与负载均衡
  3. docker(Docker Engine):Docker引擎,负责本机的容器创建和管理

pod —— k8s 调度的最小单元

一个 pod 包含一组容器,一个 pod 不会跨越多个工作节点

  • pod 相当于逻辑主机,每个 pod 都有自己的 IP 地址
  • pod 内的容器共享相同的 IP 和端口空间
  • 默认情况下,每个容器的文件系统与其他容器完全隔离

controller

k8s通常不会直接创建pod,而是通过controller来管理pod的。controller中定义了pod的部署特性,比如有几个剧本,在什么样的node上运行等。

为了满足不同的业务场景,k8s提供了多种controller,包括deployment、replicaset、daemonset、statefulset、job等。(如下的副本就是容器的COPY可以这么理解--cuiyaonan2000@163.com)

  • deployment:  是最常用的controller。deployment可以管理pod的多个副本,并确保pod按照期望的状态运行。
  • replicaset:  实现了pod的多副本管理。使用deployment时会自动创建replicaset,也就是说deployment是通过replicaset来管理pod的多个副本的,我们通常不需要直接使用replicaset。
  • daemonset:用于每个node最多只运行一个pod副本的场景。正如其名称所示的,daemonset通常用于运行daemon。
  • statefuleset:能够保证pod的每个副本在整个生命周期中名称是不变的,而其他controller不提供这个功能。当某个pod发生故障需要删除并重新启动时,pod的名称会发生变化,同时statefulset会保证副本按照固定的顺序启动、更新或者删除。
  • job:用于运行结束就删除的应用,而其他controller中的pod通常是长期持续运行的。

service(通过Service可以访问放置在Pod中的Docker应用)

deployment可以部署多个副本,每个pod 都有自己的IP,外界如何访问这些副本那?答案是service

k8s的 service定义了外界访问一组特定pod的方式。service有自己的IP和端口,service为pod提供了负载均衡。

k8s运行容器pod与访问容器这两项任务分别由controller和service执行。

namespace(逻辑隔离)

cluster是 计算、存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用。

可以将一个物理的cluster逻辑上划分成多个虚拟cluster,每个cluster就是一个namespace。不同的namespace里的资源是完全隔离的。

Rancher概览(Rancher文档)

Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。

Rancher由以下四个部分组成:

基础设施编排

Rancher可以使用任何公有云或者私有云的Linux主机资源。Linux主机可以是虚拟机,也可以是物理机。Rancher仅需要主机有CPU,内存,本地磁盘和网络资源。从Rancher的角度来说,一台云厂商提供的云主机和一台自己的物理机是一样的。

Rancher为运行容器化的应用实现了一层灵活的基础设施服务。Rancher的基础设施服务包括网络, 存储, 负载均衡, DNS和安全模块。Rancher的基础设施服务也是通过容器部署的,所以同样Rancher的基础设施服务可以运行在任何Linux主机上。

容器编排与调度

很多用户都会选择使用容器编排调度框架来运行容器化应用。Rancher包含了当前全部主流的编排调度引擎,例如Docker Swarm, Kubernetes, 和Mesos同一个用户可以创建Swarm或者Kubernetes集群。并且可以使用原生的Swarm或者Kubernetes工具管理应用。-----------(使用原生的工具干嘛,那Rancher不是白弄了,希望不会用到-----cuiyaonan2000)

除了Swarm,Kubernetes和Mesos之外,Rancher还支持自己的Cattle容器编排调度引擎。Cattle被广泛用于编排Rancher自己的基础设施服务以及用于Swarm集群,Kubernetes集群和Mesos集群的配置,管理与升级。

应用商店

Rancher的用户可以在应用商店一键部署由多个容器组成的应用。用户可以管理这个部署的应用,并且可以在这个应用有新的可用版本时进行自动化的升级。Rancher提供了一个由Rancher社区维护的应用商店,其中包括了一系列的流行应用。Rancher的用户也可以创建自己的私有应用商店

企业级权限管理

Rancher支持灵活的插件式的用户认证。支持Active Directory,LDAP, Github等 认证方式。 Rancher支持在环境级别的基于角色的访问控制 (RBAC),可以通过角色来配置某个用户或者用户组对开发环境或者生产环境的访问权限。

下图展示了Rancher的主要组件和功能:

Rancher Overview

<think>嗯,用户现在遇到了Rancher和Docker中Webhook服务相关的错误,具体是“failed tocall webhook capi-webhook-servicenot found”。我需要先理解这个错误的原因,然后找出解决办法。根据用户提供的引用内容,可能涉及到镜像拉取问题或者配置错误。首先,引用[1]中的日志显示cluster-agent出现了CrashLoopBackOff,这可能是因为镜像拉取失败或者配置错误。用户之前的问题是关于镜像拉取的问题,可能使用了阿里云的镜像源,但可能某些组件比如webhook的镜像没有正确替换,导致服务无法启动。引用[3]提到Rancher依赖的镜像包括rancher/rancher-webhook:v0.4.2,如果这个镜像没有正确拉取,可能导致capi-webhook-service无法启动。用户之前可能配置了镜像仓库,但可能webhook服务的镜像没有正确指向国内源,或者版本不匹配。 另外,引用[4]显示用户使用的是v2.7.8版本的Rancher,而引用[3]中提到的webhook版本是v0.4.2,可能存在版本兼容性问题。需要检查Rancher版本和webhook版本是否对应。 可能的解决步骤包括检查webhook相关的Pod状态,确认镜像是否正确拉取,查看日志是否有网络问题或镜像拉取失败。如果镜像拉取有问题,可能需要配置镜像仓库或者手动拉取镜像。另外,可能需要更新Rancher到稳定版本,或者检查Kubernetes集群的网络策略是否阻止了服务发现。 此外,用户之前配置了阿里云的Docker源,但可能没有正确设置Rancher的镜像参数,导致部分组件仍从DockerHub拉取,出现超时。需要确保所有相关镜像都使用国内镜像源,比如阿里云,或者配置Docker的registry-mirrors。总结,解决方案可能包括检查webhook服务状态,确认镜像版本和来源,配置正确的镜像仓库,更新Rancher版本,以及检查网络策略。同时,用户可能需要清理旧镜像并重新部署,确保所有组件版本兼容。</think>### 解决 "failed to call webhook capi-webhook-service not found" 错误 #### 一、错误原因分析 1. **缺失的 Webhook 服务** - `capi-webhook-service` 是 Rancher 集群 API(CAPI)的核心组件,负责验证集群操作请求[^3] - 错误直接原因:Kubernetes API Server 无法找到该服务的 Endpoint,可能因 Pod 未启动或网络策略隔离导致[^1] 2. **镜像拉取问题** - Webhook 服务依赖的镜像未正确拉取(如 `rancher/rancher-webhook`),常见于海外镜像源访问超时[^3] - 检查相关 Pod 状态: ```bash kubectl get pods -n cattle-system | grep webhook ``` 3. **版本兼容性问题** - Rancher 版本 Kubernetes 集群版本不兼容(如 Rancher v2.7.x 需搭配 Kubernetes 1.23+)[^4] #### 二、解决方案 ##### 方法1:修复镜像拉取问题 ```bash # 手动拉取 webhook 镜像并重新打标签(以阿里云镜像源为例) docker pull registry.cn-hangzhou.aliyuncs.com/rancher/rancher-webhook:v0.4.2 docker tag registry.cn-hangzhou.aliyuncs.com/rancher/rancher-webhook:v0.4.2 rancher/rancher-webhook:v0.4.2 # 重启 Rancher 容器 docker restart <rancher-container-id> ``` ##### 方法2:检查 Webhook 服务状态 1. 查看 Webhook Pod 日志: ```bash kubectl logs -n cattle-system -l app=rancher-webhook --tail=100 ``` 2. 验证 Service 和 Endpoints: ```bash kubectl get svc capi-webhook-service -n cattle-system kubectl get endpoints capi-webhook-service -n cattle-system ``` ##### 方法3:更新 Rancher 版本 ```bash # 升级到稳定版(需先备份) docker stop <rancher-container-id> docker pull rancher/rancher:stable docker run -d ...(原有启动参数) ``` #### 三、高级修复步骤 1. **清理残留资源** ```bash # 删除失效的 MutatingWebhookConfiguration kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io capi-mutating-webhook-configuration ``` 2. **强制同步集群状态** ```bash # 触发集群重新注册 kubectl annotate clusters.management.cattle.io <cluster-name> force-update="$(date +%s)" ``` 3. **网络策略检查** - 确保 `cattle-system` 命名空间下的 Pod 可以访问 Kubernetes API Server(默认端口 6443) - 使用 `telnet` 测试连通性: ```bash kubectl exec -n cattle-system <rancher-webhook-pod> -- telnet <k8s-api-server-ip> 6443 ``` #### 四、验证修复 1. 检查 Webhook Pod 状态: ```bash kubectl get pods -n cattle-system -l app=rancher-webhook ``` 2. 观察日志是否出现正常同步记录: ```bash kubectl logs -n cattle-system <rancher-webhook-pod> | grep "Successfully synced" ``` #### 补充说明 - **镜像版本对照表** | Rancher 版本 | Webhook 版本 | CAPI 版本 | |-------------|-------------|----------------| | v2.7.x | v0.3.x | v1.0.4 | | v2.8.x | v0.4.2 | v1.4.4 | [^3][^4] - **关键配置文件路径** ```text /var/lib/rancher/k3s/server/manifests/rancher-webhook.yaml ``` --- ### 相关问题 1. 如何排查 Rancher 中 Cluster API 的证书过期问题? 2. Rancher Webhook 服务如何实现高可用部署? 3. Kubernetes 集群升级后 Rancher 出现兼容性错误如何解决?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuiyaonan2000

给包烟抽吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值