Edit This Page

在 CenturyLink Cloud 上运行 Kubernetes

这些脚本适用于在 CenturyLink Cloud 上创建、删除和扩展 Kubernetes 集群。

您可以使用单个命令完成所有任务。我们提供了用于执行这些任务的 Ansible 手册 点击这里

寻求帮助

如果运行出现问题或者想要寻求帮助,我们非常乐意帮忙。通过以下方式获取帮助:

基于 VM 或物理服务器的集群可供选择

  • 我们在虚拟机或物理服务器上都支持 Kubernetes 集群。如果要将物理服务器用于辅助 Node(minions),则只需使用 --minion_type=bareMetal 标志。
  • 有关物理服务器的更多信息,请访问: https://www.ctl.io/bare-metal/
  • 仅在 VA1 和 GB3 数据中心提供物理服务。
  • 13个公共云位置都可以使用虚拟机。

要求

运行此脚本的要求有:

  • Linux 管理主机(在 ubuntu 和 macOS 上测试)
  • python 2(在 2.7.11 版本上测试)
    • pip(从 2.7.9 版开始与 python 一起安装)
  • git
  • 具有新建主机权限的 CenturyLink Cloud 帐户
  • 从 Linux 主机到 CenturyLink Cloud 的有效 VPN 连接

脚本安装

满足所有要求后,请按照以下说明安装此脚本。

1)克隆此存储库并通过 cd 进入。

git clone https://github.com/CenturyLinkCloud/adm-kubernetes-on-clc

2)安装所有要求的部分,包括

  • Ansible
  • CenturyLink Cloud SDK
  • Ansible Modules
sudo pip install -r ansible/requirements.txt

3)从模板创建凭证文件,并使用它来设置您的 ENV 变量

cp ansible/credentials.sh.template ansible/credentials.sh
vi ansible/credentials.sh
source ansible/credentials.sh

4)使用内网的虚拟机或 配置与 CenturyLink Cloud 网络的 VPN 连接. 授予您的计算机对 CenturyLink Cloud 网络的访问权限。

脚本安装示例:Ubuntu 14 演练

如果您使用 Ubuntu 14,为方便起见,我们会提供分步指导帮助安装必备条件和脚本。

# system
apt-get update
apt-get install -y git python python-crypto
curl -O https://bootstrap.pypa.io/get-pip.py
python get-pip.py

# installing this repository
mkdir -p ~home/k8s-on-clc
cd ~home/k8s-on-clc
git clone https://github.com/CenturyLinkCloud/adm-kubernetes-on-clc.git
cd adm-kubernetes-on-clc/
pip install -r requirements.txt

# getting started
cd ansible
cp credentials.sh.template credentials.sh; vi credentials.sh
source credentials.sh

创建集群

要创建一个新的 Kubernetes 集群,只需运行 kube-up.sh 脚本即可。以下是一套完整的脚本选项列表和一些示例。

CLC_CLUSTER_NAME=[name of kubernetes cluster]
cd ./adm-kubernetes-on-clc
bash kube-up.sh -c="$CLC_CLUSTER_NAME"

创建集群大约需要15分钟。脚本完成后,它将输出一些命令,这些命令将帮助您在计算机上设置 kubectl 以指向新集群。

完成集群创建后,其配置文件会存储在本地管理主机的以下目录中

> CLC_CLUSTER_HOME=$HOME/.clc_kube/$CLC_CLUSTER_NAME/

创建集群:脚本选项

Usage: kube-up.sh [OPTIONS]
Create servers in the CenturyLinkCloud environment and initialize a Kubernetes cluster
Environment variables CLC_V2_API_USERNAME and CLC_V2_API_PASSWD must be set in
order to access the CenturyLinkCloud API

