k3s containerd 配置 mirror 和 insecure
containerd 使用了类似 k8s 中 svc 与 endpoint 的概念。svc 可以理解为访问 url,这个 url 会解析到对应的 endpoint 上。也可以理解 mirror 配置就是一个反向代理,它把客户端的请求代理到 endpoint 配置的后端镜像仓库。mirror 名称可以随意填写,但是必须符合 IP 或域名 的定义规则。并且可以配置多个 endpoint,默认解析到第一个 endpoint,如果第一个 endpoint 没有返回数据,则自动切换到第二个 endpoint,以此类推。
比如以下配置示例:
mirrors: "*": endpoint: - "http://192.168.50.119" "192.168.50.119": endpoint: - "http://192.168.50.119" "reg.test.com": endpoint: - "http://192.168.50 ...
阅读全文golang pprof etcd 性能分析
本文永久链接: https://www.xtplayer.cn/etcd/etcd-pprof-performance-analysis/
pprof 是什么?pprof 是用于可视化的性能分析工具,可以捕捉到多维度的运行状态的数据。
pprof 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告)。
profile.proto 是一个 Protocol Buffer v3 的描述文件,它描述了一组 callstack 和 symbolization 信息, 作用是表示统计分析的一组采样的调用栈,是很常见的 stacktrace 配置文件格式。
支持什么模式
Report generation:报告生成
Interactive terminal use:交互式终端使用
Web interface:Web 界面
可以做什么
CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置
Memory Profiling:内存分析,在 ...
阅读全文复用 Released 状态的 pv
本文永久链接: https://www.xtplayer.cn/kubernetes/reuse-released-pv/
PV 回收策略当用户不再使用其存储卷时,他们可以从 API 中将 PVC 对象删除,从而允许 该资源被回收再利用。PersistentVolume 对象的回收策略告诉集群,当其被 从申领中释放时如何处理该数据卷。 目前,数据卷可以被 Retained(保留)、Recycled(回收,Recycle 已被废弃)或 Deleted(删除)。
保留(Retain)回收策略 Retain 使得用户可以手动回收资源。当 PersistentVolumeClaim 对象 被删除时,PersistentVolume 卷仍然存在,对应的数据卷被视为”已释放(released)”。 由于卷上仍然存在这前一申领人的数据,该卷还不能用于其他申领。 管理员可以通过下面的步骤来手动回收该卷:
删除 PersistentVolume 对象。与之相关的、位于外部基础设施中的存储资产 (例如 AWS EBS、GCE PD、Azure Disk 或 Cinder 卷)在 PV 删除之后仍然存在 ...
阅读全文Rancher 不显示全局功能的解决方案
本文永久链接: https://www.xtplayer.cn/rancher/rancher-not-display-global-monitoring/
有时候在 rancher ui 全局界面无法查看一些功能,比如全局监控,或者企业版无法在镜像仓库菜单中查看 harbor 配置等。这是一个历史遗留的 BUG,访问 server_url/v3/users?me=true 时可以看到多个用户具有 me: true 字段。
解决方法在 local 集群或者 rancher server 容器中执行以下脚本:
注意:操作前先对 local 集群或者 rancher server 容器做数据备份。
for user in `kubectl get users.management.cattle.io|awk '{print $1}'|grep -v NAME`;do if [ "$( kubectl get user ${user} -oyaml|grep -w 'me: true' ...
阅读全文强制删除 Terminating 状态的 namespace
本文永久链接: https://www.xtplayer.cn/kubernetes/forces-delete-terminated-namespace/
有时候删除命名空间后,发现命名空间一直处于 Terminating 状态。通过执行 kubectl delete namespace ${namespace} --force --grace-period=0 强制删除命令依然无法删除。
登录 rancher ui,切换到需要删除命名空间的集群对应的 集群首页,点击 kubeconfig 文件 保存备用。如果是非 rancher 管理的 k8s 集群,请准备好对应集群的 kubeconfig 配置文件。
登录一个安装有 jq(https://stedolan.github.io/jq/)和 curl 工具的主机。
接着执行以下命令:
KUBE_CONFIG=xxx.yamlTERMINATING_NAMESPACE=xxxkubectl --kubeconfig ${KUBE_CONFIG} get ns ${TERM ...
阅读全文Rancher 自带监控收集导入 K8S 集群的 ETCD 数据
本文永久链接: https://www.xtplayer.cn/rancher/monitors/rancher-monitors-collection-external-etcd-data/
目前,rancher 自带监控暂时只支持收集 rancher 自定义集群的 ETCD 监控数据。对于 rke 创建并导入或者其他工具创建并导入的 k8s 集群,因为架构的差异,暂时不能直接支持监控 ETCD 监控数据。
rancher 内置监控也是通过 prometheus-operator 部署,只需要自定义一些 serviceMonitor 配置即可实现其他类型集群 ETCD 监控数据收集。
方案介绍serviceMonitor 是通过对 service 获取数据的一种方式。prometheus-operator 可以通过 serviceMonitor 自动识别带有某些 label 的 service,并从这些 service 获取数据。serviceMonitor 也是由 prometheus-operator 自动发现。
对应一些启用 ssl 认证的服务,需要提供 ssl 证书给 pr ...
阅读全文vagrant 快速搭建开发测试环境
Vagrant 简介Vagrant 是用于在单个工作流程中构建和管理虚拟机环境的工具,它具有高度的自动化和易于使用的工作流程,大大缩短了开发环境的部署时间,提高了效率。
Vagrant 与 Docker 有点类似,Docker 可以使用 Docker images 来运行不同的容器,而 Vagrant 也有与 Docker images 相似的 Vagrant Box,Vagrant Box 也可以理解为是一个镜像。可以使用一个 base box 运行虚拟机,然后在虚拟机中安装某些软件,然后将这个虚拟机导出为新的 Box。为了保证环境的统一性,你可以将此 Box 分发给其他同事使用。
Vargant 的优点
环境配置统一
一次配置打包,统一分发给团队成员,避免诸如 编码问题、缺少模块、配置文件不同 带来的问题。
环境快速搭建与销毁
通过统一的 Vagrantfile 配置文件,需要时可以快速的搭建,不需要时可以快速销毁,减少搭建环境的时间成本,减少资源的空闲占用提高资源使用率。
批量部署多种不同的环境
通过 Vagrantfile 配置文件可以定义不通的环境,然后一次性快速 ...
阅读全文Rancher Calico BGP 对接 F5
本文永久链接: https://www.xtplayer.cn/f5/f5-calico-bgp-ingress/
本文档基于 BIGIP-16.0.0.1-0.0.3.ALL-virtual-edition 版本编写,启用 F5 的 BGP 功能需要高级路由模块证书。
如果仅用于测试, https://www.f5.com/zh_cn/trials/big-ip-virtual-edition 此处可以申请试用版的序列号。
Rancher Calico BGP 配置K8S 集群部署目前 Rancher UI 部署 Calico 网络驱动暂不支持自定义高级配置,对于某些高级功能,需要通过手动修改网络驱动工作负载配置来实现。但是,在下一次升级 K8S 集群的时候可能会导致网络驱动自定义配置丢失。
如果对网络组件有特殊配置,建议在通过 Rancher UI 创建集群的时候,编辑集群 YAML 文件或者 RKE 配置文件中设置网络驱动为 none
network: plugin: none
以此来关闭集群原有网络驱动部署功能,在集群创建好之后通过手动部署网络驱动,部署 YAM ...
阅读全文Etcd 原理阐释及部署设置的最佳实践
本文永久链接: https://www.xtplayer.cn/etcd/etcd-best-practices/
介 绍Etcd 是一个开源的分布式键值存储,它由 CoreOS 团队开发,现在由 Cloud Native Computing Foundation 负责管理。这个词的发音是“et-cee-dee”,表示在多台机器上分发 Unix 系统的“/etc”目录,其中包含了大量的全局配置文件。它是许多分布式系统的主干,为跨服务器集群存储数据提供可靠的方式。它适用于各种操作系统,包括 Linux、BSD 和 OS X。
Etcd 具有下面这些属性:
完全复制:集群中的每个节点都可以使用完整的存档
高可用性:Etcd 可用于避免硬件的单点故障或网络问题
一致性:每次读取都会返回跨多主机的最新写入
简单:包括一个定义良好、面向用户的 API(gRPC)
安全:实现了带有可选的客户端证书身份验证的自动化 TLS
快速:每秒 10000 次写入的基准速度
可靠:使用 Raft 算法实现了存储的合理分布
Etcd 的工作原理在理解 Etcd 的工作机制之前,我们先定义三个关键 ...
阅读全文快速使用 Prometheus 监控 Etcd
本文永久链接: https://www.xtplayer.cn/etcd/monitor-etcd-quickly-using-prometheus/
本教程是「Etcd 超全解:原理阐释及部署设置的最佳实践」的后续文章。在本文中,我们将安装一个 Etcd 集群并使用 Prometheus 和 Grafana 配置监控,以上这些操作我们都通过 Rancher 进行。
我们将看到在不需要依赖的情况下充分利用 Rancher 的应用商店实现这一目标是如此容易。在本文中,我们将不需要:
为运行 kubectl 专门配置交互框,并指向 Kubernetes 集群
kubectl 的使用知识,因为我们可以使用 Rancher UI 完成这一切
安装/配置 Helm binary
Demo 前期准备
你将需要:
一个 Google 云平台的账号(免费的即可)。任意其他云也可以。
Rancher v2.4.7(撰写本文时的最新版本)
运行在 GKE(版本为 1.16.3-gke.1)上的 Kubernetes 集群(在 EKS 或 AKS 上运行也可以)
启动一个 Rancher ...
阅读全文Rancher k8s 资源管理
cgroup 简介控制群组 (control group)(简称cgroup) 是 Linux kernel 的一项功能。从使用的角度看,cgroup 是一个目录树结构,目录中可以创建多层子目录,这些目录称为**cgroup 目录**。在一些场景中为了体现层级关系,还会称为**cgroup 子目录**。
通过 cgroup 可对 CPU 时间片、系统内存、磁盘 IO、网络带宽等资源进行精细化控制,以便硬件资源可以在应用程序和用户间智能分配,从而增加整体效率。
通过将 cgroup 层级与 systemd 单位树绑定,可以把资源管理设置从进程级别转换至应用程序级别。因此,可以使用systemctl指令或通过修改 systemd 服务配置文件来管理系统资源。更多关于 systemd 相关配置请查阅附件文档。
Linux Kernel 的 cgroup 资源管控器cgroup 资源管控器也称为 cgroup 子系统,代表一种单一资源:如 CPU 时间片或者内存。
Linux kernel 提供一系列资源管控器,由 systemd 自动挂载。如需了解目前已挂载的资源管控器列表,可通过查看文件: ...
阅读全文K8S 节点不可用时快速迁移 Pods
本文永久链接: https://www.xtplayer.cn/kubernetes/fast-migration-pod-when-node-unavailable/
当节点宕机或者节点网络异常时,我们希望该节点上的 Pod 能够快速迁移到其他节点,并提供服务。但是测试发现节点 Down 掉以后,Pod 并不会立即迁移到其他节点。使用不同的 Kubernetes 版本测试,在默认配置下,需要等待将近 6 到 10 分钟节点上的 Pod 才会开始迁移。
这个现象与 Kubelet 的状态更新机制密切相关,下面我们来分析下 Kubelet 状态更新的基本流程。
kubelet
kubelet 自身会定期更新状态到 apiserver,通过参数 --node-status-update-frequency 配置上报频率,默认 10s 上报一次。
kube-controller-manager
kube-controller-manager 会定时去检查 kubelet 的状态,可通过 --node-monitor-period 自定义这个时间 ,默认是 5s。
当 node 失联一 ...
阅读全文使用 Longhorn 优雅地恢复运行中的容器应用
简介Longhorn 是基于 Kubernetes 的轻量级分布式块存储系统,它完全开源,并且已经捐献给 CNCF。随着云原生应用的普及,越来越多的服务提供容器运行时,数据的持久化存储问题渐渐显现出来,我们要做的不仅仅是数据的持久化,还要考虑备份的准确性,迁移的复杂性等。
Longhorn 提供的分布式块存储可以在 Kubernetes 中直接使用持久化存储,它可以为数据卷在不同主机提供多副本服务,以保证数据的可靠性,它提供简洁的 UI 可以直接管理存储节点、数据卷,轻松实现数据卷的备份/定时备份,您还可以使用容灾备份功能,在不同集群创建容灾备份卷,并在发生紧急情况时及时进行故障转移。
在这篇文章中,我们将把 MySQL 作为 Pod 部署到集群 A 中,并使用 Longhorn 作为持久化存储卷,然后依托 Rancher 多集群管理的特性,结合 Longhorn 的容灾备份功能,演示一下如何优雅地将集群 A 中的 MySQL 应用及数据迁移到集群 B 中。
环境准备
Rancher (HA 部署) - v2.4.8
Longhorn(通过 Rancher UI Cata ...
阅读全文rke1 coredns 解析外部域名
本文永久链接: https://www.xtplayer.cn/coredns/coredns-host/
问题背景有时候 kubernetes 集群中的应用需要通过域名访问集群外部的一些服务,虽然 ip 是可以正常通信,但是因为没有可用解析域名的 DNS 服务器,从而导致了应用无法正常访问外部域名。
解决方案一对于单个应用,可以给 Pod 的 hosts(/etc/hosts)添加条目。
编辑应用,点击右下角的 显示高级选项,在网络选项中设置 /etc/hosts
解决方案二对于方案一,少数应用或者临时测试是没有问题。但是对于大量应用需要同时修改配置,工作量就挺大了。这个时候就需要一个中间的 DNS 代理服务,只需要修改一次代理服务即可。
kubernetes 集群中内置了 DNS 服务器软件。在 rancher 或者 rke 集群中,不同的版本内置的 DNS 服务器软件不同。下表列出了对应关系:
https://rancher.com/docs/rke/latest/en/config-options/add-ons/dns/
...
阅读全文PLEG is not healthy(二)
本文永久链接: https://www.xtplayer.cn/kubernetes/kubelet/pleg-is-not-healthy-2/
上一篇文章(PLEG is not healthy (一))我们讲了 PLEG is not healthy 发生的原因,以及分析了 PLEG 的工作原理。
这篇文章再来说说实际遇到 PLEG is not healthy 时如何快速处理。
PLEG is not healthy 现象Healthy() 函数会以 “PLEG” 的形式添加到 runtimeState 中,Kubelet 在一个同步循环(SyncLoop() 函数)中会定期(默认是 10s)调用 Healthy() 函数。Healthy() 函数会检查 relist 进程(PLEG 的关键任务)是否在 3 分钟内完成。如果 relist 进程的完成时间超过 3 分钟,就会报告 PLEG is not healthy。
概括一点就是 kubelet 会每隔 10 秒去获取当前节点容器的健康状态,如果超过 3 分钟还没有完成,就会提示 PLEG is not healthy ...
阅读全文PLEG is not healthy (一)
本文永久链接: https://www.xtplayer.cn/kubernetes/kubelet/pleg-is-not-healthy/
PLEG 是什么?PLEG 全称叫 Pod Lifecycle Event Generator,即 Pod 生命周期事件生成器。实际上它只是 Kubelet 中的一个模块,主要职责就是通过匹配每个的 Pod 事件级别来调整容器运行时的状态,并将调整的结果写入缓存,使 Pod 的缓存保持最新状态。
PLEG 出现的背景在 Kubernetes 中,每个节点上都运行着守护进程 Kubelet 来管理节点上的容器,调整容器的实际状态以匹配 spec 中定义的状态。具体来说,Kubelet 需要对两个地方的更改做出及时的回应:
Pod spec 中定义的状态
容器运行时的状态
对于 Pod,Kubelet 会从多个数据来源 watch Pod spec 中的变化。对于容器,Kubelet 会定期(例如,10s)轮询容器运行时,以获取所有容器的最新状态。
随着 Pod 和容器数量的增加,轮询会产生不可忽略的开销,并且会由于 Kubelet 的并行操 ...
阅读全文Rancher2 配置 okta 认证
本文永久链接: https://www.xtplayer.cn/rancher/authentication/rancher2-okta-authentication/
版本支持: Rancher v2.2.0+
注意 在开始之前,请熟悉 外部身份验证配置和主要用户 的概念。
okta 应用配置这里以 okta 官方 demo 为例,访问 https://www.okta.com/free-trial/ 可以申请 30 天的试用账号。
创建应用
登录控制台后,依次点击 1、2、3、4 来创建应用。
注意:深红色的 3 是系统的提示。
选择 web 和 SAML 2.0,并点击创建。
SAML 配置常规设置 设置 APP 名称,其他参数可以忽略,然后点击下一步。
配置 SAML
SAML Settings
Single sign on URL
https://yourRancherHostURL/v1-saml/okta/saml/acs
Audience URI (SP Entity ID)
https://yourRancherHostUR ...
阅读全文采用 GitOps 的 11 大原因
本文永久链接: https://www.xtplayer.cn/git/top-11-reasons-to-use-gitops/
Kubernetes 允许我们单纯地使用声明性的配置文件来管理我们的应用部署和其他基础设施组件(例如,我们现在都是 YAML 开发者)。这使我们能够把所有这些文件放到 Git 仓库中,然后把它挂到流水线上(Jenkins、GitLab 等),流水线会把这些变化应用到集群上,然后就有了 GitOps。如果你还不了解 GitOps 是什么,可以查看我们之前发布过的文章:GitOps 初阶指南:将 DevOps 扩展至 K8S
为了使工作正常进行,我们必须确保改变集群的唯一方法是在 Git 仓库上提交。GitOps 并不是专门针对 Kubernetes 的,同样的原理也可以应用于任何其他声明式配置管理的环境。
可以说,很多企业已经开始采用 GitOps 了,但现在是业界开始充分认识到其潜力的时候。所以,让我们深入了解一下它如此出色的原因吧!
存储环境变更历史记录
只有通过更新相应 Git 仓库中的配置,才能改变应用环境。这将创建一个完整的状态变化的历史记 ...
阅读全文Could not generate persistent MAC address
本文永久链接: https://www.xtplayer.cn/linux/network/could-not-generate-persistent-mac-address/
问题现象在 docker 容器环境中,可能会看到很多如下的错误日志:
Could not generate persistent MAC address for tap0: No such file or directory
问题分析这是一个容器环境下的 BUG:https://github.com/systemd/systemd/issues/3374 。
解决方案编辑以下文件,如果这个文件没有则新建,然后配置以下参数。
/etc/systemd/network/99-default.link
[Link]NamePolicy=kernel database onboard slot pathMACAddressPolicy=none
MACAddressPolicy= 如何设置网卡的 MAC 地址:persistent 如果内核使用了网卡硬件固有的 MAC 地址(绝大多数网卡都有), 那么啥也不做, ...
阅读全文etcd 配置优化
本文永久链接: https://www.xtplayer.cn/etcd/etcd-optimize/
注意: 以下操作中所指的 K8S 集群,均是 rancher 或者 rke 创建的集群。
存储空间配额--quota-backend-bytes
存储空间配额可以理解为 ETCD 数据库大小,默认限制 2G(推荐最大 8G)。当数据写入耗尽存储空间时,ETCD 会引发整个集群范围的警告,该警告将会导致集群切换为维护模式,维护模式 仅接受键值读取和删除,不支持写入。
所以,在创建集群时候建议修改配额大小。但是这个配额值不宜过设置大,建议在主机内存的 60% - 70%。
手动释放配额空间如果在 ETCD 服务日志中看到类似以下的日志,那么说明 ETCD 配额空间可能已经满了,需要手动去清理并释放空间。
Error: rpc error: code = 8 desc = etcdserver: mvcc: database space exceeded
执行以下命令查看配额空间具体使用信息
# 在 ETCD 主机上执行以下命令docker exec -ti etcd sh ...
阅读全文mds、mds_stores、mdworker 占用大量 cpu 和内存
问题背景有时候忽然发现风扇转到特别厉害,打开的应用程序并不多。打开活动监视器,可以看到 mds、mds_stores、mdworker 占用很高的 cpu 和 内存 资源。
Spotlight 中文名称为 聚焦,就是按下 Command + 空格 弹窗的那个搜索框。
系统偏好设置位置:
mds、mds_stores、mdworker 是 Spotlight 的组成部分:
mds
元数据服务器。
mdworker
元数据服务器 worker 进程,主要负责文件的索引。
mds_stores
元数据存储服务。
在 Mac 上使用“聚焦”利用“聚焦”,您可以在 Mac 上查找应用、文稿及其他文件。您还可以利用“聚焦建议”来获取新闻、体育、影片、天气等信息。
使用“聚焦”进行搜索
点按菜单栏右上角的 ,或按下 Command-空格键。
输入您要查找的内容。您可以搜索类似“Apple Store 商店”或“来自艾米莉的电子邮件”这样的内容。
要打开结果列表中的某个项目,请连按这个项目。或者,要快速浏览结果,请使用向上箭头或向下箭头键。
按文件类型或位置进行搜索
...
阅读全文