几种强制删除资源对象的方式
在 Kubernetes 中,有时候删除资源对象(如 Namespace)时会卡住无法删除完成,这通常是因为存在 finalizers。以下是几种强制删除资源对象的方式。 1. 仅删除1kubectl delete namespace <ns> 2. 强制删除12# --grace-period=0: 设置优雅删除时间为 0kubectl delete namespace <ns> --force --grace-period=0 3. 修改 finalizers 字段12kubectl edit namespace <ns># 查找 finalizers,将后面的值置为 [] 4. 通过 API 接口修改 finalizers通过 Kubernetes 提供的 API 接口,修改 .spec.finalizers 和 metadata.finalizers 字段,将值置为 [],从而让 Kubernetes 直接删除该资源。 1234567891011# 1. 导出 namespace JSONkubectl get namespace...
Kubernetes 获取客户端真实 IP:externalTrafficPolicy 深度解析
概述在 Kubernetes 中获取客户端真实 IP 是一个常见需求,但由于 kube-proxy 的 SNAT 机制,往往获取到的是中间节点的 IP。externalTrafficPolicy 字段提供了解决方案。 核心知识: 🔍 Service 外部流量策略 📡 客户端 IP 保留机制 ⚖️ Cluster vs Local 模式 🎯 负载均衡权衡 适用场景: 需要记录真实客户端 IP 访问控制和安全审计 流量分析和用户画像 地域识别和限流 externalTrafficPolicy 详解什么是 externalTrafficPolicy定义: externalTrafficPolicy 是 Kubernetes Service 中控制外部流量转发策略的字段,决定流量如何路由到 Pod 以及是否保留客户端源 IP。 可选值: 值 说明 默认 Cluster 流量可转发到任意节点的 Pod ✅ 是 Local 流量仅转发到本节点的 Pod ❌ 否 配置示例: 123456789101112apiVersion: v1kind: Servicem...
解决镜像下载失败的几种方法
前言在学习、研究 Kubernetes 的过程中,经常遇到镜像拉取不了的网络问题,这并不是镜像本身的问题,而是国内的"国情"导致无法正常访问墙外资源。 这些镜像有的是 Kubernetes 团队自研的插件,也有一些是爱好者开发的第三方组件,正常来说,它们会存放于 gcr.io 或者 quay.io 中。 gcr.io 是谷歌的镜像仓库,在国内是禁止访问的 quay.io 是 Red Hat 的镜像仓库,可以访问,但速度较慢 那如何应对这种网络问题呢? 现成的镜像代理仓库k8s.gcr.io 源代理仓库这是 gcr.io/google-containers 的仓库,使用阿里云镜像: 123k8s.gcr.io/sig-storage/csi-node-driver-registrar:v2.3.0# 换成registry.aliyuncs.com/google_containers/csi-node-driver-registrar:v2.3.0 也可以使用 lank8s.cn,它们的对应关系:k8s.gcr.io → lank8s.cn,gcr.io →...
记录 K8s Service 中的几种类型以及 port 区别
官方介绍k8s service 分为几种类型,分别为:ClusterIp (默认类型,每个Node分配一个集群内部的Ip,内部可以互相访问,外部无法访问集群内部) NodePort (基于ClusterIp,另外在每个Node上开放一个端口,可以从所有的位置访问这个地址) LoadBalance (基于NodePort,并且有云服务商在外部创建了一个负载均衡层,将流量导入到对应Port。要收费的,一般由云服务商提供,比如阿里云、AWS等均提供这种服务, k3s也默认提供了一个lbs - klipper-lb, 本地集群可以使用metallb, metallb解释文档) ExternalName (将外部地址经过集群内部的再一次封装,实际上就是集群DNS服务器将CNAME解析到了外部地址上,实现了集群内部访问) 例如,以下 Service 定义将 prod 名称空间中的 my-service 服务映射到 my.database.example.com: 12345678apiVersion: v1kind: Servicemetadata:name: my-service...
K3s/containerd 的一些配置(加速器、私有仓库)
K3s 私有镜像仓库配置 Containerd 配置镜像仓库 参考 Kubernetes 在 Changelog 中宣布自 Kubernetes 1.20 之后将弃用 Docker 作为容器运行时之后,containerd 成为下一个容器运行时的热门选项。虽然 containerd 很早就已经是 Docker 的一部分,但是纯粹使用 containerd 还是给大家带来了诸多困扰,本文将介绍如何使用 containerd 配置镜像仓库和加速器。 本文将以 K3s 为例对 containerd 进行配置,如果您的环境未使用 K3s 而是使用的 Kubernetes,你也可以参考本文来配置 containerd 的镜像仓库,因为 containerd 的配置是通用的。 关于 K3s 和 containerdK3s 是一个轻量级 Kubernetes 发行版,二进制大小小于 100MB,所需内存不到 Kubernetes 的一半。K3s 为了降低资源消耗,将默认的 runtime 修改为 containerd,同时也内置了 Kubernetes CLI 工具 crictl 和 ct...
Ingress - K3s 之 Traefik 的使用
前言IngressService 可能会有很多,如果每个资源都绑定一个 node port 的话,主机则需要开放外围的端口进行服务调用,管理上会比较混乱。 比较优雅的方式是通过一个外部的负载均衡器,比如 Nginx,绑定固定的端口比如 80,然后根据域名/服务名向后面的 Service IP 转发,但是这里的问题在于:当有新服务加入的时候如何修改 Nginx 配置? 手动改或者 Rolling Update Nginx Pod 都是不现实的。 对于这个问题,Kubernetes 给出的七层解决方案是:Ingress TraefikTræfik 是一个为了让部署微服务更加便捷而诞生的现代 HTTP 反向代理、负载均衡工具。它支持多种后台(Docker、Swarm、Kubernetes、Marathon、Mesos、Consul、Etcd、Zookeeper、BoltDB、Rest API、file...)来自动化、动态的应用它的配置文件设置。 Traefik 是 K3s 里面的 Ingress Controller,支持负载均衡和反向代理,类似于 Nginx。 Traef...
K3s 使用 Token 访问 API 接口
每次创建了新的 namespace 下都会生成一个默认的 token,名为 default-token-xxxx。default 就相当于该 namespace 下的一个用户。也可以考虑新建 service account 来获取 token。 查看 token secret123[root@k3s-release-server1 ~]# kubectl get secretsNAME TYPE DATA AGEdefault-token-6f7xb kubernetes.io/service-account-token 3 16m 使用脚本方式访问 API12345678#!/usr/bin/env bashurl=$1token=`kubectl get secrets|awk 'NR>1'|awk '{print $1}'|xargs -i kubectl describe secret...
K3s 和 K8s 中 Leader 选举方案的区别
参考:https://www.reddit.com/r/kubernetes/comments/kqx5ql/difference_between_master_and_worker_concepts_in/ Leader 选举方案的不同在于用于备份主服务器的数据库 Leader 选举是针对分布式数据库 etcd 的。由于 etcd 往往存在于 Kubernetes 中的主节点上,所以会和 K3s 混淆。 K3s 默认使用 SQLite,因此不需要 leader 选举。
K3s 安装 - 机器提前准备
手动加载 CentOS7 box 文件配置 Vagrantfile123456789101112131415161718192021222324252627Vagrant.configure("2") do |config| (1..3).each do |i| config.vm.define "k3s-node#{i}" do |node| # 设置虚拟机的Box node.vm.box = "centos/7" # 设置虚拟机的主机名 node.vm.hostname="k3s-node#{i}" # 设置虚拟机的IP node.vm.network "private_network", ip: "192.168.56.#{99+i}", netma...
K3s 卸载
卸载 K3sServer 节点执行1sh /usr/local/bin/k3s-uninstall.sh Agent 节点执行1sh /usr/local/bin/k3s-agent-uninstall.sh 清除配置1rm -rf $HOME/.kube 如果是外部数据库,卸载完需要记得清除 database 的数据 MySQL:清空 K3s 创建的 kine 表