All options (both short and long form) require arguments, and must include "="
between option name and option value.

     -h (--help)                   display this help and exit
     -c= (--clc_cluster_name=)     set the name of the cluster, as used in CLC group names
     -t= (--minion_type=)          standard -> VM (default), bareMetal -> physical]
     -d= (--datacenter=)           VA1 (default)
     -m= (--minion_count=)         number of kubernetes minion nodes
     -mem= (--vm_memory=)          number of GB ram for each minion
     -cpu= (--vm_cpu=)             number of virtual cps for each minion node
     -phyid= (--server_conf_id=)   physical server configuration id, one of
                                      physical_server_20_core_conf_id
                                      physical_server_12_core_conf_id
                                      physical_server_4_core_conf_id (default)
     -etcd_separate_cluster=yes    create a separate cluster of three etcd nodes,
                                   otherwise run etcd on the master node

扩展集群

要扩展现有的Kubernetes集群,请运行add-kube-node.sh 脚本。脚本选项的完整列表和一些示例在 下面 列出。该脚本必须运行在创建集群的同一个主机(或储存集群工件文件的 ~/.clc_kube/$cluster_name 主机)。

cd ./adm-kubernetes-on-clc
bash add-kube-node.sh -c="name_of_kubernetes_cluster" -m=2

扩展集群:脚本选项

Usage: add-kube-node.sh [OPTIONS]
Create servers in the CenturyLinkCloud environment and add to an
existing CLC kubernetes cluster

Environment variables CLC_V2_API_USERNAME and CLC_V2_API_PASSWD must be set in
order to access the CenturyLinkCloud API

     -h (--help)                   display this help and exit
     -c= (--clc_cluster_name=)     set the name of the cluster, as used in CLC group names
     -m= (--minion_count=)         number of kubernetes minion nodes to add

删除集群

有两种方法可以删除集群:

1)使用 Python 脚本:

python delete_cluster.py --cluster=clc_cluster_name --datacenter=DC1

2)使用 CenturyLink Cloud UI。要删除集群,请登录 CenturyLink Cloud 控制页面并删除包含 Kubernetes 集群的父服务器组。我们希望能够添加脚本选项以尽快完成此操作。

示例

在 VA1 中创建一个集群,名称为 k8s_1,具备1个主 Node 和3个辅助 Minion(在物理机上)

bash kube-up.sh --clc_cluster_name=k8s_1 --minion_type=bareMetal --minion_count=3 --datacenter=VA1

在 VA1 中创建一个 ha etcd 集群,名称为 k8s_2,运行在3个虚拟机和6个辅助 Minion(在虚拟机上)

bash kube-up.sh --clc_cluster_name=k8s_2 --minion_type=standard --minion_count=6 --datacenter=VA1 --etcd_separate_cluster=yes

在 UC1 中创建一个集群,名称为k8s_3,具备1个主 Node 和10个具有更高 mem/cpu 的辅助 Minion(在虚拟机上):

bash kube-up.sh --clc_cluster_name=k8s_3 --minion_type=standard --minion_count=10 --datacenter=VA1 -mem=6 -cpu=4

集群功能和架构

我们使用以下功能配置 Kubernetes 集群:

  • KubeDNS:DNS 解析和服务发现
  • Heapster / InfluxDB:用于指标收集,是 Grafana 和 auto-scaling 需要的。
  • Grafana:Kubernetes/Docker 指标仪表板
  • KubeUI:用于查看 Kubernetes 状态的简单 Web 界面
  • Kube 仪表板:新的 Web 界面可与您的集群进行交互

使用以下工具创建 Kubernetes 集群:

  • Kubernetes 1.1.7
  • Ubuntu 14.04
  • Flannel 0.5.4
  • Docker 1.9.1-0~trusty
  • Etcd 2.2.2

可选附件

  • 日志记录:我们提供了一个集成的集中式日志记录 ELK 平台,以便将所有 Kubernetes 和 docker 日志发送到 ELK 堆栈。要安装 ELK 堆栈并配置 Kubernetes 向其发送日志,请遵循 日志聚合文档。注意:默认情况下我们不安装此程序,因为占用空间并不小。

