部署k8s集群过程及遇到的问题~

/ 运维 / 没有评论 / 423浏览

1.环境是ubuntu18.04.

两台主机分别为:192.168.134.131  , 192.168.134.132

2.我这次没有安装最新版的k8s,目前最新为1.13.x我的是1.10.2;(因为墙的缘故随便在网上找到百度云资源..)

3.安装docker,我这版本最高支持17.x不过我的是18.x,只是有警告,不过不影响;

4.禁用防火墙及虚拟内存swap;

5.下载k8s相关软件及拉取镜像:

sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s http://packages.faasx.com/google/apt/doc/apt-key.gpg | sudo apt-key add -
sudo cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet=1.10.2-00 kubeadm=1.10.2-00 kubectl=1.10.2-00

我这里指定了版本,否则会下载最新的跟拉下来的镜像不匹配;

## 拉取镜像
docker pull reg.qiniu.com/k8s/kube-apiserver-amd64:v1.10.2
docker pull reg.qiniu.com/k8s/kube-controller-manager-amd64:v1.10.2
docker pull reg.qiniu.com/k8s/kube-scheduler-amd64:v1.10.2
docker pull reg.qiniu.com/k8s/kube-proxy-amd64:v1.10.2
docker pull reg.qiniu.com/k8s/etcd-amd64:3.1.12
docker pull reg.qiniu.com/k8s/pause-amd64:3.1

添加Tag

docker tag reg.qiniu.com/k8s/kube-apiserver-amd64:v1.10.2 k8s.gcr.io/kube-apiserver-amd64:v1.10.2 docker tag reg.qiniu.com/k8s/kube-scheduler-amd64:v1.10.2 k8s.gcr.io/kube-scheduler-amd64:v1.10.2 docker tag reg.qiniu.com/k8s/kube-controller-manager-amd64:v1.10.2 k8s.gcr.io/kube-controller-manager-amd64:v1.10.2 docker tag reg.qiniu.com/k8s/kube-proxy-amd64:v1.10.2 k8s.gcr.io/kube-proxy-amd64:v1.10.2 docker tag reg.qiniu.com/k8s/etcd-amd64:3.1.12 k8s.gcr.io/etcd-amd64:3.1.12 docker tag reg.qiniu.com/k8s/pause-amd64:3.1 k8s.gcr.io/pause-amd64:3.1

在Kubernetes 1.10 中,增加了CoreDNS,如果使用CoreDNS(默认关闭),则不需要下面三个镜像。

docker pull reg.qiniu.com/k8s/k8s-dns-sidecar-amd64:1.14.10 docker pull reg.qiniu.com/k8s/k8s-dns-kube-dns-amd64:1.14.10 docker pull reg.qiniu.com/k8s/k8s-dns-dnsmasq-nanny-amd64:1.14.10

docker tag reg.qiniu.com/k8s/k8s-dns-sidecar-amd64:1.14.10 k8s.gcr.io/k8s-dns-sidecar-amd64:1.14.10 docker tag reg.qiniu.com/k8s/k8s-dns-kube-dns-amd64:1.14.10 k8s.gcr.io/k8s-dns-kube-dns-amd64:1.14.10 docker tag reg.qiniu.com/k8s/k8s-dns-dnsmasq-nanny-amd64:1.14.10 k8s.gcr.io/k8s-dns-dnsmasq-nanny-amd64:1.14.10

这里为了不能科学上网的准备方案...(其实一直可以科学,只是后来才搞了下linux虚拟机靠主机ssr....)

6.初始化master

kubeadm init --kubernetes-version=v1.10.2 --feature-gates=CoreDNS=true --pod-network-cidr=192.168.0.0/16

这里可以随便指定一个pod的网络区间;然后就会出现一些参数;

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

创建隐藏文件夹并复制配置文件,root用户可以忽略第三项;

kubeadm join 192.168.134.131:6443 --token zwv50y.g8d5oykrqclir6cv --discovery-token-ca-cert-hash sha256:fe8d579d17900263ba7d6421d4f9cac57443cf5e1a534da161351fd5b0cb642a

这个token记住,其他node加入master就靠这句了;

7.将docker和kubelet设置为开机启动并启动;

systemctl enable docker;
systemctl enable kubelet;
systemctl start docker;
systemctl start kubelet;

8.安装网络插件,好像1.13.x后版本自动就靠kubeadm下载了;

kubectl apply -f http://mirror.faasx.com/kubernetes/installation/hosted/kubeadm/1.7/calico.yaml

这时master基本就算搭建好了;

9.配置node节点,加入master;

同样关闭虚拟内存及防火墙

同样安装docker,kubelet,kubeadm,这里可以不安装命令行软件kubectl了;

同样添加开机启动及启动;

然后就是输入刚才的token join加入命令;

就会出现类似于请到master主机中执行kubectl get nodes查看节点的命令;

此时应该就可以成功加入到master了;

如果你能科学上网,那么就省了上面自己拉镜像一步了,kubeadm能够完全帮你自动的配置很多东西__

10.说下我遇到的奇葩问题;

(1) node死活在master上看不到,kubectl get nodes只能看到master;折腾了半天,检查是不是代理的问题啊,各种删除重新安装node啥的.都不行.

~~然后想到是不是hostname名称一样了,一看还真是;

~~于是我vim /etc/hostname 改了个名字就重启了,然后重新加入操作,并没有成功;

~~于是我失望的试了试启动个pod吧,结果在node节点上也看到了启动的pod,这不是加入master成了吗,又检查hostname.奶奶的又变回去了....

~~于是百度.ubuntu18版本修改hostname需要修改的同时,修改 /etc/cloud/cloud.cfg 文件中的preserve_hostname: true为true;重启后成功....

~~而且,这个名字不支持下划线,可以是  '-'

~~并且如果你启动pod的话,会在node和master上启动相同数量的pod;改名后则变正常:如: