您正在查看 Kubernetes 版本的文档: v1.18
Kubernetes v1.18 版本的文档已不再维护。您现在看到的版本来自于一份静态的快照。如需查阅最新文档,请点击 最新版本。
在 CenturyLink Cloud 上运行 Kubernetes
这些脚本适用于在 CenturyLink Cloud 上创建、删除和扩展 Kubernetes 集群。
您可以使用单个命令完成所有任务。我们提供了用于执行这些任务的 Ansible 手册 点击这里
寻求帮助
如果运行出现问题或者想要寻求帮助,我们非常乐意帮忙。通过以下方式获取帮助:
- 提交 github issue
- 给 Kubernetes AT ctl DOT io 发送邮件
- 访问 http://info.ctl.io/kubernetes
基于 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_NAME
。install_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,不再需要浏览器中的客户端证书 。
Kubernetes 的哪些功能无法在 CenturyLink Cloud 上使用
这些是已知的在 CenturyLink Cloud 上不能使用,但在其他云提供商中可以使用:
目前,没有 LoadBalancer类型的支持服务。我们正在为此积极努力,并希望在2016年4月左右发布更改。
目前,不支持 CenturyLink Cloud 提供的永久存储卷。但是,客户可以自带永久性存储产品。我们自己使用 Gluster。
Ansible 文件
如果您想了解有关 Ansible 文件的更多信息,请 浏览此文件
更多
有关管理和使用 Kubernetes 集群的更多详细信息,请参见 Kubernetes 文档