Linkerd2初探

news2024/10/5 15:25:33

Linkerd2初探

    • 部署环境
    • Linkerd简介
    • 安装Linkerd客户端
    • 在k8s上安装Linkerd控制平面(服务端)
    • 实验:数据平面代理注入demo应用
    • 安装viz插件(可视化面板)
      • 部署grafana
    • 其他

部署环境

k8s环境:
KIND 模拟kubernetes 1.21.1
kubectl 1.21.1
操作系统:
Ubuntu 18.04.1
Linkerd:
2.12.0

以下步骤是按照官方的Geting Started文档来完成的。本文侧重怎样将linkerd部署、运行起来,并简单介绍了Linkerd在一个模拟应用中的使用,以及Linkerd可视化面板。

Linkerd简介

Linkerd是一种服务网格(sevice mesh)的实现。官方主页上介绍它是一种超轻量化,超便捷,超强的服务网格,它是CNCF孵化的开源项目,对于kubernetes来说是安全可靠,无需修改应用代码,为应用程序添加可观察性(observability)、安全性(security)和可靠性(reliability)功能。

Linkerd 是 Kubernetes 的一个完全开源的服务网格实现。它通过为你提供运行时调试、可观测性、可靠性和安全性,使运行服务更轻松、更安全,所有这些都不需要对你的代码进行任何更改。
Linkerd 通过在每个服务实例旁边安装一组超轻、透明的代理(sidecar)来工作。这些代理会自动处理进出服务的所有流量。由于它们是透明的,这些代理充当高度仪表化的进程外网络堆栈,向控制平面发送遥测数据并从控制平面接收控制信号。

在这里插入图片描述

安装Linkerd客户端

直接从官网下载安装

curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/install | sh

或者从github下载可执行文件
将安装包放到 /usr/local/bin下

chmod +x linkerd2-cli-stable-2.12.0-rc2-linux-arm64
cp linkerd2-cli-stable-2.12.0-rc2-linux-arm64 /usr/local/bin/linkerd

检查系统:

linkerd check --pre

在这里插入图片描述

在k8s上安装Linkerd控制平面(服务端)

linkerd install | kubectl apply -f -

但是实际安装时提示先要安装 CRDs

Linkerd CRDs must be installed first. Run linkerd install with the --crds flag.

linkerd install --crds | kubectl apply -f -

在这里插入图片描述

完成上面后,开始部署控制平面

linkerd install --ignore-cluster > linkerd-install.yaml
sudo kubectl apply -f linkerd-install.yaml  

或者直接

linkerd install | sudo kubectl apply -f -

安装过程会在k8s集群上完成一系列设置和部署,以下为安装过程的输出

namespace/linkerd created
clusterrole.rbac.authorization.k8s.io/linkerd-linkerd-identity created
clusterrolebinding.rbac.authorization.k8s.io/linkerd-linkerd-identity created
serviceaccount/linkerd-identity created
clusterrole.rbac.authorization.k8s.io/linkerd-linkerd-destination created
clusterrolebinding.rbac.authorization.k8s.io/linkerd-linkerd-destination created
serviceaccount/linkerd-destination created
secret/linkerd-sp-validator-k8s-tls created
validatingwebhookconfiguration.admissionregistration.k8s.io/linkerd-sp-validator-webhook-config created
secret/linkerd-policy-validator-k8s-tls created
validatingwebhookconfiguration.admissionregistration.k8s.io/linkerd-policy-validator-webhook-config created
clusterrole.rbac.authorization.k8s.io/linkerd-policy created
clusterrolebinding.rbac.authorization.k8s.io/linkerd-destination-policy created
role.rbac.authorization.k8s.io/linkerd-heartbeat created
rolebinding.rbac.authorization.k8s.io/linkerd-heartbeat created
clusterrole.rbac.authorization.k8s.io/linkerd-heartbeat created
clusterrolebinding.rbac.authorization.k8s.io/linkerd-heartbeat created
serviceaccount/linkerd-heartbeat created
clusterrole.rbac.authorization.k8s.io/linkerd-linkerd-proxy-injector created
clusterrolebinding.rbac.authorization.k8s.io/linkerd-linkerd-proxy-injector created
serviceaccount/linkerd-proxy-injector created
secret/linkerd-proxy-injector-k8s-tls created
mutatingwebhookconfiguration.admissionregistration.k8s.io/linkerd-proxy-injector-webhook-config created
configmap/linkerd-config created
secret/linkerd-identity-issuer created
configmap/linkerd-identity-trust-roots created
service/linkerd-identity created
service/linkerd-identity-headless created
deployment.apps/linkerd-identity created
service/linkerd-dst created
service/linkerd-dst-headless created
service/linkerd-sp-validator created
service/linkerd-policy created
service/linkerd-policy-validator created
deployment.apps/linkerd-destination created
cronjob.batch/linkerd-heartbeat created
deployment.apps/linkerd-proxy-injector created
service/linkerd-proxy-injector created
secret/linkerd-config-overrides created

