以下过程在
Ubuntu 16.04裸机上完全跑通
本文展示了在Ubuntu 16.04系统上搭建Kubernetes集群的方法,用到了Canonical Kubernetes的发行版本,这是一种快捷搭建本地Kubernetes集群的方法,并能够支持动态增删node节点。
主要搭建步骤是,使用conjure-up工具,结合juju,基于LXD搭建Kubernetes集群,并使用kubelet和kube-proxy将其他机器作为node节点,注册入该集群中。
安装snapd
conjure-up工具需要使用Ubuntu 16.04新的包管理器snapd安装,所以先安装snapd。
1 | sudo apt update |
安装LXD
conjure-up是基于LXD搭建集群的,所以要先安装LXD,并做好初始化配置。这里面涉及到lxd用户组的操作。下面先简单介绍下其用法。
当安装好
LXD后,会自动创建一个lxd用户组,只有在这个用户组才能操作LXD程序,所有admin和sudoers的用户,都会被自动加入到lxd用户组中。所以如果你不在这个组内,就需要手动添加到lxd组中。因为用户组成员权限只会在登录时生效,所以你要么关闭当前回话,然后重新登录;要么就使用
newgrp lxd命令,在当前会话中将自己切换到lxd用户组中。
用法示例
1 | # 显示用户"test"当前隶属于哪些用户组 |
OK,现在开始安装LXD
1 | sudo apt-get install lxd |
安装conjure-up
1 | sudo apt install software-properties-common //安装add-apt-repository命令 |
安装Kubernetes
1 | conjure-up kubernetes |
如果有提示
Missing dependencies for SOCKS support,是因为系统的全局代理和conjure-up冲突,需要unset all_proxy。但是这样又会导致安装过程中,因为没有翻墙,有些镜像下载失败导致卡住,所以建议修改hosts翻墙。切记
LXD要在conjure-up运行之前装好并init完毕,否则会出现各种与LXD相关的错误。
选择The Canonical Distribution of Kubernetes。

选择Deploy New Self-Hosted Controller。

选择localhost。

一路Deploy过去,也可以将worker节点Configure为1,毕竟node节点可以由其它机器提供。

坐等安装,时间会比较长,这个过程需要翻墙下一些镜像。

暴露Master节点以增加Node
集群安装完毕后,在~/bin目录下生成了一个kubectl.xxx可执行文件,该文件可以和集群进行交互,可以查看安装效果:
1 | ~/bin/kubectl cluster-info |
部署完成后,master的服务都运行在内网IP之上,需要将其暴露到集群外,这样才能让其他机器访问到。
1 | nohup ~/bin/kubectl proxy --accept-hosts="^*$" --address="0.0.0.0" & |
添加Node节点
添加Node节点,需要在Node机器上运行2个进程:kubelet和kube-proxy,启动时指定master的服务地址,这样就可以将该机器注册进集群中。同时Node机器要安装好Docker。
参看Docker官方文档,安装
Docker在Kubernetes最新发布页下载发布包
kubernetes.tar.gz
1 | wget https://github.com/kubernetes/kubernetes/releases/latest/kubernetes.tar.gz |
- 解压发布包
1 | tar -xf kubernetes.tar.gz |
- 运行
cluster/get-kube-binaries.sh拉取最新的二进制包,这里面包含各种所需要的包,我们需要的包都放在kubernetes/server/kubernetes/server/bin/目录下。
1 | bash cluster/get-kube-binaries.sh |
- 运行
kubelet:
1 | kubelet --api-servers=http://106.106.9.22:8001 --register-node |
- 运行
kube-proxy:
1 | kube-proxy --master=http://106.106.9.22:8001 |
- 在master节点查看添加效果
1 | ~/bin/kubectl get no |
删除Node节点
杀掉node节点中的
kubelet和kube-proxy进程在master节点删除node
1 | ~/bin/kubectl delete no worker1 //worker1为该node节点名称 |
SSH连接cluster
十分有用:对于这种方式部署的kubernetes集群,如果需要进入到master节点,或者node节点,进行数据查看或调试。有极其简单的SSH方法:
1 | juju ssh 5 |
数字5表示5号machine,具体可以通过juju status查看所有服务都运行在哪个machine上,当然了,还有很多花式的SSH连接参数,都可以帮助你连接到需要的节点上,具体可以参看juju ssh --help
可能用到的命令
conjure-up kubernetes不一定能一次成功,如下命令也许有用:
1 | juju status |