以下过程在
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 |