等待直到Pod启动成功(第一次需要下载镜像,时间跟网络环境有关)
在这里插入图片描述
检查Linkerd是否部署成功

linkerd check

部署成功会返回以下内容

Linkerd core checks
===================

kubernetes-api
--------------
√ can initialize the client
√ can query the Kubernetes API

kubernetes-version
------------------
√ is running the minimum Kubernetes API version
√ is running the minimum kubectl version

linkerd-existence
-----------------
√ 'linkerd-config' config map exists
√ heartbeat ServiceAccount exist
√ control plane replica sets are ready
√ no unschedulable pods
√ control plane pods are ready
√ cluster networks contains all node podCIDRs
√ cluster networks contains all pods

linkerd-config
--------------
√ control plane Namespace exists
√ control plane ClusterRoles exist
√ control plane ClusterRoleBindings exist
√ control plane ServiceAccounts exist
√ control plane CustomResourceDefinitions exist
√ control plane MutatingWebhookConfigurations exist
√ control plane ValidatingWebhookConfigurations exist
√ proxy-init container runs as root user if docker container runtime is used

linkerd-identity
----------------
√ certificate config is valid
√ trust anchors are using supported crypto algorithm
√ trust anchors are within their validity period
√ trust anchors are valid for at least 60 days
√ issuer cert is using supported crypto algorithm
√ issuer cert is within its validity period
√ issuer cert is valid for at least 60 days
√ issuer cert is issued by the trust anchor

linkerd-webhooks-and-apisvc-tls
-------------------------------
√ proxy-injector webhook has valid cert
√ proxy-injector cert is valid for at least 60 days
√ sp-validator webhook has valid cert
√ sp-validator cert is valid for at least 60 days
√ policy-validator webhook has valid cert
√ policy-validator cert is valid for at least 60 days

linkerd-version
---------------
√ can determine the latest version
√ cli is up-to-date

control-plane-version
---------------------
√ can retrieve the control plane version
√ control plane is up-to-date
√ control plane and cli versions match

linkerd-control-plane-proxy
---------------------------
√ control plane proxies are healthy
√ control plane proxies are up-to-date
√ control plane proxies and cli versions match

Status check results are √

实验:数据平面代理注入demo应用

使用官方的Emojivoto应用来体验Linkerd,这个应用由三个服务(web、emoji、voting)组成,另外vote-bot模拟发起投票。开发者在这个应用中设置了异常,当给某个表情投票时会返回404页面。这是开发者故意设置的,用来在linkerd面板(linkerd viz)中观察这个失败的情况。
在这里插入图片描述

新建应用emoji用于实验

# http://run.linkerd.io/emojivoto.yml
kubectl apply -f emojivoto.yml
或者
curl --proto '=https' --tlsv1.2 -sSfL https://run.linkerd.io/emojivoto.yml  | kubectl apply -f -

暴露对外访问的端口
kubectl -n emojivoto port-forward svc/web-svc 8080:80
(注意:此时emoji应用每个pod的container数量都是1)
在这里插入图片描述
应用启动正常
在这里插入图片描述
将上面示例应用加入到service mesh中,向其添加Linkerd的数据平面代理(data plane proxies)
直接运行下面的命令

kubectl get -n emojivoto deploy -o yaml  | linkerd inject -   | kubectl apply -f -
# 也可以使用如下脚本注入
kubectl annotate ns emojivoto linkerd.io/inject=enabled
kubectl rollout restart deploy -n emojivoto

在这里插入图片描述

上面的命令检索在 emojivoto 命名空间中运行的所有deployments,通过 linkerd inject 运行清单,然后将其重新应用到集群。
linkerd inject 命令向 pod spec 添加注解(annotations),指示 Linkerd 将代理(proxy)作为容器添加(“注入”)到 pod spec 中。
然后通过管道传输到 kubectl apply,Kubernetes 将执行滚动部署(rolling deploy)并使用数据平面的代理更新每个 pod,所有这些都没有任何停机时间。

添加数据平面代理后,每个pod中容器数量从1个变成2个,比之前多了一个Linkerd的sidecar代理容器。
在这里插入图片描述
查看某个Pod其中的sidecar容器如下:
在这里插入图片描述

Pod增加了注解:linkerd.io/inject: enabled

This annotation triggers automatic proxy injection when the resources are created or updated.
NOTE: Adding the annotation to existing pods does not automatically mesh them. For existing pods, after adding the annotation you will also need to recreate or update the resource (e.g. by using kubectl rollout restart to perform a rolling update)to trigger proxy injection.

在这里插入图片描述
查看数据平面状态:

linkerd -n emojivoto check --proxy

在这里插入图片描述

安装viz插件(可视化面板)

安装viz插件,Linkerd-Viz插件包含Linkerd的可观察性和可视化组件,可以看到服务调用成功率, 每秒请求数等信息,还能在deployment页面中看到从源到目的的调用路径及情况。安装命令如下

linkerd viz install | kubectl apply -f -

直接把pod的端口暴露

kubectl -n linkerd-viz port-forward web-7cccdbd9b6-vmrbp  8084:8084

在这里插入图片描述
因为emoji应用中设置了调用投票服务会有失败的概率,所以可以看到有应用的SR(success rate)不到100%。

部署grafana

参考:hook-grafana-with-linkerd-viz-dashboard
如果linkerd viz已经部署,先停止

sudo linkerd viz uninstall | sudo kubectl delete -f -

使用helm部署grafana

helm repo add grafana https://grafana.github.io/helm-charts
helm install grafana -n grafana --create-namespace grafana/grafana \
  -f https://raw.githubusercontent.com/linkerd/linkerd2/main/grafana/values.yaml  -f

为grafana增加AuthorizationPolicy

sudo kubectl apply -f authzpolicy-grafana.yaml
# authzpolicy-grafana.yaml
apiVersion: policy.linkerd.io/v1alpha1
kind: AuthorizationPolicy
metadata:
  namespace: linkerd-viz
  name: grafana
spec:
  targetRef:
    group: policy.linkerd.io
    kind: Server
    name: prometheus-admin
  requiredAuthenticationRefs:
    - kind: ServiceAccount
      name: grafana
      namespace: grafana

开启viz,部署时指定了grafana的端口(默认配置情况)

linkerd viz install --set grafana.url=grafana.grafana:3000   | kubectl apply -f -

可以从最右边的grafana图标打开grafana面板
在这里插入图片描述
在这里插入图片描述

其他

# viz卸载
linkerd viz uninstall
# 反注入
kubectl get deploy -o yaml -n emojivoto | linkerd uninject - |  kubectl apply -f -
# 卸载linkerd
sudo linkerd  uninstall | sudo kubectl delete -f -

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004724.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

页面设计都有哪些好用的工具推荐?

对于设计师来说,方便的页面设计工具和稳定的页面设计灵感也同样重要。 在今天的信息爆炸中,很容易找到页面设计工具,网上搜索有很多建议,但找到合适的页面设计工具并不那么简单。 本文推荐不容错过的9款页面设计工具 即时设计 …

【DevOps核心理念基础】3. 敏捷开发最佳实践

一、敏捷开发最佳实践 1.1 项目管理 1.2 需求管理 1.3 技术架构 1.4 技术开发 1.5 测试 二、敏捷开发最佳实践 2.1 敏捷开发的执行细节 三、全面的DevOps工具链 四、版本控制和协作开发工具 4.1 集中式版本控制工具 4.2 分布式版本控制工具 一、敏捷开发最佳实践 …

mysql的一些知识点或者说踩过的坑和想记住的内容

快速上传数据 这个应该是比inset into values更快的插入数据的办法了。 不过要求挺苛刻的,数据要整理成和表格一致,也就是说每条数据都是完整的一条,而不是一部分。 下面的示例我以***为分割符划分字段,以 \n来分割每条数据。 LO…

【atoi函数的功能介绍及使用与模拟实现——超详细版本】

atoi函数的功能介绍及使用与模拟实现——超详细版本 1.cplusplus网站介绍💻 1.1atoi函数的功能介绍💻 它的功能: 解析将其内容解释为整数的 C 字符串,该整数作为 类型的值返回。 该函数首先根据需要丢弃尽可能多的空格字符&…

java复习-eclipse开发工具使用

开发工具使用 项目文件结构 建立完成的项目目录中会自动创建有两个子目录: src:保存所有的 *.java 源文件bin:保存所有编译后的 *.class 程序文件,这些文件会自动进行编译处理 保存文件后,会自动进行编译。 快捷键…

无需专业技能,轻松创建个人博客:Cpolar+Emlog在Ubuntu上的搭建指南

文章目录 前言1. 网站搭建1.1 Emolog网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2.Cpolar稳定隧道(云端设置)2.3.Cpolar稳定隧道(本地设置) 3. 公网访问测试总结 前言 博客作为使…

基于轻量级YOLOv5s开发构建隧道基建裂痕、脱落等缺陷问题检测系统

隧道内的定期检查与维护,对于及时发现和消除潜在的安全隐患有着重要的作用,基于人工的传统巡查方式不仅极为低效而且成本很高,将智能化的图像检测识别计数与实际的养护巡查场景相结合,开发构建智能AI检测识别系统是否可行&#xf…

C++QT day 5

