字数:
155
·
阅读:
1 分钟
·
访问:
-
1. 介绍限流 限流是一种通过对系统请求进行限制和控制,避免系统过载,保证系统稳定性和安全性的技术手段。
2. Istio 限流 首先确认需要限流的应用是否已经加载了 sidecar,如果还未安装 istio, 请参考:https://yezihack.github.io/posts/istio-install 创建 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.字数:
291
·
阅读:
2 分钟
·
访问:
-
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.字数:
770
·
阅读:
4 分钟
·
访问:
-
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.字数:
858
·
阅读:
5 分钟
·
访问:
-
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 设置与指定服务器时间同步字数:
564
·
阅读:
3 分钟
·
访问:
-
源码安装 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 # 配置 .字数:
49
·
阅读:
1 分钟
·
访问:
-
背景 在 k8s 里部署了应用需要通过 ingress 提供外部调用. ingressController Pod 应用部署在 A 机器上, 应用部署在 B 机器上.
通过自定义域名调用应用,则需要经过自定义域名配置的 host 的 kube-proxy 到 IngressController Pod 机器,再由 Ingress 负载找到应用的 Service 负载的 endpoint.
最终请求到应用的 Pod.
环境 k8s: 1.19 docker: 19.10 linux: CentOS7.6 分析思路 先确定 host:port 端口是否通达? 再确认 ingress 是否可以访问到 service IP ingress 关于作者 我的博客:https://yezihack.github.io
欢迎关注我的微信公众号【空树之空】,一日不学则面目可憎也,吾学也。字数:
557
·
阅读:
3 分钟
·
访问:
-
1.1. 四大调度方式 1.1.1. 自动调试 1.1.2. 定向调度 1.1.2.1. NodeName 1.1.2.2. NodeSelector 1.1.3. 亲和性调度 1.1.3.1. NodeAffinity 1.1.3.2. PodAffinity 1.1.3.3. PodAntiAffinity 1.1.4. 污点(容忍)调度 1.1.4.1. 污点 1.1.4.2. 容忍 1.2. 参考 关于作者 1.1. 四大调度方式 自动调度:运行在哪个节点上完全由Scheduler经过一系列的算法计算得出 定向调度:NodeName、NodeSelector 亲和性调度:NodeAffinity、PodAffinity、PodAntiAffinity 污点(容忍)调度:Taints、Toleration 1.1.1. 自动调试 完全交由 kube-scheduler 来决定 pod 调度到哪里,不受人为控制。
1.1.2. 定向调度 1.1.2.1. NodeName NodeName用于强制约束将Pod调度到指定的Name的Node节点上。这种方式,其实是直接跳过Scheduler的调度逻辑,直接将Pod调度到指定名称的节点。
使用实例:
apiVersion: v1 kind: Pod metadata: name: pod-nodename namespace: dev spec: nodeName: kube-11 # 指定调度到node1节点上 containers: - name: nginx image: nginx:1.17.1 tip: 这种调度不够灵活,必须指定某 node 节点,若 node 异常会导致调度失败。字数:
651
·
阅读:
4 分钟
·
访问:
-
.1. 为什么升级 漏洞问题 使用新功能 .2. 特殊性 内网环境,没有外网。 多 master 集群。 外置 Etcd。 .3. 版本 kubeadm升级前版本:v1.16.0 kubeadm升级后版本:v1.16.15 .4. 升级前的检查 .4.1. 查看当前版本 kubeadm version kubeadm version: &version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", GitCommit:"72c30166b2105cd7d3350f2c28a219e6abcd79eb", GitTreeState:"clean", BuildDate:"2020-01-18T23:29:13Z", GoVersion:"go1.13.5", Compiler:"gc", Platform:"linux/amd64"} .4.2. 离线下载 kubectl,kubeadm,kubelet 下载 # 必须本机没有安装以下软件 version="1.16.15" yumdownloader --resolve --destdir=/opt/local-packages/ kubelet-${version} kubeadm-${version} kubectl-${version} .4.3. 制作共享 YUM 源 使用工具:saber
假定本机IP:192.168.10.10
# 安装 Createrepo yum install createrepo -y createrepo /opt/local-packages/ # 如果存在 repodata 则使用更新 createrepo --update /opt/local-packages/ # 共享文件 saber fs /opt/local-packages/ .字数:
57
·
阅读:
1 分钟
·
访问:
-
.1. 为什么 Kubernetes 众多组件汇集于一身,插件也是多如牛毛,在运维中或日常安装中难免会遇到各种各样的错误,有些错误并不好排查,让人火急火燎搜索一翻,半天已经过去。在此收集日常使用 kubernetes 遇到的问题。
.2. Ingress-nginx .2.1. Internal error occurred: failed calling webhook “validate.nginx.ingress.kubernetes.io” .2.1.1. 详细错误信息 Error from server (InternalError): error when creating "ingress.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1beta1/ingresses?timeout=10s": context deadline exceeded .2.1.2. 解决方法 删除验证
# 查看 kubectl get validatingwebhookconfigurations # 删除 kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission .3. 关于作者 我的博客:https://yezihack.github.io
欢迎关注我的微信公众号【空树之空】,一日不学则面目可憎也,吾学也。字数:
1063
·
阅读:
5 分钟
·
访问:
-
.1. k1s 是 kubectl 辅助工具 .2. 什么是 k1s .3. k1s 特色 .4. 安装 .5. 快速上手 .6. 功能 .6.1. Resources 列表( kubectl 系统对应) .6.2. Resources 列表(扩展功能) .6.3. Action 列表 .6.4. Extend 扩展功能 .6.5. 环境变量 .7. 使用说明 .7.1. 设置环境变量 .7.2. 日志查看 .7.3. 进入容器 .7.4. 资源操作 .7.4.1. nodes 资源 .7.4.2. pods 资源 .7.4.3. deployments 资源 .7.4.4. daemonsets 资源 .7.4.5. services 资源 .7.4.6. 清理垃圾 .8. 关于作者 .1. k1s 是 kubectl 辅助工具 so easy, so fast.