前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tke集群搭建Linkerd2

tke集群搭建Linkerd2

原创
作者头像
聂伟星
发布2021-11-17 17:07:31
3420
发布2021-11-17 17:07:31
举报

Linkerd 是 Kubernetes 的服务网格。它通过为您提供运行时调试、可观察性、可靠性和安全性,使运行服务更轻松、更安全——所有这些都不需要对您的代码进行任何更改。

有关服务网格模型的简要介绍,我们建议阅读服务网格:每个软件工程师都需要了解的关于世界上最被过度炒作的技术。Linkerd 是完全开源的,在 Apache v2 下获得许可,是一个云原生计算基金会毕业的项目。

Linkerd 具有三个基本组件:UI、数据平面和控制平面。您通过以下方式运行 Linkerd:

  • 在本地系统上安装 CLI;
  • 将控制平面安装到您的集群中;
  • 将您的服务添加到 Linkerd 的数据平面。

一旦服务与 Linkerd 一起运行,您就可以使用 Linkerd 的 UI 来检查和操作它。linkerd的安装部署方式和istioctl类型,具体安装文档可以参考文档https://linkerd.io/2.11/getting-started/

第 1 步:安装 CLI

如果这是您第一次运行 Linkerd,则需要将 CLI 下载到本地机器上。CLI 将允许您与您的林克德部署进行交互。linkerd

要手动安装 CLI,操作:

代码语言:javascript
复制
curl -fsL https://run.linkerd.io/install | sh

请务必按照说明将其添加到路径中。

(或者,如果您使用自制,您可以安装 CLI。您也可以直接通过Linkerd 版本页面下载 CLI。brew install linkerd

安装后,验证 CLI 运行正确,包括:

代码语言:javascript
复制
linkerd version

你应该看看CLI版本,也。这是因为您没有在集群上安装控制平面。别担心,我们会尽快解决这个问题的。Server version: unavailable

第 2 步:验证您的Kubernetes 集群

Kubernetes集群可以以许多不同的方式配置。在安装 Linkerd 控制平面之前,我们需要检查并验证所有内容是否配置正确。要检查集群是否已准备好安装 Linkerd,请运行:

代码语言:javascript
复制
linkerd check --pre

如果有任何检查没有通过,请务必遵循所提供的链接,并在继续之前解决这些问题。

第 3 步:将控制平面安装到集群上

现在,您已经将 CLI 本地运行,并且已准备好运行的集群,是时候安装控制平面了。要做到这一点,运行:

代码语言:javascript
复制
linkerd install | kubectl apply -f -

该命令生成一个Kubernetes 表单与所有的核心控制平面资源(请随时检查此输出,如果你好奇)。将此表单插入然后指示 Kubernetes 将这些资源添加到您的集群中。

根据集群的互联网连接速度,控制平面完成安装需要一两分钟。等待控制平面已准备就绪(并通过运行验证您的安装):

代码语言:javascript
复制
linkerd check

第 4 步:安装演示应用程序

让我们安装一个演示应用程序称为表情符号。表情符号是一个简单的独立库伯内特应用程序,使用 gRPC 和 HTTP 呼叫的组合,允许用户投票他们最喜欢的表情符号。

通过运行将表情符号安装到命名空间中:emojivoto

代码语言:javascript
复制
curl -fsL https://run.linkerd.io/emojivoto.yml | kubectl apply -f -

部署好之后,在数据面的pod注入下sidecar

代码语言:javascript
复制
kubectl get -n emojivoto deploy -o yaml \
  | linkerd inject - \
  | kubectl apply -f -

现在已将 Linkerd 添加到应用程序中!与控制平面一样,可以验证数据平面一侧的一切工作方式。用:

代码语言:javascript
复制
linkerd -n emojivoto check --proxy

问题:

当你在tke上按照官方文档部署linkerd2.11版本会存在一个问题,就是linkerd-destination的policy容器会一直起不来,查看容器日志一直报错,policy起不来会导致linkerd-proxy-injector这个pod也无法启动

代码语言:javascript
复制
# k logs linkerd-destination-549f568447-mlbfb policy
2021-11-04T05:51:38.191602Z  INFO linkerd_policy_controller: Admission controller server listening addr=0.0.0.0:9443
2021-11-04T05:51:38.192177Z  INFO serve{addr=0.0.0.0:9990}: linkerd_policy_controller::admin: HTTP admin server listening addr=0.0.0.0:9990
2021-11-04T05:51:38.192831Z  INFO grpc{addr=0.0.0.0:8090 cluster_networks=[10.0.0.0/8, 100.64.0.0/10, 172.16.0.0/12, 192.168.0.0/16]}: linkerd_policy_controller: gRPC server listening addr=0.0.0.0:8090
2021-11-04T05:51:38.201214Z  WARN servers: rustls::session: Sending fatal alert DecodeError
2021-11-04T05:51:38.201272Z ERROR servers: kube::client: failed with error error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:38.201284Z  INFO servers: linkerd_policy_controller_k8s_api::watch: Failed error=failed to perform initial object list: HyperError: error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:38.201387Z  WARN serverauthorizations: rustls::session: Sending fatal alert DecodeError
2021-11-04T05:51:38.201436Z ERROR serverauthorizations: kube::client: failed with error error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:38.201452Z  INFO serverauthorizations: linkerd_policy_controller_k8s_api::watch: Failed error=failed to perform initial object list: HyperError: error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:38.202124Z  WARN pods: rustls::session: Sending fatal alert DecodeError
2021-11-04T05:51:38.202184Z ERROR pods: kube::client: failed with error error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:38.202194Z  INFO pods: linkerd_policy_controller_k8s_api::watch: Failed error=failed to perform initial object list: HyperError: error trying to connect: invalid certificate: BadDER
2021-11-04T05:51:39.202667Z  INFO serverauthorizations: linkerd_policy_controller_k8s_api::watch: Restarting
2021-11-04T05:51:39.202714Z  INFO servers: linkerd_policy_controller_k8s_api::watch: Restarting
2021-11-04T05:51:39.203709Z  INFO pods: linkerd_policy_controller_k8s_api::watch: Restarting

后面在github上找到这个问题发现是linkerd的一个bug,具体issue参考链接

https://github.com/linkerd/linkerd2/issues/7217

里面临时提供了一个解决方案就是替换下policy的镜像版本,采用下面镜像,开发人员也说最终会在stable-2.11.2版本彻底修复。

代码语言:javascript
复制
ghcr.io/olix0r/policy-controller:nativetls.40ab223a

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第 1 步:安装 CLI
  • 第 2 步:验证您的Kubernetes 集群
  • 第 3 步:将控制平面安装到集群上
  • 第 4 步:安装演示应用程序
  • 问题:
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档