监控数据的可视化分析神器 Grafana 的告警实践
1088
2022-10-08
第十三篇 二进制安装kube-proxy
01写在之前
本文是二进制安装kubernetes v1.17.0 之kube-proxy,kube-proxy是什么,这里就不得不说下service,service是一组Pod的抽象集合,它相当于一组Pod的负载均衡器,负责将请求分发到对应的pod,kube-proxy就是负责service的实现的,当请求到达service时,它通过label关联到后端并转发到某个Pod;kube-proxy提供了三种负载均衡模式:用户空间、iptables、ipvs,网上有很多关于这三种模式的区别,这里先不详述,本文采用ipvs。
kube-proxy需要运行在所有节点上(因为我们master节点也有Pod,如果没有的话,可以只部署在非master节点上),kube-proxy它主动的去监听kube-apiserver中service和endpoint的变化情况,然后根据定义的模式,创建路由规则,并提供服务service IP(headless类型的service无IP)和负载均衡功能。注意:在所有节点安装ipvsadm和ipset命令,加载ip_vs内核模块,准备章节已经执行过。
下载https://dl.k8s.io/v1.17.0/kubernetes-node-linux-amd64.tar.gz并解压,文章中使用到kube-proxy,把kube-proxy到中控机的/data/k8s/bin/目录,再把kube-proxy分发到所有节点上面/data/k8s/bin/目录中即可。
02创建kubeconfig配置文件并分发
kube-proxy是作为kube-apiserver的客户端,由于我们启用了TLS,所以需要认证访问,这里我们需要使用到之前生成的证书(详情见:第三篇 PKI基础概念、cfssl工具介绍及kubernetes中证书),下面我们创建kubeconfig配置文件;
#!/bin/bashcd /data/k8s/worksource /data/k8s/bin/env.shkubectl config set-cluster kubernetes \ --certificate-authority=/data/k8s/work/ca.pem \ --embed-certs=true \ --server=${KUBE_APISERVER} \ --kubeconfig=kube-proxy.kubeconfigkubectl config set-credentials kube-proxy \ --client-certificate=kube-proxy.pem \ --client-key=kube-proxy-key.pem \ --embed-certs=true \ --kubeconfig=kube-proxy.kubeconfigkubectl config set-context default \ --cluster=kubernetes \ --user=kube-proxy \ --kubeconfig=kube-proxy.kubeconfigkubectl config use-context default --kubeconfig=kube-proxy.kubeconfigfor node_name in ${NODE_NAMES[@]}do echo ">>> ${node_name}" scp kube-proxy.kubeconfig root@${node_name}:/etc/kubernetes/done
03创建kube-proxy配置文件并分发
#!/bin/bashcd /data/k8s/worksource /data/k8s/bin/env.shcat > kube-proxy-config.yaml.template <
配置详解
配置选项 | 选项说明 |
clientConnection | 与kube-apiserver交互时的参数设置 |
burst: 200 | 临时允许该事件记录值超过qps设定值 |
kubeconfig | kube-proxy 客户端连接 kube-apiserver 的 kubeconfig 文件路径设置 |
qps: 100 | 与kube-apiserver交互时的QPS,默认值5 |
bindAddress | kube-proxy监听地址 |
healthzBindAddress | 用于检查服务的IP地址和端口,默认:0.0.0.0:10256 |
metricsBindAddress | metrics服务的ip地址和端口,默认:127.0.0.1:10249 |
enableProfiling | 如果设为true,则通过/debug/pprof处理程序上的web界面进行概要分析 |
clusterCIDR | kube-proxy 根据 --cluster-cidr 判断集群内部和外部流量,指定 --cluster-cidr 或 --masquerade-all 选项后 kube-proxy 才会对访问 Service IP 的请求做 SNAT |
hostnameOverride | 参数值必须与 kubelet 的值一致,否则 kube-proxy 启动后会找不到该 Node,从而不会创建任何 ipvs 规则; |
mode | 使用 ipvs 模式 |
portRange | 主机端口的范围(beginPort- endport,单端口或beginPort+偏移量),可用于代理服务流量。如果(未指定,0,或0-0)端口将被随机选择 |
kubeProxyIPTablesConfiguration: | |
masqueradeAll: false | 如果使用纯iptables代理,SNAT所有通过服务集群ip发送的通信 |
kubeProxyIPVSConfiguration: | |
scheduler: rr | 当proxy为ipvs模式时,ipvs调度类型 |
excludeCIDRs: [] |
04创建启动文件并分发
这里的几个参数很简单,就不对其进行说明了。
#!/bin/bashcd /data/k8s/worksource /data/k8s/bin/env.shcat > kube-proxy.service <
05启动服务
#!/bin/bashcd /data/k8s/worksource /data/k8s/bin/env.shfor node_ip in ${NODE_IPS[@]}do echo ">>> ${node_ip}" ssh root@${node_ip} "mkdir -p ${K8S_DIR}/kube-proxy" ssh root@${node_ip} "systemctl daemon-reload && systemctl enable kube-proxy && systemctl restart kube-proxy"done
06服务检查
#!/bin/bashcd /data/k8s/worksource /data/k8s/bin/env.shfor node_ip in ${NODE_IPS[@]}do echo ">>> ${node_ip}" ssh root@${node_ip} "systemctl status kube-proxy|grep -i active"done检查结果:>>> 192.168.16.104 Active: active (running) since Sun 2019-12-29 23:00:26 CST; 1 months 5 days ago>>> 192.168.16.105 Active: active (running) since Sun 2019-12-29 23:00:27 CST; 1 months 5 days ago>>> 192.168.16.106 Active: active (running) since Sun 2019-12-29 23:00:27 CST; 1 months 5 days ago>>> 192.168.16.107 Active: active (running) since Sun 2019-12-29 23:00:28 CST; 1 months 5 days ago
07总结
kube-proxy组件安装相对简单,这里只要知道kube-proxy是什么,了解其工作机制,它有哪些负载均衡模式,如何为service提供服务,kube-proxy又是如何关联到后端pod等,这里提供了非安全端口10249,安全端口10256。
分享使我快乐
往期文章
通俗易懂理解Kubernetes核心组件及原理
Centos7.6内核升级
第一篇 k8s组件版本及功能简介
第二篇 环境初始化准备
第三篇 PKI基础概念、cfssl工具介绍及kubernetes中证书
第四篇 Etcd存储组件高可用部署
第五篇 安装keepalived与Nginx
第六篇 二进制安装 kube-apiserver
第七篇 验证kube-apiserver及kubeconfig配置详解
第八篇 kube-controller-manager安装及验证
第九篇 kube-scheduler 安装及验证
第十篇 网络组件flanneld安装及使用
第十一篇 安装docker引擎
第十二篇 二进制安装kubelet
发表评论
暂时没有评论,来抢沙发吧~