K8S学习笔记(4)-增加node节点

版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 1. 前言 警告:本文仅用于萌叔自己总结之用,对其它人而言可能毫无营养,没有阅读价值。 本文使用的安装工具为easzlab/kubeasz 2. 步骤 2.1 修改docker目录 通过软连接的方式修改docker 数据存储路径 ansible new-node -i hosts -m shell -a 'mkdir /data/docker' ansible new-node -i hosts -m shell -a 'cd /var/lib/ && ln -s /data/docker docker' 2.2 安装gluster fs依赖 如果pod需要用到gluster fs才需要执行此步骤 ansible new-node -i hosts -m shell -a 'yum install centos-release-gluster glusterfs-fuse -y' 2.3 安装ntpd确保时钟同步 # 安装ntd ansible new-node -i hosts -m shell -a 'yum -y install ntp' # 设置开机自启动 ansible new-node -i hosts -m shell -a 'systemctl enable ntpd' # 启动ntpd服务 ansible new-node -i hosts -m shell -a 'systemctl start ntpd' # 手动执行一次同步 ansible new-node -i hosts -m shell -a 'ntpdate -u 0.centos.pool.ntp.org' 2.4 添加新节点 easzctl add-node 192.168.1.11 新增kube-node节点大致流程为:tools/02.addnode.yml 见参考资料1 ...

December 24, 2020 · 1 min

聊聊k8s调试工具kt-connect的实现

版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 1. 引言 kt-connect是阿里开源的k8s的调试工具,它的作用类似于VPN,能够打通k8s集群和本地的网络。 传送门: alibaba/kt-connect 它有3种模式 Connect 本地网络直接访问k8s集群网络 Exchange 转发集群流量到本地 Service Mesh 支持 另外它提供了一个Dashboard可以查看k8s集群内的所有可访问的service资源以及正在进行调试的Connect和Exchange数量, 用处不大。 2. 使用介绍 这里萌叔只简单介绍Connect和Exchange2种模式,更详细的使用说明见参考资料1 2.1 Connect模式 sudo ktctl -i ik8share/kt-connect-shadow:stable connect 注意: kt-connect 依赖sshuttle, 且运行时必须拥有root权限。另外sshuttle 又依赖了iptables(linux操作系统), ptctl(macOS) -i 参数指定镜像的地址 这里ik8share/kt-connect-shadow:stable是镜像的名字,阿里默认提供的镜像地址rdc-incubator/kt-connect-shadow在萌叔的测试k8s集群中无法正常拉取。这里提供了一个docker hub的镜像地址。 2.2 Exchange模式 sudo ktctl -n test -i ik8share/kt-connect-shadow:stable exchange dm-backend-v0-0-1 --expose 3000 注意: 这里的dm-backend-v0-0-1 是k8s集群中Deployment资源的名称。 该命令会将所有发往dm-backend-v0-0-1所属Pod的3000端口的请求都转发到本地的3000端口上。 总结:Connect和Exchange 模式都是单向的,一个是从集群外部到集群内部,一个是从集群内部到集群外部。 3. 原理和实现 kt-connect设计巧妙,且最大限度的避免了重复发明轮子,值得称赞。 3.1 Connect模式 我们先来看看Connect模式要达到的目标 假定 Namespace: test Service: sv-backend-v0-0-1 Pod的IP: 172.20.1.29 ...

December 1, 2020 · 1 min

k8s学习笔记(2)-删除namespace失败处理

版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 1. 前言 警告:本文仅用于萌叔自己总结之用,对其它人而言可能毫无营养,没有阅读价值。 删除namespace出现下面的情况 ╰─$ kubectl get ns NAME STATUS AGE default Active 5d3h ingress-nginx Active 4d22h istio-system Active 4d3h kube-node-lease Active 5d3h kube-public Active 5d3h kube-system Active 5d3h kubernetes-dashboard Active 39m ns-helloworld Terminating 3h56m 2.解决方法 2.1 导出namespace配置 kubectl get namespace ns-helloworld -o json > tmp.json namespace无法删除是因为namespace相关联的资源无法释放。 2.2 清空spec中的内容 2.3 触发 kubectl proxy curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json http://127.0.0.1:8001/api/v1/namespaces/ns-helloworld/finalize 参考资料 kubernetes无法删除namespace 提示 Terminating 请我喝瓶饮料

October 19, 2020 · 1 min

k8s学习笔记(1)-安装dashboard

