From 3f72aeb3630585ce3888a8a3dd1b654aef07f887 Mon Sep 17 00:00:00 2001 From: chenrui Date: Sat, 16 Feb 2019 23:42:06 -0500 Subject: [PATCH] =?UTF-8?q?zh-trans:=20translate=20docs/getting-started-gu?= =?UTF-8?q?ides/ubuntu/operational-co=E2=80=A6=20(#12353)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * zh-trans: translate docs/getting-started-guides/ubuntu/operational-considerations.md * Adopt PR suggestions * add period sign --- .../ubuntu/operational-considerations.md | 262 ++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100644 content/zh/docs/getting-started-guides/ubuntu/operational-considerations.md diff --git a/content/zh/docs/getting-started-guides/ubuntu/operational-considerations.md b/content/zh/docs/getting-started-guides/ubuntu/operational-considerations.md new file mode 100644 index 0000000000..d738f09288 --- /dev/null +++ b/content/zh/docs/getting-started-guides/ubuntu/operational-considerations.md @@ -0,0 +1,262 @@ +--- +title: 运维注意事项 +content_template: templates/task +--- + + + +{{% capture overview %}} + + +本文为管理维护长期运行的集群的工程师提供一些建议和提示。 + +{{% /capture %}} +{{% capture prerequisites %}} + + +本文假定您对 Juju 和 Kubernetes 已经有了基本的了解。 + +{{% /capture %}} + +{{% capture steps %}} + + + +## 管理 Juju + + + +### 确定控制节点规模 + + + +Juju 控制器: + + + +* 运行需要大概 2 到 2.5 GB 的 RAM。 +* 用 MongoDB 数据库作为集群配置和状态的存储后端。这个数据库可能增长很快,也可能是实例中 CPU 周期的最大消费者。 +* 汇总和存储所有服务和单位的日志数据。因此,长期运行的模型需要大量的存储。如果您的目的是保持集群运行,请确保为日志配置至少 64 GB 的存储空间。 + + + +指定参数创建一个控制器(命令行如下): + +``` +juju bootstrap --constraints "mem=8GB cpu-cores=4 root-disk=128G" +``` + + + +Juju 将会选择与目标云上的约束匹配的最便宜的实例类型。 +还可以通过将 ```instance-type``` 与 ```root-disk``` 两个约束结合使用来进行严格控制。 +对于可用的约束信息,请参阅 [官方文档](https://jujucharms.com/docs/stable/reference-constraints) + + + + +关于日志记录的更多信息,请参阅 [日志章节](/docs/getting-started-guides/ubuntu/logging) + + + +### SSH 到控制节点上 + + + +默认情况下,Juju 将创建一对 SSH 密钥,用于自动化单元之间的连接。 +这对密钥保存在客户端节点的 ```~/.local/share/juju/ssh/``` 路径下。 + + + +部署完后,Juju 控制器是一个 "无声单元", +其充当客户端和已部署应用程序之间的代理。 +尽管如此,SSH 到控制器上还是很有用的。 + + + +首先,你需要了解你的运行环境,特别是如果你运行了几个 Juju 模型和控制器。 + +运行下面的命令行: + +``` +juju list-models --all +$ juju models --all +Controller: k8s + +Model Cloud/Region Status Machines Cores Access Last connection +admin/controller lxd/localhost available 1 - admin just now +admin/default lxd/localhost available 0 - admin 2017-01-23 +admin/whale* lxd/localhost available 6 - admin 3 minutes ago +``` + + + +第一行的 ```Controller: k8s``` 表明是如何引导创建的控制器。 + + + +接着可以看见下面列了 2 个,3 个或更多的类型。 + + + +* admin/controller 是托管 juju 所有控制器单元的默认模型 +* admin/default 默认情况下,作为托管用户应用程序的主要模型,例如 Kubernetes 集群 +* admin/whale 是一个额外的模型,如在 Juju 之上,叠加使用 conjure-up 的话 + + + +现在开始 ssh 到控制节点上,首先是让 Juju 切换上下文,然后是像一般单元那样 ssh 到控制节点上: + +``` +juju switch controller +``` + + + +在这个阶段,也可以查询控制器模型: + +``` +juju status +Model Controller Cloud/Region Version +controller k8s lxd/localhost 2.0.2 + +App Version Status Scale Charm Store Rev OS Notes + +Unit Workload Agent Machine Public address Ports Message + +Machine State DNS Inst id Series AZ +0 started 10.191.22.15 juju-2a5ed8-0 xenial +``` + + + +请注意,如果是在 HA 模式下进行的引导, +会在列表中看到几台机器。 + + + +现在 ssh 到控制器节点上,遵循和经典 Juju 命令相同的语义: + +``` +$ juju ssh 0 +Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.8.0-34-generic x86_64) + + * Documentation: https://help.ubuntu.com + * Management: https://landscape.canonical.com + * Support: https://ubuntu.com/advantage + + Get cloud support with Ubuntu Advantage Cloud Guest: + http://www.ubuntu.com/business/services/cloud + +0 packages can be updated. +0 updates are security updates. + + +Last login: Tue Jan 24 16:38:13 2017 from 10.191.22.1 +ubuntu@juju-2a5ed8-0:~$ +``` + + + +在结束完操作,想要返回到最初的模型,退出控制器即可。 + + + +如果,还想要切换回集群,ssh 到其他单元上,运行下面的命令行进行切换: + +``` +juju switch default +``` + + + +## 管理 Kubernetes 集群 + + + +### 运行特权容器 + + + +默认情况下,juju 部署的集群不支持在带有 GPU 的节点上运行特权容器。 +如果需要在其它节点上运行特权容器,只能是在 kubernetes-master 和 kubernetes-worker 节点上 +使能 ```allow-privileged``` 参数: + +``` +juju config kubernetes-master allow-privileged=true +juju config kubernetes-worker allow-privileged=true +``` + + + +### 私有仓库 + + + +通过 registry 操作,您可以很容易地创建一个使用 TLS 身份验证的私有 docker 仓库。 +但是请注意,通过这些功能部署的仓库不是高可用性的; +它使用的存储绑定到运行 pod 的 kubernetes 节点上。 +因此,如果仓库所在的 pod 从一个节点迁移到另一个节点上, +那么你需要重新发布镜像。 + + + +#### 使用示例 + + + +创建相关的身份验证文件。 +例如用户为 ```userA``` 密码为 ```passwordA``` 用来进行身份验证, +命令行如下: + +``` +echo "userA:passwordA" > htpasswd-plain +htpasswd -c -b -B htpasswd userA passwordA +``` + + + +(`htpasswd` 程序通过 ```apache2-utils``` 包获得) + + + +假设您的仓库可以通过 ```myregistry.company.com``` 访问, +您已经在 ```registry.key``` 文件中拥有了您的 TLS 密钥, +并且您的 TLS 身份验证(以 ```myregistry.company.com``` 作为 Common Name)在 +```registry.crt``` 文件中,那么您可以运行: + +``` +juju run-action kubernetes-worker/0 registry domain=myregistry.company.com htpasswd="$(base64 -w0 htpasswd)" htpasswd-plain="$(base64 -w0 htpasswd-plain)" tlscert="$(base64 -w0 registry.crt)" tlskey="$(base64 -w0 registry.key)" ingress=true +``` + + + +如果决定删除镜像仓库,命令行如下: + +``` +juju run-action kubernetes-worker/0 registry delete=true ingress=true +``` + +{{% /capture %}}