距离 kubernetes 1.4 发布已经有段时间,1.4 版本新增了很多新特性,其中一个比较实用的功能就是增加了集群的快速创建,基本只需要 2 条命令就能搭建成功;但由于众所周知的原因(fuck GFW),导致 kuadm 命令无法工作,以下记录了一下解决方案
一、环境准备基本环境为 3 台虚拟机,虚拟机信息如下
IP 地址节点192.168.1.107 master
192.168.1.126 node1
192.168.1.217 node2
1.1、安装 docker
docker 这里使用的是 1.12.1 版本,安装直接根据官方教程来,如果网速较慢可切换国内源,如清华大 docker 源,具体请 Google
tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/CentOS/7/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF yum install docker-engine -y systemctl enable docker systemctl start docker systemctl status docker
1.2、修改主机名由于 3 台虚拟机是从一个基础虚拟机复制而来,为了不影响 kubectl get nodes 查询,需要更改 3 台虚拟机的主机名,以下为 master 节点示例,其他节点对应修改即可
echo "master" > /etc/hostname # 替换一下 hosts 中的 localhost 等 vim /etc/hosts # 修改后内容如下 127.0.0.1 master ::1 master 192.168.1.107 master 192.168.1.126 node1 192.168.1.217 node2
二、搭建 kubernetes 集群 2.1、安装基本组件根据 官方文档教程 需要先安装 kubelet、kubeadm、kubectl、 kubernetes-cni 这四个 rpm 包,但是由于 GFW 原因实际上 Google 的 rpm 源无法下载,以下是我通过梯子下载到本地的,rpm 下载方法 可借助 yumdownloader 工具,具体请 Google
# 首先安装 socat yum install -y socat # 然后下载相关 rpm,我已经放到了 cdn 里 rpms=(5ce829590fb4d5c860b80e73d4483b8545496a13f68ff3033ba76fa72632a3b6-kubernetes-cni-0.3.0.1-0.07a8a2.x86_64.rpm \ bbad6f8b76467d0a5c40fe0f5a1d92500baef49dedff2944e317936b110524eb-kubeadm-1.5.0-0.alpha.0.1534.gcf7301f.x86_64.rpm \ c37966352c9d394bf2cc1f755938dfb679aa45ac866d3eb1775d9c9b87d5e177-kubelet-1.4.0-0.x86_64.rpm \ fac5b4cd036d76764306bd1df7258394b200be4c11f4e3fdd100bfb25a403ed4-kubectl-1.4.0-0.x86_64.rpm) for rpmName in ${rpms[@]}; do wget $rpmName done # 最后安装即可 rpm -ivh *.rpm
2.2、启动相关组件接下来启动 docker 和 kubelet
systemctl enable docker systemctl enable kubelet systemctl start docker systemctl start kubelet
此时查看 kubelet 其实是启动失败的,因为缺少相关配置,以下一部部署以后便会自动重启成功
在正式使用 kubeadm 创建集群以前还需要关闭 selinux,在下一个版本这个问题已经被解决
# 关闭 selinux setenforce 0
2.3、导入相关 imagekubeadm 会 pull 相关的 image,由于 GFW 的原因会造成无法下载最终失败,所以最好的办法是先用梯子 pull 下来,再 load 进去即可,以下为需要 load 进的镜像
镜像名称版本号gcr.io/google_containers/kube-proxy-amd64 v1.4.0
gcr.io/google_containers/kube-discovery-amd64 1.0
gcr.io/google_containers/kubedns-amd64 1.7
gcr.io/google_containers/kube-scheduler-amd64 v1.4.0
gcr.io/google_containers/kube-controller-manager-amd64 v1.4.0
gcr.io/google_containers/kube-apiserver-amd64 v1.4.0
gcr.io/google_containers/etcd-amd64 2.2.5
gcr.io/google_containers/kube-dnsmasq-amd64 1.3
gcr.io/google_containers/exechealthz-amd64 1.1
gcr.io/google_containers/pause-amd64 3.0
实际上不用梯子可以借助于 DockerHub 的自动构建功能,实现代理下载,如下所示
images=(kube-proxy-amd64:v1.4.0 kube-discovery-amd64:1.0 kubedns-amd64:1.7 kube-scheduler-amd64:v1.4.0 kube-controller-manager-amd64:v1.4.0 kube-apiserver-amd64:v1.4.0 etcd-amd64:2.2.5 kube-dnsmasq-amd64:1.3 exechealthz-amd64:1.1 pause-amd64:3.0 kubernetes-dashboard-amd64:v1.4.0) for imageName in ${images[@]} ; do docker pull mritd/$imageName docker tag mritd/$imageName gcr.io/google_containers/$imageName docker rmi mritd/$imageName done
2.4、创建集群首先在 master 上执行 init 操作
kubeadm init --api-advertise-addresses=192.168.1.107
此时显示信息如下表示创建完成