~本安装教程的目录 共3节 均为原创 穿在请注明作者及出处 感谢~
2.主从节点篇【本篇】
~ -----------~
接上一节,我们已经在全部的节点上安装了17.03版本的docker-ce;v1.11.3版本的kubeadm、kubectl和kubelet
现在,准备工作已经结束了,我们终于可以开始安装k8s的主节点了!
安装并配置k8s的主节点
Step1 在主节点使用 kubeadm init 命令
这里我们需要说一下kubeadm这个命令,也就是之前我们所下载的k8s官方安装工具。
其参数非常之多,而比较常用的我做了一下总结,我自己的集群上也是使用了这些参数进行master节点初始化的:
# kubeadm init
# --apiserver-advertise-address=59.110.220.63 开放公网ip为apiserver 这里填你主机的公网IP;
# --apiserver-bind-port=6443 绑定6443端口;
# --kubernetes-version="v1.11.3" 指定k8s集群的版本v1.11.3(指定版本后就不需要连接google服务器进行新版本检查了,对国内节点安装的朋友,这个参数必不可少!!版本与你下载的kubeadm、kubectl、kubelet相同即可);
# --pod-network-cidr=10.244.0.0/16 选择calico网络pod ,这是用于k8s集群间通信的网络组件,有多种可供选择的方式,详见:https://v1-11.docs.kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network
# --apiserver-cert-extra-sans=172.17.76.239 添加内网apiserver 节点间通讯使用内网传递信息 这里填写你主机的内网IP;
# 于是乎一个比较可靠的 kubeadm init 命令就被我们得到了:
kubeadm init --apiserver-advertise-address=59.110.220.63 --apiserver-bind-port=6443 --kubernetes-version="v1.11.3" --pod-network-cidr=10.244.0.0/16 --apiserver-cert-extra-sans=172.17.76.239
关于kubeadm init 的用法和更多可选的参数,详见:https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/
这里我们只使用最普通的初始化方式作为演示。
Step2 等待输出结果
在输入 kubeadm init 命令后稍后几分钟,你就会得到下面的信息。这就表示你的集群主节点已经基本搞定了!可喜可贺。
这里有两点需要注意的:
【1. 如果你是国内节点,那么非常遗憾你在kubeadm init的时候是一定会卡死的。这一点我非常确认。】
因为在kubeadm init执行时,有一步是连接到Google的服务器上去把k8s所需要的docker镜像给Pull下来...然后,因为有墙的缘故,你是一定会卡死在这里的。卡死信息是timeout超时。
那么有没有解决方案呢?当然是有的!你可以把主节点所需要的Docker镜像在kubeadm init之前,先给pull到本地。然后你在init的时候就可以愉快地跳过pull镜像的环节,成功安装了。
那么v1.11.3 的k8s都需要哪些镜像,每个镜像都需要什么版本呢?我给大家做了个总结:
其中,前缀带 k8s.gcr.io 的的Image都是kubeadm init时需要用到的,需要提前pull下来。
如果大家比较迷茫,这些镜像找不到的话,可以来我的docker hub上pull镜像:https://hub.docker.com/u/xinyaotian/
【!】要注意的就是镜像pull到本地之后,需要使用 docker tag 命令将所有 xinyaotian 全部替换为 k8s.gcr.io ,而且由于k8s在初始化时是根据镜像名称和版本号检测的,因此名称和版本号都必须一致!如上图所示。
【2. kubeadm init 后的输出的kubeadm join 命令及之后的一串哈希值,保存好。它是用来添加新的节点的】
这个给出的kubeadm join后的hash值有效期是24小时,24小时过后便失效。
可以使用 kubeadm token list 来查看当前的 token 表。
【!】如果超过了24小时,又准备继续添加新的节点,那么就需要在master节点使用如下命令
kubeadm token create --print-join-command
使用过后会输出一串新的kubeadm join 及hash值。利用这个新的命令就可以添加新的节点进入集群了。
Step3 继续执行后续操作
将刚才init成功后,执行输出的这3行命令
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Step4 使用kubectl get nodes命令
看到如下信息表示初始化成功。可以看到我们的master节点初始化已经完成了!
但是节点的状态仍为NotReady。这是为什么呢?因为我们没有配置k8s集群用于通信的内网。所以需要创建net-pod。
Step5 配置net-pod
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/canal.yaml
稍等一会,等相应的yaml成功创建为pod并启动服务,再使用 kubectl get nodes 就会看到节点状态变为Ready啦!
安装并配置k8s的从节点
从节点的添加非常便捷,这也是k8s高可用的一个体现——他允许你随意添加、随意删除节点,而且只需要一条命令就可以实现。非常方便快捷。
Step1 登陆已经完成准备工作的从节点主机
Step2 在master节点上获取 kubeadm join 那一大长串哈希 复制下来,并在worker节点上直接执行
# 如果忘记的话也可以在master上使用这个命令来得到一个新的join命令
kubeadm token create --print-join-command
如果得到上述信息则说明从节点配置成功。
Step3 返回master节点 可以看到从节点的信息了
大功告成!接下来,就开始享受你的k8s容器管理平台集群吧!哈哈。
在搭建完这个集群以后,接下来你可以做这些事情。详见官网教程:
https://v1-11.docs.kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#whats-next
这里有一点主要注意的
【1. 如果你是国内节点,那么非常遗憾你在kubeadm join的时候同样一定会卡死的。这一点我非常确认。】
因为在kubeadm join执行时,也有一步是连接到Google的服务器上去把k8s所需要的docker镜像给Pull下来...然后,因为有墙的缘故,你是一定会卡死在这里的。卡死信息是timeout超时。
你也需要用上述和master节点一样的方法,先把image都手动pull下来 再使用 kubeadm join 命令
感谢您读到这里!祝大家的容器生涯天天快乐,哈哈哈!