版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 1. 前言 警告:本文仅用于萌叔自己总结之用,对其它人而言可能毫无营养,没有阅读价值。 Dashboard 是基于网页的 Kubernetes 用户界面。 你可以使用 Dashboard 将容器应用部署到 Kubernetes 集群中,也可以对容器应用排错,还能管理集群资源。 你可以使用 Dashboard 获取运行在集群中的应用的概览信息,也可以创建或者修改 Kubernetes 资源 (如 Deployment,Job,DaemonSet 等等)。 通过一段时间的使用感受而言,Dashboard虽然做的差强人意,但聊胜于无。 2. 安装&配置 wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml 建议脚本下载以后,先大致阅读以下 2.1 修改yaml kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: ports: - port: 443 targetPort: 8443 type: NodePort # 改为NodePort方式暴露service selector: k8s-app: kubernetes-dashboard 2.2 安装 kubectl apply -f recommended.yaml 安装完成以后 ╰─$ kubectl get svc -n kubernetes-dashboard NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE dashboard-metrics-scraper ClusterIP 10.68.53.228 <none> 8000/TCP 18h kubernetes-dashboard NodePort 10.68.254.87 <none> 443:37736/TCP 17h 3. 访问web UI 3.1 方式1 通过 kubectl proxy 默认K8S采用Flannel网络的模型的情况下,集群内部和外部网络是不能直接互联的,但是能够通过kubectl proxy作为代理,进行通讯 ...

October 12, 2020 · 2 min

istio学习笔记(2)-envoy

版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 1. 前言 本文存在的目的,是为了通过图例的方式更好的整理envoy存在的意义 2. 图示 namespace配置了自动注入(istio-injection:enabled)之后,每个POD都会自动生成1个Sidecar容器 istio-proxy(运行sidecar代理,实现方式为Envoy或MOSN 图示展示服务网格中的请求的情况 2.1 请求网格内部的服务 downstream和upstream是网格内的2个服务的容器 downstream调用upstream 对这种场景,请求穿过需要穿过2个envoy,1个是调用方POD中的envoy, 1个是被调用方POD中的envoy 2.2 请求网格外部的服务 External Service是网格外部的1个服务 对于这种场景,只穿过一次envoy 3. 支持的服务治理功能 请求分发, 按不同版本,以特定权重分发 负载均衡 URL重写 故障注入,包含增加延迟,或者直接拒绝 服务熔断,比如针对5XX执行熔断操作 限频 重试 超时控制 状态统计 QPS/流量/URL/延迟等 这部分信息最后会由prometheus统一收集,最终展现在Grafana和Kiali中 envoy实际是将原来应用中的拦截器以及网关实现的部分功能做了抽取和抽象,使得应用开发人员能够转注于业务逻辑开发。 后记(重要) istio默认不记录日志。如果需要记录请求日志,需要在ConfigMap istio中,增加 accessLogFile: /dev/stdout accessLogEncoding: JSON # 可选值为 JSON或TEXT 另外envoy不支持HTTP1.0,如果发出的请求是HTTP1.0,会收到HTTP Status Code 426,要求升级协议。 参考资料 1.Sidecar 注入及透明流量劫持 2.Istio流量分析 打赏我

July 7, 2020 · 1 min

istio学习笔记(1)-配置Gateway

版权声明 本站原创文章 由 萌叔 发表 转载请注明 萌叔 | http://vearne.cc 1. 前言 萌叔试图通过Gateway把服务暴露在服务网格外部,下面是笔者的一些总结。 2. 体系结构 很重要 gateway-controller <-> ingress-controller (实际的pod) istio-ingressgateway <-> nginx-ingress-controller (一种实现) gateway <-> ingress (配置) gateway-controller的一个实现是 istio-ingressgateway ingress-controller的一个实现是 nginx-ingress-controller nginx-ingress-controller相当于openresty, 配置ingress以后会生成对应nginx的配置文件。同样配置gateway之后, 会生成envoy对应的配置文件。 3. 配置 3.1 istio-ingressgateway 当安装了istio以后,服务中会有一个istio-ingressgateway 默认情况下, istio-ingressgateway对应的容器并没有暴露在服务网格之外。需要修改配置。 修改istio-ingressgateway的 Deployment 也可以直接修改helm的 deployment.yaml "dnsPolicy": "ClusterFirstWithHostNet" # 修改(确保能够正确访问pilot) "hostNetwork": true # 添加 (将pod以host网络模式暴露在服务网格外部) “ClusterFirstWithHostNet“: For Pods running with hostNetwork, you should explicitly set its DNS policy “ClusterFirstWithHostNet”. 3.2 gateway 以对kiali的配置为例 1) 创建namespace kubectl create namespace myistio 2)配置gateway 文件 kiali-gateway.yaml ...

December 5, 2019 · 2 min