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 <rui@meetup.com> * Update content/zh/docs/getting-started-guides/ubuntu/troubleshooting.md Co-Authored-By: chenrui333 <rui@meetup.com> * Update content/zh/docs/getting-started-guides/ubuntu/troubleshooting.md
This commit is contained in:
committed by
Kubernetes Prow Robot
parent
f722daa838
commit
b6f1cb9fe9
@@ -0,0 +1,272 @@
|
||||
---
|
||||
title: 故障排除
|
||||
---
|
||||
|
||||
<!-- ---
|
||||
title: Troubleshooting
|
||||
content_template: templates/task
|
||||
--- -->
|
||||
|
||||
{{% capture overview %}}
|
||||
|
||||
<!-- This document with highlighting how to troubleshoot the deployment of a Kubernetes cluster,
|
||||
it will not cover debugging of workloads inside Kubernetes. -->
|
||||
|
||||
本文重点讨论如何解决 Kubernetes 集群部署过程中的问题,
|
||||
而不会关心如何调试 Kubernetes 集群内的工作负载。
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture prerequisites %}}
|
||||
|
||||
<!-- This page assumes you have a working Juju deployed cluster. -->
|
||||
|
||||
本文假设您已经有一个用 Juju 部署、正在工作的集群。
|
||||
|
||||
{{% /capture %}}
|
||||
|
||||
{{% capture steps %}}
|
||||
|
||||
<!-- ## Understanding Cluster Status -->
|
||||
## 了解集群状态
|
||||
|
||||
<!-- Using `juju status` can give you some insight as to what's happening in a cluster: -->
|
||||
使用 `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
|
||||
```
|
||||
|
||||
<!-- In this example we can glean some information. The `Workload` column will show the status of a given service.
|
||||
The `Message` section will show you the health of a given service in the cluster.
|
||||
During deployment and maintenance these workload statuses will update to
|
||||
reflect what a given node is doing. For example the workload my say `maintenance`
|
||||
while message will describe this maintenance as `Installing docker`. -->
|
||||
|
||||
在这个例子中,我们可以获取一些信息。 `Workload` 列将显示给定服务的状态。
|
||||
`Message` 部分将显示集群中给定服务的健康状况。 在部署和维护期间,
|
||||
这些工作负载状态将进行更新以反映给定节点正在执行的操作。例如,
|
||||
Workload 可能显示为 `maintenance`,而 Message 则会相应显示为 `Installing docker`。
|
||||
|
||||
<!-- During normal operation the Workload should read `active`,
|
||||
the Agent column (which reflects what the Juju agent is doing) should read `idle`,
|
||||
and the messages will either say `Ready` or another descriptive term.
|
||||
`juju status --color` will also return all green results when a cluster's deployment is healthy. -->
|
||||
|
||||
正常情况下,Workload 列应该为 `active`,Agent 列(用于反映 Juju 代理正在做什么)应该为 `idle`,
|
||||
而 Message 要么是 `Ready` 或者其它描述性的术语。
|
||||
如果集群运行健康,`juju status --color` 返回的结果输出都将是绿色的。
|
||||
|
||||
<!-- Status can become unwieldy for large clusters, it is then recommended to
|
||||
check status on individual services, for example to check the status on the workers only: -->
|
||||
|
||||
对于大型集群而言,状态信息可能会太多,因此建议检查各个服务的状态,例如仅检查工作节点的状态:
|
||||
|
||||
juju status kubernetes-worker
|
||||
|
||||
<!-- or just on the etcd cluster: -->
|
||||
或者只检查 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` 的返回结果也将是红色的。
|
||||
如果节点状态出现这种情况,需要相应地检查了解。
|
||||
|
||||
<!-- ## SSHing to units -->
|
||||
## SSH 到各个单元上
|
||||
|
||||
<!-- You can ssh to individual units easily with the following convention,
|
||||
`juju ssh <servicename>/<unit#>`: -->
|
||||
|
||||
按照 `juju ssh <服务名>/<单元#>` 的命令格式可以轻松地连接到各个单元上:
|
||||
|
||||
juju ssh kubernetes-worker/3
|
||||
|
||||
<!-- Will automatically ssh you to the 3rd worker unit. -->
|
||||
将会 ssh 到第 3 个工作单元上。
|
||||
|
||||
juju ssh easyrsa/0
|
||||
|
||||
<!-- This will automatically ssh you to the easyrsa unit. -->
|
||||
将会 ssh 到第 0 个 easyrsa 单元上。
|
||||
|
||||
<!-- ## Collecting debug information -->
|
||||
## 收集调试信息
|
||||
|
||||
<!-- Sometimes it is useful to collect all the information from a cluster
|
||||
to share with a developer to identify problems. This is best accomplished with [CDK Field Agent](https://github.com/juju-solutions/cdk-field-agent). -->
|
||||
|
||||
有时候,从集群上收集所有的信息,并与开发人员共享,将有助于发现问题。
|
||||
这最好是通过 [CDK Field Agent](https://github.com/juju-solutions/cdk-field-agent) 来完成。
|
||||
|
||||
<!-- Download and execute the collect.py script from [CDK Field Agent](https://github.com/juju-solutions/cdk-field-agent) on a box that has a Juju client configured with the current controller and model pointing at the CDK deployment of interest. -->
|
||||
|
||||
在带有 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 单元数据等基本信息。
|
||||
额外和应用相关的信息可能也会包含其中。
|
||||
|
||||
<!-- ## Common Problems -->
|
||||
|
||||
## 常见问题
|
||||
|
||||
<!-- ### Load Balancer interfering with Helm -->
|
||||
|
||||
### Helm 对负载均衡器的影响
|
||||
|
||||
<!-- This section assumes you have a working deployment of Kubernetes via Juju
|
||||
using a Load Balancer for the API, and that you are using Helm to deploy charts. -->
|
||||
|
||||
本节假定有一个用 Juju 部署的正在运行的 Kubernetes 集群,使用负载均衡器来代理 API,同时也用 Helm 来进行 chart 部署。
|
||||
|
||||
<!-- To deploy Helm you will have run: -->
|
||||
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!
|
||||
```
|
||||
|
||||
<!-- Then when using helm you may see one of the following errors: -->
|
||||
随后使用 helm 时,可能会出现以下错误:
|
||||
|
||||
<!-- * Helm doesn't get the version from the Tiller server -->
|
||||
* Helm 不能从 Tiller 服务器获取版本号
|
||||
|
||||
```
|
||||
helm version
|
||||
Client: &version.Version{SemVer:"v2.1.3", GitCommit:"5cbc48fb305ca4bf68c26eb8d2a7eb363227e973", GitTreeState:"clean"}
|
||||
Error: cannot connect to Tiller
|
||||
```
|
||||
|
||||
<!-- * Helm cannot install your chart -->
|
||||
* Helm 不能安装 chart
|
||||
|
||||
```
|
||||
helm install <chart> --debug
|
||||
Error: forwarding ports: error upgrading connection: Upgrade request required
|
||||
```
|
||||
|
||||
<!-- This is caused by the API load balancer not forwarding ports in the context of the helm client-server relationship.
|
||||
To deploy using helm, you will need to follow these steps: -->
|
||||
|
||||
这是因为 API 负载均衡器在 helm 客户端-服务端关系的上下文中不进行端口转发造成的。
|
||||
要使用 helm 进行部署,需要执行以下步骤:
|
||||
|
||||
<!-- 1. Expose the Kubernetes Master service -->
|
||||
1. 暴露 Kubernetes Master 服务
|
||||
|
||||
```
|
||||
juju expose kubernetes-master
|
||||
```
|
||||
|
||||
<!-- 1. Identify the public IP address of one of your masters -->
|
||||
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
|
||||
```
|
||||
|
||||
<!-- In this context the public IP address is 54.210.100.102.
|
||||
|
||||
If you want to access this data programmatically you can use the JSON output: -->
|
||||
|
||||
本例中,公共 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. Update the kubeconfig file -->
|
||||
1. 更新 kubeconfig 文件
|
||||
|
||||
<!-- Identify the kubeconfig file or section used for this cluster, and edit the server configuration.
|
||||
|
||||
By default, it will look like ```https://54.213.123.123:443```. Replace it with the Kubernetes Master endpoint ```https://54.210.100.102:6443``` and save.
|
||||
|
||||
Note that the default port used by CDK for the Kubernetes Master API is 6443 while the port exposed by the load balancer is 443. -->
|
||||
|
||||
确定集群所使用的 kubeconfig 文件或配置部分,然后修改服务器配置。
|
||||
|
||||
默认情况下,这个配置类似于 ```https://54.213.123.123:443```。将其替换为 Kubernetes Master 端点地址
|
||||
```https://54.210.100.102:6443``` 并保存。
|
||||
|
||||
注意,Kubernetes Master API 的 CDK 默认使用的端口为 6443,而负载均衡器暴露的端口是 443。
|
||||
|
||||
<!-- 1. Start helm again! -->
|
||||
1. 继续使用 helm!
|
||||
|
||||
```
|
||||
helm install <chart> --debug
|
||||
Created tunnel using local port: '36749'
|
||||
SERVER: "localhost:36749"
|
||||
CHART PATH: /home/ubuntu/.helm/<chart>
|
||||
NAME: <chart>
|
||||
...
|
||||
...
|
||||
```
|
||||
|
||||
<!-- ## Logging and monitoring -->
|
||||
## 日志和监控
|
||||
|
||||
<!-- By default there is no log aggregation of the Kubernetes nodes, each node logs locally.
|
||||
Please read over the [logging](https://kubernetes.io/docs/getting-started-guides/ubuntu/logging/) page for more information. -->
|
||||
|
||||
默认情况下, Kubernetes 没有节点的日志聚合,每个节点都是本地保存日志。
|
||||
请参阅[日志](https://kubernetes.io/docs/getting-started-guides/ubuntu/logging/)文档,获取更多信息。
|
||||
|
||||
{{% /capture %}}
|
||||
Reference in New Issue
Block a user