【从零开始/亲测国内外均可】基于阿里云Ubuntu的kubernetes(k8s)主从节点分布式集群搭建——分步详细攻略v1.11.3【主从节点篇】

~本安装教程的目录 共3节 均为原创 穿在请注明作者及出处 感谢~

1.准备工作篇

2.主从节点篇【本篇】

3.节点清空篇

~ -----------~

 

接上一节,我们已经在全部的节点上安装了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 命令

 

感谢您读到这里!祝大家的容器生涯天天快乐,哈哈哈!

 

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值