文档
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 -
但是有的时候会卡住的情况。我的经历如下
- 卡住后,我执行了
kubectl delete ns linkerd-viz --force --grace-period=0强制删除与linkerd-viz相关的一切资源。 - 但是又报错了
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的正常运行。
- 解决了上述问题后,执行下面的命令,就可以成功删除linkerd-viz了
linkerd viz uninstall | kubectl delete -f -