实现一个图形类(Shape),包含受保护成员属性:周长、面积, 公共成员函数:特殊成员函数书写 定义一个圆形类(Circle),继承自图形类,包含私有属性:半…

element-table 行的拖拽更改顺序(无需下载sortableJs

样例展示&#xff1a;vueelement 通过阅读element文档我们发现element并不提供拖拽相关的api 本博客通过element提供的行类名 注册函数 实现行与行的拖拽 1.设置el-table 的行样式类名 这里是用的是 function <el-table:data"outputData":row-class-name&qu…

Codeforces Round 896 (Div. 2)题解

前言: 3 solved of 7 A、B、C,太菜了&#xff0c;写B题的时候&#xff0c;常数设成1e5了&#xff0c;一直卡在Test 4,没想到一直提示我TLE&#xff0c;没有提示RE&#xff0c;导致我浪费了很多时间在B题上&#xff0c;最后时间太晚了交了TLE了一发睡觉去了 A-Make It Zero …

SpringCloud:Feign实现微服务之间相互请求

文章目录 &#x1f389;欢迎来到Java学习路线专栏~SpringCloud&#xff1a;Feign实现微服务之间相互请求 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&#xff1a;Java学习路线&#x1f4dc;其他专栏&#xf…

Sui Move智能合约提供更智能和简单的编程

编写区块链和其他计算环境的代码有很多相似之处&#xff0c;但区块链的重点大部分都集中在构建智能合约上。智能合约部署编译后的代码&#xff0c;本质上是在区块链上自动执行交易的apps。Sui网络本地的Sui虚拟机使用Sui Move编程语言编写智能合约。 术语“智能合约”意味着区…

Python之离线安装第三方库

1、场景介绍 在一些服务器上&#xff0c;我们搭建完Python环境之后&#xff0c;因为服务器的网络限制原因&#xff0c;不能直接通过pip命令下载安装Python的依赖包。 因此&#xff0c;我们需要在可以正常上网的服务器上下载好所需的依赖包文件&#xff0c;然后拷贝到目标服务器…

Screen的详细全面安装教程及Screen的用法

Screen可以大大提高终端使用效率&#xff0c;是Linux系统管理和运维的必备技能。当我们开启Screen后&#xff0c;只要Screen进程没有终止&#xff0c;其内部运行的会话都可以恢复。即使网络连接中断&#xff0c;用户也可以重新进入已开启的Screen中&#xff0c;对中断的会话进行…

Three.js-绘制矩形shader

绘制图中的嵌套矩形框 方法&#xff1a; vec3 drawRect(vec2 st,vec2 center,float width,float height,float thickness,vec3 fillColor, vec3 strokeColor) {vec3 color vec3(0);float halfWidth width * .5;float halfHeight height * .5;float halfTickness thicknes…

《向量数据库指南》——Milvus Cloud当初为什么选择向量数据库这个赛道呢?

我们公司专注于向量数据库大约可以追溯到 2018 年左右。当时&#xff0c;向量数据库的概念并不广泛。我们的 CEO 力排众议&#xff0c;认为这个领域有巨大潜力&#xff0c;因为这与我们的愿景高度契合。我们的公司定位是构建一个能够在云上处理非结构化数据的基础设施产品。经过…

window11wifi图标没了win11wifi图标消失连不上网的三种解决方法

最近win11系统有很多小伙伴都去安装体验,不过有的小伙伴在安装完之后说自己的wifi图标消失连不上网,那么如果遇到这种情况应该怎么办呢?下面就和小编一起来看看win11wifi图标消失连不上网的三种解决方法吧。 笔记本专用Win11娱乐版 V2023 [电脑系统] 笔记本专用Win11娱乐版…

UG\NX CAM二次开发 设置2D工序部件边界 UF_CAMBND_append_bnd_from_curve

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 设置2D工序部件边界 UF_CAMBND_append_bnd_from_curve 效果: 代码: static int init_proc(UF_UI_selection_p_t select, void* user_data) { int errorCode = 0; int num_triples = 1; …

自动创建设备节点udev机制的实现过程

udev是用户空间的一个应用程序&#xff0c;在内核里面安装一个驱动时&#xff0c;需要给这个驱动创建一个结点&#xff0c;安装驱动时向用户空间提交创建结点的信息&#xff0c;udev可以拿到提交的信息&#xff0c;自动在dev下创建结点。 创建结点的逻辑放在用户空间。内核空间…

每日刷题-5

目录 一、选择题 二、算法题 1、不要二 2、把字符串转换成整数 一、选择题 1、 解析&#xff1a;printf(格式化串&#xff0c;参数1&#xff0c;参数2,.….)&#xff0c;格式化串: printf第一个参数之后的参数要按照什么格式打印&#xff0c;比如%d--->按照整形方式打印&am…