From b6f1cb9fe9589ea76442364530e67cd16eeb75d0 Mon Sep 17 00:00:00 2001 From: chenrui Date: Wed, 12 Dec 2018 03:04:12 -0500 Subject: [PATCH] zh-trans: /docs/getting started guides/ubuntu/troubleshooting.md (#11649) * zh-trans: add docs/getting-started-guides/ubuntu/troubleshooting.md * Update content/zh/docs/getting-started-guides/ubuntu/troubleshooting.md Co-Authored-By: chenrui333 * Update content/zh/docs/getting-started-guides/ubuntu/troubleshooting.md Co-Authored-By: chenrui333 * Update content/zh/docs/getting-started-guides/ubuntu/troubleshooting.md --- .../ubuntu/troubleshooting.md | 272 ++++++++++++++++++ 1 file changed, 272 insertions(+) create mode 100644 content/zh/docs/getting-started-guides/ubuntu/troubleshooting.md diff --git a/content/zh/docs/getting-started-guides/ubuntu/troubleshooting.md b/content/zh/docs/getting-started-guides/ubuntu/troubleshooting.md new file mode 100644 index 0000000000..b8d6e6e455 --- /dev/null +++ b/content/zh/docs/getting-started-guides/ubuntu/troubleshooting.md @@ -0,0 +1,272 @@ +--- +title: 故障排除 +--- + + + +{{% capture overview %}} + + + +本文重点讨论如何解决 Kubernetes 集群部署过程中的问题, +而不会关心如何调试 Kubernetes 集群内的工作负载。 + +{{% /capture %}} + +{{% capture prerequisites %}} + + + +本文假设您已经有一个用 Juju 部署、正在工作的集群。 + +{{% /capture %}} + +{{% capture steps %}} + + +## 了解集群状态 + + +使用 `juju status` 命令可以了解一些集群内的情况: + +``` +Model Controller Cloud/Region Version +kubes work-multi aws/us-east-2 2.0.2.1 + +App Version Status Scale Charm Store Rev OS Notes +easyrsa 3.0.1 active 1 easyrsa jujucharms 3 ubuntu +etcd 2.2.5 active 1 etcd jujucharms 17 ubuntu +flannel 0.6.1 active 2 flannel jujucharms 6 ubuntu +kubernetes-master 1.4.5 active 1 kubernetes-master jujucharms 8 ubuntu exposed +kubernetes-worker 1.4.5 active 1 kubernetes-worker jujucharms 11 ubuntu exposed + +Unit Workload Agent Machine Public address Ports Message +easyrsa/0* active idle 0/lxd/0 10.0.0.55 Certificate Authority connected. +etcd/0* active idle 0 52.15.47.228 2379/tcp Healthy with 1 known peers. +kubernetes-master/0* active idle 0 52.15.47.228 6443/tcp Kubernetes master services ready. + flannel/1 active idle 52.15.47.228 Flannel subnet 10.1.75.1/24 +kubernetes-worker/0* active idle 1 52.15.177.233 80/tcp,443/tcp Kubernetes worker running. + flannel/0* active idle 52.15.177.233 Flannel subnet 10.1.63.1/24 + +Machine State DNS Inst id Series AZ +0 started 52.15.47.228 i-0bb211a18be691473 xenial us-east-2a +0/lxd/0 started 10.0.0.55 juju-153b74-0-lxd-0 xenial +1 started 52.15.177.233 i-0502d7de733be31bb xenial us-east-2b +``` + + + +在这个例子中,我们可以获取一些信息。 `Workload` 列将显示给定服务的状态。 +`Message` 部分将显示集群中给定服务的健康状况。 在部署和维护期间, +这些工作负载状态将进行更新以反映给定节点正在执行的操作。例如, +Workload 可能显示为 `maintenance`,而 Message 则会相应显示为 `Installing docker`。 + + + +正常情况下,Workload 列应该为 `active`,Agent 列(用于反映 Juju 代理正在做什么)应该为 `idle`, +而 Message 要么是 `Ready` 或者其它描述性的术语。 +如果集群运行健康,`juju status --color` 返回的结果输出都将是绿色的。 + + + +对于大型集群而言,状态信息可能会太多,因此建议检查各个服务的状态,例如仅检查工作节点的状态: + + juju status kubernetes-worker + + +或者只检查 etcd 集群的状态: + + juju status etcd + +Errors will have an obvious message, and will return a red result when used with +`juju status --color`. Nodes that come up in this manner should be investigated. + +错误都会有明显的错误信息,使用 `juju status --color` 的返回结果也将是红色的。 +如果节点状态出现这种情况,需要相应地检查了解。 + + +## SSH 到各个单元上 + + + +按照 `juju ssh <服务名>/<单元#>` 的命令格式可以轻松地连接到各个单元上: + + juju ssh kubernetes-worker/3 + + +将会 ssh 到第 3 个工作单元上。 + + juju ssh easyrsa/0 + + +将会 ssh 到第 0 个 easyrsa 单元上。 + + +## 收集调试信息 + + + +有时候,从集群上收集所有的信息,并与开发人员共享,将有助于发现问题。 +这最好是通过 [CDK Field Agent](https://github.com/juju-solutions/cdk-field-agent) 来完成。 + + + +在带有 Juju 客户端,而客户端配有指向相应的 CDK 部署的控制器的节点上, +下载并执行[CDK Field Agent]中的 collect.py 文件。 + +Running the script will generate a tarball of system information and includes basic information such as systemctl status, Juju logs, charm unit data, etc. Additional application-specific information may be included as well. + +运行该脚本会生成一个 tar 包,包含系统信息以及诸如 systemctl 状态,Juju 日志,charm 单元数据等基本信息。 +额外和应用相关的信息可能也会包含其中。 + + + +## 常见问题 + + + +### Helm 对负载均衡器的影响 + + + +本节假定有一个用 Juju 部署的正在运行的 Kubernetes 集群,使用负载均衡器来代理 API,同时也用 Helm 来进行 chart 部署。 + + +Helm 初始化: + +``` +helm init +$HELM_HOME has been configured at /home/ubuntu/.helm +Tiller (the helm server side component) has been installed into your Kubernetes Cluster. +Happy Helming! +``` + + +随后使用 helm 时,可能会出现以下错误: + + +* Helm 不能从 Tiller 服务器获取版本号 + +``` +helm version +Client: &version.Version{SemVer:"v2.1.3", GitCommit:"5cbc48fb305ca4bf68c26eb8d2a7eb363227e973", GitTreeState:"clean"} +Error: cannot connect to Tiller +``` + + +* Helm 不能安装 chart + +``` +helm install --debug +Error: forwarding ports: error upgrading connection: Upgrade request required +``` + + + +这是因为 API 负载均衡器在 helm 客户端-服务端关系的上下文中不进行端口转发造成的。 +要使用 helm 进行部署,需要执行以下步骤: + + +1. 暴露 Kubernetes Master 服务 + + ``` + juju expose kubernetes-master + ``` + + +1. 确定其中一个主节点的公共 IP 地址 + + ``` + juju status kubernetes-master + Model Controller Cloud/Region Version + production k8s-admin aws/us-east-1 2.0.0 + + App Version Status Scale Charm Store Rev OS Notes + flannel 0.6.1 active 1 flannel jujucharms 7 ubuntu + kubernetes-master 1.5.1 active 1 kubernetes-master jujucharms 10 ubuntu exposed + + Unit Workload Agent Machine Public address Ports Message + kubernetes-master/0* active idle 5 54.210.100.102 6443/tcp Kubernetes master running. + flannel/0 active idle 54.210.100.102 Flannel subnet 10.1.50.1/24 + + Machine State DNS Inst id Series AZ + 5 started 54.210.100.102 i-002b7150639eb183b xenial us-east-1a + + Relation Provides Consumes Type + certificates easyrsa kubernetes-master regular + etcd etcd flannel regular + etcd etcd kubernetes-master regular + cni flannel kubernetes-master regular + loadbalancer kubeapi-load-balancer kubernetes-master regular + cni kubernetes-master flannel subordinate + cluster-dns kubernetes-master kubernetes-worker regular + cni kubernetes-worker flannel subordinate + ``` + + + + 本例中,公共 IP 地址为 54.210.100.102。 + 如果想编程访问得到这个值,可以使用 JSON 输出: + + ``` + juju show-status kubernetes-master --format json | jq --raw-output '.applications."kubernetes-master".units | keys[]' + 54.210.100.102 + ``` + + +1. 更新 kubeconfig 文件 + + + + 确定集群所使用的 kubeconfig 文件或配置部分,然后修改服务器配置。 + + 默认情况下,这个配置类似于 ```https://54.213.123.123:443```。将其替换为 Kubernetes Master 端点地址 + ```https://54.210.100.102:6443``` 并保存。 + + 注意,Kubernetes Master API 的 CDK 默认使用的端口为 6443,而负载均衡器暴露的端口是 443。 + + +1. 继续使用 helm! + + ``` + helm install --debug + Created tunnel using local port: '36749' + SERVER: "localhost:36749" + CHART PATH: /home/ubuntu/.helm/ + NAME: + ... + ... + ``` + + +## 日志和监控 + + + +默认情况下, Kubernetes 没有节点的日志聚合,每个节点都是本地保存日志。 +请参阅[日志](https://kubernetes.io/docs/getting-started-guides/ubuntu/logging/)文档,获取更多信息。 + +{{% /capture %}}