文档

Linkerd 2.11 中文文档
Linkerd 英文文档

各个版本的文档执行的命令有一些细微的差别

# 2.12 比 2.11的安装步骤多一个
linkerd install --crds | kubectl apply -f -

安装步骤

以下的实例是使用linkerd 2.12版本的文档 链接: 2.12 getting started

安装linkerd并且进行前置检查

kubectl version --short

brew install linkerd

linkerd version

linkerd check --pre

k8s中安装linkerd

linkerd install --crds | kubectl apply -f -

# 使用默认仓库
linkerd install | kubectl apply -f -

# 或者使用私有仓库 
# --identity-external-issuer  该标志指示 Linkerd 从 linkerd-identity-issuer secret 读取证书
# --ha 高可用
# --registry 使用指定仓库
linkerd install --identity-external-issuer --ha --set proxyInit.runAsRoot=true --registry my-private/k8s/linkerd/ | kubectl apply -f -

如果要使用--identity-external-issuer 这个标识,需要先开启自动轮换控制平面 TLS 凭证

# 安装cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.yaml

#
kubectl create namespace linkerd

step certificate create root.linkerd.cluster.local ca.crt ca.key \
  --profile root-ca --no-password --insecure &&
  kubectl create secret tls \
    linkerd-trust-anchor \
    --cert=ca.crt \
    --key=ca.key \
    --namespace=linkerd

kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: linkerd-trust-anchor
  namespace: linkerd
spec:
  ca:
    secretName: linkerd-trust-anchor
EOF

kubectl apply -f - <<EOF
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: linkerd-identity-issuer
  namespace: linkerd
spec:
  secretName: linkerd-identity-issuer
  duration: 48h
  renewBefore: 25h
  issuerRef:
    name: linkerd-trust-anchor
    kind: Issuer
  commonName: identity.linkerd.cluster.local
  dnsNames:
  - identity.linkerd.cluster.local
  isCA: true
  privateKey:
    algorithm: ECDSA
  usages:
  - cert sign
  - crl sign
  - server auth
  - client auth
EOF

# 查看轮换事件
kubectl get events --field-selector reason=IssuerUpdated -n linkerd

使用的相关镜像可以使用如下命令获取

linkerd install --ignore-cluster | grep image: | sed -e 's/^ *//' | sort | uniq

结果是:

image:
image: cr.l5d.io/linkerd/controller:stable-2.12.2
image: cr.l5d.io/linkerd/policy-controller:stable-2.12.2
image: cr.l5d.io/linkerd/proxy-init:v2.0.0
image: cr.l5d.io/linkerd/proxy:stable-2.12.2

github上的公开仓库是 GitHub Container Registry.

安装完后执行检查

linkerd check

安装viz插件

linkerd viz install | kubectl apply -f -

如果因为网络原因,需要使用私有仓库,需要使用以下命令导出yaml,手动修改yaml后安装

linkerd viz install > viz.yaml
# 修改yaml后执行安装
kubectl apply -f viz.yaml

注入

  • 整个 namespace 启用注解
annotations:
        config.linkerd.io/enable-debug-sidecar: "true"
        linkerd.io/inject: enabled
  • 在编排文件的 deployment 的 spec.template 里直接添加
annotations:
        config.linkerd.io/enable-debug-sidecar: "true"   # 用于 debug 
        linkerd.io/inject: enabled # 注入 Linkerd proxy

查看哪些pod注入了linkerd-proxy

kubectl get pods -n juzi-saas -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.containers[*].name}{"\n"}{end}' | grep linkerd

当然,控制面板上也可以看

删除linkerd-viz

linkerd viz uninstall | kubectl delete -f -

但是有的时候会卡住的情况。我的经历如下

  1. 卡住后,我执行了 kubectl delete ns linkerd-viz --force --grace-period=0 强制删除与linkerd-viz相关的一切资源。
  2. 但是又报错了
unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request

然后询问了chatgpt后得到的答案如下

这个错误通常表示Kubernetes的metrics-server出现了问题,导致Kubernetes API服务无法提供metrics.k8s.io/v1beta1 API。这可能会影响Kubernetes Dashboard、kubectl top等工具的使用。

要解决这个问题,您可以尝试以下步骤:

检查metrics-server是否正常运行:使用以下命令检查metrics-server的状态:

kubectl get pods -n kube-system | grep metrics-server
如果输出结果中的metrics-server Pod处于Running状态,则表示metrics-server正在正常运行。如果它处于Pending状态,则可能是由于资源不足或网络问题导致的。

重启metrics-server:如果metrics-server未能正常运行,您可以尝试重启它。使用以下命令重启metrics-server:

kubectl delete deployment metrics-server -n kube-system
然后,等待一段时间,让Kubernetes重新启动metrics-server的Pod。您可以使用以下命令检查metrics-server是否成功启动:

kubectl get pods -n kube-system | grep metrics-server
如果metrics-server Pod处于Running状态,则表示metrics-server已经成功启动。

更新metrics-server:如果重启metrics-server无法解决问题,您可以尝试更新metrics-server。使用以下命令更新metrics-server:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.0/components.yaml
该命令将下载并安装metrics-server v0.5.0版本。如果metrics-server已经是最新版本,则该命令不会产生任何效果。

检查Kubernetes API服务器:如果上述步骤都无法解决问题,则可能是Kubernetes API服务器出现了问题。您可以检查API服务器的日志以获取更多信息。

通过上述步骤,您可以尝试解决unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request的问题,并恢复Kubernetes的metrics.k8s.io/v1beta1 API的正常运行。
  1. 解决了上述问题后,执行下面的命令,就可以成功删除linkerd-viz了
linkerd viz uninstall | kubectl delete -f -