1. 查看 Release # 查看当前 Default 命名空间下的 Release helm ls # 查看所有命名空间下的 Release helm ls -A # 查看指定命名空间下的 Release helm ls -n <namespace> # 查看状态 helm status <release-name> # 卸载 helm delete <release-name> 2. 部署 helm install <release-name> <helm-Repository> -f values.yaml helm install <release-name> <helm-Repository> --set name=xxx -f values.yaml 3. 仓库 helm - 针对Kubernetes的Helm包管理器 helm repo add - 添加chart仓库 helm repo index - 基于包含打包chart的目录,生成索引文件 helm repo list - 列举chart仓库 helm repo remove - 删除一个或多个仓库 helm repo update - 从chart仓库中更新本地可用chart的信息 # 搜索 helm search hub redis # 搜索官网上的资源 helm search repo redis # 搜索本地添加的仓库资源 # 搜索更多版本列表 helm search repo -l metrics-server/metrics-server # 下载指定版本,CHART VERSION helm search repo metrics-server/metrics-server --version 3.
1. 介绍 Chart 模板才是 Helm 的灵魂所在,学会模板才算入门 Helm,让我们一起学习吧. 2. 模板语法 模板命令要括在 {{ 和 }} 之间。 如: apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" 3. 内置对象 系统自带一些内置对象,可以在模板里使用. Release: Release对象描述了版本发布本身。包含了以下对象: Release.Name: release名称 Release.Namespace: 版本中包含的命名空间(如果manifest没有覆盖的话) Release.IsUpgrade: 如果当前操作是升级或回滚的话,该值将被设置为true Release.IsInstall: 如果当前操作是安装的话,该值将被设置为true Release.Revision: 此次修订的版本号。安装时是1,每次升级或回滚都会自增 Release.Service: 该service用来渲染当前模板。Helm里始终Helm Values: Values对象是从values.yaml文件和用户提供的文件传进模板的。默认为空 Chart: Chart.yaml文件内容。 Chart.yaml里的所有数据在这里都可以可访问的。比如 {{ .Chart.Name }}-{{ .Chart.Version }} 会打印出 mychart-0.1.0 Files: 在chart中提供访问所有的非特殊文件的对象。你不能使用它访问Template对象,只能访问其他文件。 请查看这个 文件访问部分了解更多信息 Files.Get 通过文件名获取文件的方法。 (.Files.Getconfig.ini) Files.GetBytes 用字节数组代替字符串获取文件内容的方法。 对图片之类的文件很有用 Files.Glob 用给定的shell glob模式匹配文件名返回文件列表的方法 Files.
1. 什么是 Helm Helm是一个Kubernetes的包管理工具,它可以帮助我们简化Kubernetes应用程序的部署和管理。使用Helm,可以将Kubernetes应用程序打包成易于安装、升级和卸载的chart包,并且可以在不同的Kubernetes环境中重复使用这些chart包。 2. Helm 三个概念 Chart 代表着 Helm 包,即模板代码的集合 Repository 用来存放和共享 charts 的地方 Release 运行在 Kubernetes 集群中的 chart 的实例 3. 安装 Helm 官方地址: https://github.com/helm/helm/releases # linux amd64 wget https://get.helm.sh/helm-v3.13.0-linux-amd64.tar.gz tar -zxvf helm-v3.13.0-linux-amd64.tar.gz cd linux-amd64 cp helm /usr/local/sbin 4. 快速入门 4.1. 添加 Repository 仓库 https://artifacthub.io/ # 添加 Helm Char 仓库 helm repo add bitnami https://charts.bitnami.com/bitnami # 查看添加的仓库列表 helm repo ls # 更新 charts 列表 helm repo update 4.2. 搜索 Chart # 搜索 charts 列表 helm search repo bitnami # 搜索指定的 charts 包名,如 nginx helm search repo nginx 4.
1. 设置共享目录 前提:必须关闭虚拟机,再点击设置 如图所示: 2. 使用共享目录 # 安装 open-vm-tools yum install -y open-vm-tools # 共享目录生效 vmhgfs-fuse /mnt/hgfs/ # 设置软链 mkdir /opt/vm-share ln -s /mnt/hgfs/vm-share/ /opt/vm-share 3. 设置开机启动 cat >> /etc/rc.local <<EOF vmhgfs-fuse /mnt/hgfs/ EOF
1. 什么是 Kubernetes 的高可用 高可用性是指系统或应用程序在面对故障或异常情况时能够保持持续运行和提供服务的能力。在构建高可用的Kubernetes集群时,可以采取以下一些高级方法和策略: 多节点部署:使用多个节点来部署Kubernetes集群,确保即使某个节点发生故障,其他节点仍然可以继续提供服务。 负载均衡:通过在集群前端引入负载均衡器,将流量分发到多个节点上,实现负载均衡和故障转移。这样即使某个节点发生故障,负载均衡器可以将流量重新路由到其他健康的节点上。 自动伸缩:利用Kubernetes的自动伸缩功能,根据实际负载情况自动调整集群的节点数量,以满足应用程序的需求。这样可以在高负载时增加节点数量,保证性能,而在低负载时减少节点数量,节省资源。 容器健康检查:通过定义容器的健康检查机制,Kubernetes可以监控容器的运行状态,并在容器出现故障或异常时自动重启或替换容器,确保应用程序的持续可用性。 数据备份和恢复:定期对关键数据进行备份,并建立可靠的数据恢复机制,以防止数据丢失或损坏。这可以通过使用Kubernetes的持久化存储卷(Persistent Volume)和备份工具来实现。 故障切换和容错:通过使用Kubernetes的故障切换功能,可以在节点或容器发生故障时自动将服务切换到备用节点或容器上,确保应用程序的连续性和可用性。 监控和告警:建立全面的监控系统,实时监测集群和应用程序的运行状态,并设置告警机制,及时发现和处理潜在的故障或异常情况。 通过采取这些高级方法和策略,可以有效地提高Kubernetes集群的可用性和稳定性,确保应用程序在运行时不会出现服务中断。 2. Haproxy + Keepalived 优缺点 Haproxy和Keepalived是常用的组合,用于实现负载均衡和高可用性的解决方案。下面是它们的优缺点: 2.1. Haproxy Haproxy的优点: 高性能:Haproxy是一个高性能的负载均衡器,能够处理大量的并发连接和请求。 灵活的配置:Haproxy提供了丰富的配置选项,可以根据需求进行灵活的负载均衡策略和规则配置。 健康检查:Haproxy支持对后端服务器进行健康检查,可以自动排除故障的服务器,确保只将请求转发到健康的服务器上。 SSL终止:Haproxy可以作为SSL终止器,将SSL/TLS连接解密后再转发给后端服务器,减轻服务器的负担。 Haproxy 的缺点: 单点故障:Haproxy本身是单点,如果Haproxy节点发生故障,可能会导致服务中断。 配置复杂:Haproxy的配置相对复杂,需要一定的学习和经验来正确配置和管理。 2.2. Keepalived Keepalived 的优点: 高可用性:Keepalived可以将多个Haproxy节点组成一个高可用集群,通过VRRP协议实现故障切换,确保服务的连续性和可用性。 快速故障切换:Keepalived能够快速检测到主节点的故障,并将VIP(虚拟IP)迅速切换到备用节点上,减少服务中断时间。 简单配置:Keepalived的配置相对简单,可以快速部署和管理。 Keepalived的缺点: 配置同步:Keepalived需要确保配置文件的同步,以保证所有节点的配置一致性,这可能需要额外的配置和管理工作。 依赖性:Keepalived依赖于底层网络和操作系统的支持,可能受限于特定的网络环境和操作系统版本。 架构图 3. Haproxy 3.1. 底层原理 Keepalived 是一种用于实现高可用性的软件,其底层原理主要包括以下几个方面: VRRP 协议:Keepalived 使用 VRRP(Virtual Router Redundancy Protocol)协议来实现高可用性。VRRP 协议通过将多个服务器组成一个虚拟路由器组,共同提供相同的虚拟 IP 地址,实现了服务器的冗余备份和故障切换。 虚拟路由器组:多个服务器通过 Keepalived 组成一个虚拟路由器组,共同提供相同的虚拟 IP 地址。其中一个服务器被选举为主服务器(Master),其他服务器为备份服务器(Backup)。 心跳检测:主备服务器之间通过周期性的心跳消息进行通信,以检测主服务器的可用性。如果备份服务器在一定时间内没有收到主服务器的心跳消息,就会触发主备切换。 健康检查:Keepalived 支持对服务的健康检查,通过定期检查服务的可用性和性能,及时剔除故障或不可用的服务器,保证了服务的高可用性和稳定性。 路由表更新:当主服务器发生故障或不可用时,备份服务器中的一台将会被选举为新的主服务器,接管虚拟 IP 地址的转发功能。同时,Keepalived 会更新路由表,将虚拟 IP 地址指向新的主服务器。
1. 介绍限流 限流是一种通过对系统请求进行限制和控制,避免系统过载,保证系统稳定性和安全性的技术手段。 2. Istio 限流 首先确认需要限流的应用是否已经加载了 sidecar,如果还未安装 istio, 请参考:https://yezihack.github.io/istio-install.html 创建 app-ratelimit.yaml: 设置流速间隔时间:token_bucket.fill_interval 设置流速令牌数量:token_bucket.max_tokens 选择哪些应用限流:workloadSelector.labels apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: app-ratelimit spec: workloadSelector: labels: app: my-app # 用来选择需要进行配置的工作负载 configPatches: - applyTo: HTTP_FILTER match: listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" patch: operation: INSERT_BEFORE value: name: envoy.filters.http.local_ratelimit typed_config: "@type": type.googleapis.com/udpa.type.v1.TypedStruct type_url: type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit value: stat_prefix: http_local_rate_limiter token_bucket: # 令牌桶算法的配置信息,用于控制每秒放行的请求数量。 max_tokens: 10 # 指定令牌桶中最多可以存储的令牌数,即最大可用令牌数 tokens_per_fill: 10 # 指定每次填充令牌桶的令牌数,即每次可用令牌数。 fill_interval: 60s # 定填充令牌桶的时间间隔,即每隔多长时间填充一次令牌桶。 filter_enabled: # 控制是否启用该过滤器的开关。 runtime_key: local_rate_limit_enabled default_value: numerator: 100 denominator: HUNDRED filter_enforced: # 制是否强制执行该过滤器的开关。 runtime_key: local_rate_limit_enforced default_value: numerator: 100 denominator: HUNDRED response_headers_to_add: - append: false header: key: x-local-rate-limit value: 'true' kubectl apply -f app-ratelimit.
1. Istio 介绍 Istio 是由 Google、IBM 和 Lyft 开源的微服务管理、保护和监控框架。Istio 为希腊语,意思是”起航“。 Istio 使用功能强大的 Envoy 服务代理扩展了 Kubernetes,以建立一个可编程的、可感知的应用程序网络。 Istio 与 Kubernetes 和传统工作负载一起使用,为复杂的部署带来了标准的通用流量管理、遥测和安全性。 2. 下载 istio 以 CentOS7 为例 官方下载:https://github.com/istio/istio/releases/ 截止写本文时,版本更新到 v1.18.0。 2.1. 版本的选择 https://istio.io/latest/zh/docs/releases/supported-releases/ v1.18.0 适合 k8s 1.24, 1.25, 1.26, 1.27。 根据你的 kubernetes 版本进行下载相应的 istio 版本。 cd /opt/src wget https://github.com/istio/istio/releases/download/1.18.0/istio-1.18.0-linux-amd64.tar.gz tar -zxvf istio-1.18.0-linux-amd64.tar.gz cd istio-1.18.0 cp istio-1.18.0/bin/istioctl /usr/local/bin # 查看版本 istioctl version # 如果显示如下,则表示你未设置 KUBECONFIG 环境变量 unable to retrieve Pods: Get "http://localhost:8080/api/v1/namespaces/istio-system/pods?fieldSelector=status.phase%3DRunning&labelSelector=app%3Distiod": dial tcp [::1]:8080: connect: connection refused 1.
1. 准备工作 搭建 ETCD 高可用集群,至少3台或5台或7台,奇数台即可。本地搭建采用3台 Linux CentOS7.9 环境。 序列 HOSTNAME IP etcd 节点名称 1 kube-10 192.168.9.10 etcd01 2 kube-11 192.168.9.11 etcd02 3 kube-13 192.168.9.13 etcd03 创建目录: bin 存储 etcd 二进制文件 data 存储数据目录 sh 脚本目录 ssl 证书目录 # 每个机器上都执行 mkdir -p /opt/etcd/{bin,data,sh,ssl} 2. 证书生成 2.1. cfssl 工具 cd /opt/src # 下载 wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 # 改名 mv cfssl_linux-amd64 cfssl mv cfssljson_linux-amd64 cfssljson mv cfssl-certinfo_linux-amd64 cfssl-certinfo # 添加执行权限 chmod +x cfssl cfssljson cfssl-certinfo # 复制到 /usr/local/bin cp cfssl cfssl-cerinfo cfssljson /usr/local/bin 2.
1. 准备工作 适合于 kubernetes 1.17/1.18/1.19/1.20/1.21 搭建 ETCD 高可用集群,至少3台或5台或7台,奇数台即可。本地搭建采用3台 Linux CentOS7.9 环境。 序列 HOSTNAME IP etcd 节点名称 1 kube-10 192.168.9.10 etcd01 2 kube-11 192.168.9.11 etcd02 3 kube-13 192.168.9.13 etcd03 创建目录: bin 存储 etcd 二进制文件 data 存储数据目录 conf 配置目录 sh 脚本目录 ssl 证书目录 # 每个机器上都执行 mkdir -p /opt/etcd-3.4/{bin,data,sh,ssl,conf} 时间同步 # 安装 yum install chrony -y # 管理 systemctl start chronyd #启动 systemctl status chronyd #查看 systemctl restart chronyd #重启 systemctl stop chronyd #停止 systemctl enable chronyd #设置开机启动 # 修改时区 timedatectl set-timezone Asia/Shanghai # 设置完时区后,强制同步下系统时钟: chronyc -a makestep 设置与指定服务器时间同步
源码安装 nginx 下载 http://nginx.org/en/download.html wget http://nginx.org/download/nginx-1.23.3.tar.gz tar -zxvf nginx-1.23.3.tar.gz cd nginx-1.23.3 修改源码版本(可选) 增加安全性,可以修改 nginx 默认的版本名称,如 nginx/1.23.3, 可任意修改为: sgfoot/100.0.0 vim src/core/nginx.h # 大约在14行左右 #define nginx_version 1023003 #define NGINX_VERSION "1.23.3" # 版本号修改 #define NGINX_VER "nginx/" NGINX_VERSION # 软件名称修改 安装 使用自定义用户和用户组,更加安全 开启模块: with-http_ssl_module SSL模块 with-http_stub_status_module 统计功能模块,分析 nginx 性能 with-http_realip_module 获取真实IP模块 with-threads 线程池模块,提高nginx性能 with-http_gzip_static_module 开启压缩功能 --with-http_v2_module 用于启用 Nginx 中的 HTTP/2 功能模块,以提供更快速和高效的 Web 服务 yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel # 添加用户和组, -s /sbin/nologin 不允许登陆的帐号,-M 没有/home的帐号,-g 添加到 nginx 组中 sudo groupadd nginx sudo useradd -s /sbin/nologin -M -g nginx nginx # 配置 .