rancher16 通过 webhook 自动升级服务
本文永久链接: https://www.xtplayer.cn/rancher/rancher16-webhook-auto-update/
概述前面的文章我们有讲述了如何通过 Rancher-webhook 实现 Service/Host 的弹性伸缩。今天我们再来演示一下如何通过 Rancher-webhook 对接三方的 CI 系统,实现微服务镜像的自动构建与服务的自动升级。
PS: CI 即持续集成,包括但不限于自动编译、发布和测试、自动构建,我们这里说的 CI 系统仅限于自动构建这一步。 前面已经对 webhook 做了介绍,这里不再讲解。本文主要基于阿里云的容器镜像服务,整个流程大致如下图所示:
基础准备
安装支持的 docker (http://rancher.com/docs/rancher/v1.6/en/hosts/#supported-docker-versions);
安装 Rancher v1.6.11 (https://hub.docker.com/u/rancher);
因为是对接云端 CI,所以 Rancher server 需要能被公网访 ...
阅读全文K8S 节点初始化
本文永久链接: https://www.xtplayer.cn/rancher/node-init/
自动清理节点将节点添加到集群时后,会创建容器、虚拟网络接口等资源和证书、配置文件。从集群中正常删除节点时(如果处于 Active 状态),将自动清除这些资源,并且只需重新启动节点即可。当节点无法访问且无法使用自动清理,或者异常导致节点脱离集群后,如果需要再次将节点加入集群,那么需要手动进行节点初始化操作。
手动清理节点
警告: 以下操作将删除节点中的数据,在执行命令之前,请确保已进行数据备份。
#!/bin/bashKUBE_SVC='kubeletkube-schedulerkube-proxykube-controller-managerkube-apiserver'for kube_svc in ${KUBE_SVC};do # 停止服务 if [[ `systemctl is-active ${kube_svc}` == 'active' ]]; then systemctl stop ...
阅读全文rancher k8s 使用 iscsi 存储
本文永久链接: https://www.xtplayer.cn/rancher/rancher-k8s-use-iscsi-storage/
iSCSI 命名约定iSCSI 使用一种特殊、唯一的名称来标识 iSCSI 节点(目标或启动器)。此名称类似于与光纤通道设备相关联的全球名称 (WWN),可作为一种通用的节点识别方式使用。iSCSI 名称通过两种不同方式格式化。最常见的是 IQN 格式。有关 iSCSI 命名要求和字符串配置文件的更多详细信息,请参见 IETF 网站上的 RFC 3721 和 RFC 3722。
iSCSI 限定名 (IQN) 格式IQN 格式采用 iqn.yyyy-mm.naming-authority:unique name 的形式,其中:
yyyy-mm 是命名机构成立的年份和月份。
naming-authority 通常是命名机构的 Internet 域名的反向语法。例如,iscsi.vmware.com 命名机构的 iSCSI 限定名形式可能是 iqn.1998-01.com.vmware.iscsi。此名称表示 vmware.com 域名于 19 ...
阅读全文关于 eBPF
原文:https://docs.projectcalico.org/about/about-ebpf
eBPF 是一种 Linux 内核功能,允许将快速而安全的微型程序加载到内核中以自定义其操作。
通过本文档,您将了解:
eBPF 的一般背景。
eBPF 的各种用途。
Calico 如何在 eBPF 数据平面中使用 eBPF。
什么是 eBPF?eBPF 是嵌入在 Linux 内核中的 “虚拟机”。它允许将微型程序加载到内核中,并附加到钩子上,而钩子会在发生某些事件时触发。这样可以自定义内核的行为(有时是很严格的)。尽管每种钩子的 eBPF 虚拟机都相同,但是钩子的功能有很大差异。虽然将程序加载到内核中可能很危险,但内核通过非常严格的静态验证器运行所有程序。验证程序会将程序沙盒化,以确保它只能访问允许的内存部分,并确保它必须快速终止。
为什么称为 eBPF?eBPF 是 “扩展 Berkeley 包过滤器” 的缩写。Berkeley 包过滤器是一种更早,更专业的虚拟机,专门用于过滤数据包。诸如tcpdump此类使用此“经典” BPF VM 来选择应发送到用户空间进行分析的数据包 ...
阅读全文Gogs 安装,升级
本文永久链接: https://www.xtplayer.cn/git/gogs-install-update/
Gogs 是一款极易搭建的轻量级自助 Git 服务。
Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。
功能特性
支持活动时间线
支持 SSH 以及 HTTP/HTTPS 协议
支持 SMTP、LDAP 和反向代理的用户认证
支持反向代理子路径
支持用户、组织和仓库管理系统
支持添加和删除仓库协作者
支持仓库和组织级别 Web 钩子(包括 Slack 集成)
支持仓库 Git 钩子和部署密钥
支持仓库工单(Issue)、合并请求(Pull Request)、Wiki 以及保护分支
支持迁移和镜像仓库以及它的 Wiki
支持在线编辑仓库文件和 Wiki
支持自定义源的 Gravatar 和 Federated Avatar
支持 Jupyter Notebook
支 ...
阅读全文Api Server 和 ETCD 健康状态检查
本文永久链接: https://www.xtplayer.cn/kubernetes/api-server-and-etcd-health-state-check/
kube-apiserver 健康状态检查rancher 自定义集群或者 rke 集群,kube-scheduler 和 kube-controller-manager 以及 kube-apiserver 同时运行在一个主机上,并且都是以 host 网络默认运行。 当 kube-scheduler 和 kube-controller-manager 去连接 127.0.0.1:6443 时,其实就是在连接 kube-apiserver。有时如果提示 kube-scheduler 和 kube-controller-manager 连接 127.0.0.1:6443 失败,那么需要检查一下看是否是 kube-apiserver 本身运行异常,或者因为网络问题连接不上 kube-apiserver。
因为 rancher 自定义集群或者 rke 集群中,所有组件都开启了 ssl 认证,并且 kube-apiserver 和 ...
阅读全文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 ...
阅读全文