Deploy Kubernetes on Aliyun

Kubernetes是Google开源的集群管理软件。 目前大部分的安装教程均是基于国外的公有云,比如AWS等。由于Kubernetes是一款分布式系统,拥有多个组件,对于普通技术人员来说安装配置会有一定挑战。 本教程将讲解使用TryK8S的自定义集群功能在阿里云上搭建Kubernetes集群的流程。 希望可以帮助更多对Kubernetes感兴趣的朋友尽快完成集群搭建,进入下一阶段的学习。

准备VPC专有网络

Kubernetes要求所管理的集群服务器在同一个内网当中,所以我们将首先在阿里云中创建VPC网络,供服务器使用。

我们将使用阿里云的管理控制台创建VPC,注意选择10.0.0.0/8这个网段。

接下来在VPC当中创建交换机,选择一个可用区,再输入10.99.0.0/16这个网段。

至此,VPC准备完成。

安装ssh-cloudinit

由于阿里云暂不支持通过cloud-init在创建服务器时传入user-data用于服务器初始化, TryK8S开发了ssh-cloudinit用于在服务器启动之后完成服务器初始化配置。

安装ssh-cloudinit非常简单

# OS X $ wget -O ssh-cloudinit.tar.gz https://github.com/tryk8s/ssh-cloudinit/releases/download/1.0/ssh-cloudinit-v1.0-darwin-amd64.tar.gz # Linux $ wget -O ssh-cloudinit.tar.gz https://github.com/tryk8s/ssh-cloudinit/releases/download/1.0/ssh-cloudinit-v1.0-linux-amd64.tar.gz # Move ssh-cloudinit to /usr/local/bin $ tar zxf ssh-cloudinit.tar.gz $ chmod +x ssh-cloudinit $ mv ssh-cloudinit /usr/local/bin/ssh-cloudinit

在TryK8S中创建自定义类型集群

自定义类型集群是TryK8S的新功能,用于支持无法自动创建集群的共有云环境。 在创建集群时选择Custom类型,同时在下面的选项当中勾选My servers are in China,在Custom docker boot options (DOCKER_OPTS)中输入阿里云提供的免费镜像地址, 并将Flannel backend选为alloc以便直接使用VPC的路由功能。

在阿里云中创建服务器

使用阿里云管理控制台创建按量付费类型的虚拟机实例。选择和上面一致的可用区以及专有网络,镜像选择为Ubuntu 14.04 64位版本,密码设置为随机密码,服务器数量选择为2。 一台用作Master运行Kubernete核心组件,一台用做Node运行业务系统。

将服务器升级到16.04版本

由于TryK8S仅支持Ubuntu 16.04版本的主机,在服务器创建之后需要先做版本升级。分别运行以下代码,并根据提示完成升级。详细的升级流程可以参考这篇教程

$ sudo apt-get update $ sudo apt-get upgrade $ sudo apt-get dist-upgrade $ sudo do-release-upgrade -d

将服务器信息提交到TryK8S创建的集群中

添加服务器非常容易,仅需要在Cluster Provisioning分别填入MasterNode服务器的公网IP地址和内网IP地址即可。

使用ssh-cloudinit初始化服务器

在服务器信息栏中可以看到初始化指令,剪切复制在本地运行即可。

$ ssh-cloudinit --remote http://tryk8s/servers/$(UUID) $(SERVER_IP)

安装VPC动态控制组件

为了使用阿里云VPC的路由功能,TryK8S为Flannel增加了watcher服务,源代码在 Github 已经开源。 请将下面的配置文件保存为flannel-watcher.yaml,并填入阿里云的各项设置。

apiVersion: v1 kind: Pod metadata: name: flannel-watcher namespace: kube-system spec: hostNetwork: true containers: - name: flannel-watcher image: registry.aliyuncs.com/tryk8s/flannel-watcher:1.0 command: - /go/bin/flannel - --watch=aliyun env: - name: ALIYUN_ACCESS_KEY_ID value: $(ALIYUN_ACCESS_KEY_ID) - name: ALIYUN_ACCESS_KEY_SECRET value: $(ALIYUN_ACCESS_KEY_SECRET) - name: ALIYUN_REGION value: $(ALIYUN_REGION) - name: ALIYUN_VPC_ID value: $(ALIYUN_VPC_ID) - name: ALIYUN_ROUTE_TABLE_ID value: $(ALIYUN_ROUTE_TABLE_ID)

接下来将配置文件上传到Master/etc/kubernetes/manifests目录下,kubelet将会自动运行flannel-watcher组件。

部署kube-dns组件

kube-dns是Kubernetes内部用于域名解析的组件,我们可以通过TryK8S一键部署到集群当中去。在Addons界面点击部署即可。

开始使用集群

通过配置本地的kubectl工具,我们可以对集群进行管理,让我们试着运行一个测试服务

$ kubectl run nginx --image=nginx $ kubectl get pods NAME READY STATUS RESTARTS AGE nginx-2040093540-sz06o 1/1 Running 0 23s

增加更多的服务器到集群当中

如果需要添加更多的服务器到集群当中,仅需要重复完成创建阿里云服务器,添加服务器到TryK8S集群当中,使用ssh-cloudinit进行初始化的流程即可。 Kubernetes会自动将Node加入集群,flannel-watcher会自动配置VPC上的路由表,让Pod之间可以正常通信。