管理集群

管理 Kubernetes 集群最常用工具是 command-line 实用程序 kubectl。如果您的管理器上还没有此二进制文件的副本,可以运行脚本 install_kubectl.sh,它将下载该脚本并将其安装在 /usr/bin/local 中。

该脚本要求定义环境变量 CLC_CLUSTER_NAMEinstall_kubectl.sh 还将写入一个配置文件,该文件为特定集群嵌入必要的认证证书。配置文件被写入 ${CLC_CLUSTER_HOME}/kube 目录中

export KUBECONFIG=${CLC_CLUSTER_HOME}/kube/config
kubectl version
kubectl cluster-info

以编程方式访问集群

可以使用本地存储的客户端证书来访问 apiserver。例如,您可以使用 Kubernetes API 客户端库 选择编程语言对 Kubernetes 集群进行编程。

为了演示如何使用这些本地存储的证书,我们提供以下示例,使用 curl 通过 https 与主 apiserver 进行通信:

curl \
   --cacert ${CLC_CLUSTER_HOME}/pki/ca.crt  \
   --key ${CLC_CLUSTER_HOME}/pki/kubecfg.key \
   --cert ${CLC_CLUSTER_HOME}/pki/kubecfg.crt  https://${MASTER_IP}:6443

但是请注意,这 不能 与 MacOS 一起发行的 curl 二进制文件分开使用。

使用浏览器访问集群

安装 Kubernetes 仪表板。创建集群时,脚本会为这些接口输出 URL,如下所示:

kubernetes-dashboard 在以下位置运行 https://${MASTER_IP}:6443/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy

对 UI 进行身份验证的注意事项:

群集设置为对用户 admin 使用基本的身份验证。进入 URL https://${MASTER_IP}:6443 获取从 apiserver 上接收的自签名证书,然后出示管理员密码并写入文件 > _${CLC_CLUSTER_HOME}/kube/admin_password.txt_

配置文件

多个配置文件被写入几个子目录,子目录在 .clc_kube/${CLC_CLUSTER_NAME} 下的主目录 CLC_CLUSTER_HOME 中。使用这些文件可以从创建群集的计算机之外的其他计算机访问群集。

  • config/:Ansible 变量文件,包含描述主机和从机的参数
  • hosts/: 主机文件,列出了 Ansible 手册的访问信息
  • kube/: kubectl 配置文件,包含管理员访问 Kubernetes API 所需的基本身份验证密码
  • pki/: 公钥基础结构文件,用于在集群中启用 TLS 通信
  • ssh/: 对主机进行根访问的 SSH 密钥

kubectl 使用示例

kubectl 有很多功能,例如

列出所有或者一个命名空间中存在的 Node,Pod,服务等。

kubectl get nodes
kubectl get --all-namespaces pods
kubectl get --all-namespaces services
kubectl get --namespace=kube-system replicationcontrollers

Kubernetes API 服务器在 Web URL 上公开服务,这些 URL 受客户端证书的保护。如果您在本地运行 kubectl 代理,kubectl 将提供必要的证书,并通过 http 在本地提供服务。

kubectl proxy -p 8001

然后,您可以访问 http://127.0.0.1:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/ 之类的 URL,不再需要浏览器中的客户端证书 。

这些是已知的在 CenturyLink Cloud 上不能使用,但在其他云提供商中可以使用:

  • 目前,没有 LoadBalancer类型的支持服务。我们正在为此积极努力,并希望在2016年4月左右发布更改。

  • 目前,不支持 CenturyLink Cloud 提供的永久存储卷。但是,客户可以自带永久性存储产品。我们自己使用 Gluster。

Ansible 文件

如果您想了解有关 Ansible 文件的更多信息,请 浏览此文件

更多

有关管理和使用 Kubernetes 集群的更多详细信息,请参见 Kubernetes 文档