这段时间我一直在折腾kubernetes,我讨厌了在不同的电脑上不断的部署,撤销,部署的循环了。 并且,将尽可能的将所有docker化的服务部署到kurbernetes上。
环境准备
ubuntu 16.04 x86_64
安装
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - cat <<EOF > /etc/apt/sources.list.d/kubernetes.list deb http://apt.kubernetes.io/ kubernetes-xenial main EOF apt-get update # Install docker if you don't have it already. apt-get install -y docker.io apt-get install -y kubelet kubeadm kubectl kubernetes-cni
配置
master上运行,其他节点直接join就可以
kubeadm init --api-advertise-addresses=192.168.228.129
ip地址为本地的可访问外网的地址
经过长时间的,坚持不懈的努力,终于在某天,良心发现,99%的梯子能力+1%的运气, 成功下载了所有的镜像,并运行起来了
kubernetes的各种坑开始
kubectl get pods -n kube-system
无法启动
8080端口是否被占用了?
dns 的pod一直无法启动
上述的配置中不含网络配置,网络需要另外安装关于网络的插件,目前有weave和calico等, 据说calico逼格比较高,所以选择calico开始
calico 各种坑开始
- calico yaml的选择
- 上述的安装使用的是kubeadm安装,因此,选择使用kubeadm/calico.yaml配置
- /etc/kubernetes/manifests/etcd.json中关于etcd的配置,默认”–listen-client-urls” 为 “http://127.0.0.1:2379“, “–advertise-client-urls”为”http://127.0.0.1:2379“, 至少修改为外网可访问的,幸运的是,不用重启,过一会kubernetes会自动加载这个
- 删除下载下来的配置中的etcd的配置和etcd服务的配置
- 修改下载下来的配置中的etcd的地址为kubeadm启动的etcd的地址,没记错的话,直接搜索6666就可以找到这个了
- 可能是防火墙影响,一直pull不下来,然后一直重拾
- calico pool 未知命令( 这个已经不需要了)
- 下载的calico.yaml可能比较老,使用最新的版本
- 老版本的pool命令已经需要了,新版本中是apply命令
- 如果不想更新calico的配置的话,自己pull一个老版本的,然后打tag
- 修改calico配置中的calico/ctl的版本为较老的版本
- 这个非常坑,我尝试了十几次才找到可以支持的,结果发现官网中的kubeadm/calico.yaml更新了
- kube-dns 出现 2/3 runing的状态
基本上,上述pool的问题解决了之后,这个一般不会出现,但不幸,我碰到了, 重启下docker服务试试?
- calico-* 等在node加入后的各种不正常现象
- 要求各节点的主机名称不能相同,(修改/etc/hosts,/etc/hostname等文件)
- etcd监听的为127.0.0.1,修改( 上述提到过)
- calico的yaml中修改etcd的地址,重新create,未试过apply
- 去掉各节点的docker启动服务参数中的dns为127.0.0.1(简单的理解,这个dns要可以解析各个自节点的主机名)
- 重启docker服务试试?
webui 安装
满怀信心的打开http://127.0.0.1:8080/ui/ , 结果无法访问。webui 需要安装才能使用
kubectl create -f https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml
经过上述坑,kubernetes终于算是比较正常了,可以运行了