阿里云的 kubernetes HA 集群服务,需要至少 3 台 ECS 服务器作为 master,而且每台 master 上不允许运行 worker 上的 pod。 这对于对流量小、集群规模小、并且稳定性不要很高的业务而言无疑是一笔较大的费用支出。所以,在现有的几台 ECS 上搭建一个 kubernetes 集群权当做 一个尝试,不强调 HA。
将准备使用的 ECS 配置到同一个 VPC 网络中,并创建对应的路由器
现有两台 ECS,配置如下:
os: ubuntu 16.04
memory: 2G
cores: 2
ip: inner
os: ubuntu 16.04
memory: 4G
cores: 2
ip: EIP
搭建 kubernetes 集群,首要任务是可以让 ECS 1 可以访问外部网络,两台 ECS 位于同一个 VPC 网络中。配置过程主要参考 阿里云上如何使用 VPC,该博主已经讲解的很细致,归纳起来主要 有以下几个关键点:
VPC 内的 ECS 默认无法访问外网也无法被外网访问,通过为 ECS 挂载公网 IP 并配置为 SNAT,则其他 ECS 就可以借助它访问公网,另外也可以为该 ECS 配置 DNAT 从而允许外部访问 VPC 内部的服务。
$ iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
具体详细步骤请参考原文,感谢作者的付出。
为了保持 kubernetes 和 docker 运行时的版本匹配,将已经安装的 docker 从系统中删除,具体步骤可以根据系统版本参考官方文档, 比如 ubuntu 16.04 上卸载命令:
$ sudo apt-get remove docker docker-engine docker.io containerd runc
为了加速安装,添加阿里云的 kubernetes 镜像源:
$ apt-get update && apt-get install -y apt-transport-https
$ curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
$ cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
$ apt-get update
$ apt install -y kubeadm docker.io
将阿里云 docker 镜像的加速配置添加到 /etc/docker/daemon.json
文件中:
{
"registry-mirrors": ["https://your-keys.mirror.aliyuncs.com"]
}
然后登陆阿里云的 registry 账户:
$ sudo docker login --username=your-username registry.cn-beijing.aliyuncs.com
鉴于 k8s.io 相关的镜像源已无法访问,需要借助 docker hub 来实现 kubernetes 安装过程中必须的镜像下载。提前下载的主要是 coredns:1.3.1 镜像,其他镜像可以通过指定 image repository 的方式解决。
$ docker pull coredns:coredns:1.3.1
$ docker tag coredns:1.3.1 mirrorgooglecontainers/coredns:1.3.1
$ kubeadm init --image-repository index.docker.io/mirrorgooglecontainers
然后按照安装后的提示命令配置 master,类似:
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm init
也可以通过 --config kubeadm.yaml
定制配置选项。
这时,CoreDNS、kube-controller-manager 等依赖于网络的 POD 都处于 Pending 状态,还需要为 kubernetes 部署一个网络插件:
$ kubectl apply -f https://git.io/weave-kube-1.6
为了让 master 也可以运行一些 POD,删除 master 节点的 taint:
$ kubectl taint nodes --all node-role.kubernetes.io/master-
此后,我们便可以在这个集群上部署我们自己的应用了。
$ kubeadm completion bash > /etc/bash_completion.d/kubeadm
$ kubectl completion bash > /etc/bash_completion.d/kubectl
编辑 ~/.bashrc
放开 bash_completion
部分,然后执行
$ source ~/.bashrc
后面再使用 kubectl
等命令时便可以用 TAB 进行补齐了。
docker search XXX
查找 docker hub 中的镜像