Edit This Page

运维注意事项

本文为管理维护长期运行的集群的工程师提供一些建议和提示。

准备开始

本文假定您对 Juju 和 Kubernetes 已经有了基本的了解。

管理 Juju

确定控制节点规模

Juju 控制器:

指定参数创建一个控制器(命令行如下):

juju bootstrap --constraints "mem=8GB cpu-cores=4 root-disk=128G"

Juju 将会选择与目标云上的约束匹配的最便宜的实例类型。 还可以通过将 instance-typeroot-disk 两个约束结合使用来进行严格控制。 对于可用的约束信息,请参阅 官方文档

关于日志记录的更多信息,请参阅 日志章节

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 个或更多的类型。

现在开始 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)在

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


<!-- If you then decide that you want to delete the registry, just run: -->

如果决定删除镜像仓库,命令行如下:

juju run-action kubernetes-worker/0 registry delete=true ingress=true ```

反馈