master节点
master节点部署有两种方式
- 方式一:使用kubeadm工具直径命令部署master
- 方式二:运用k8s内置安装工具kubeadm拉取配置文件部署master(建议直接方式二!!!!!)
方式一:
kubeadm init 命令:
主要属性值:
-
–apiserver-advertise-address=主机地址
-
–image-repository:镜像仓库地址
-
–kubernetes-version:k8s镜像版本
-
–service-cidr:svc网络
-
–pod-network-cidr:pod网络
kubeadm init --apiserver-advertise-address=master主机ip --image-repository registry.aliyuncs.com/google_containers --kubernetes-version k8s版本 --service-cidr=10.1.0.0/16 --pod-network-cidr=10.244.0.0/16
最后两个参数主要的作用的将不同主机的pod放在一个网络环境里面
这里方式一不推荐,管理起来不方便。直接使用方式2,原理是一样的。只是多了个配置文件。
方式二:
-
导出配置文件,并修改(最好创建一个文件夹然后在此文件夹下执行,方便管理)
这里我在master主机的/usr/local/k8s/master_config 下面操作如下步骤(最好建立一个文件夹)
#初始化配置文件 kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
-
修改配置文件
主要要修改三个地方(当前版本),分别是master节点ip,镜像仓库地址和pod网络,这里的修改不能出错哈!!!废话不多下面开始修改配置文件:
#打开配置文件 vim kubeadm.yml
这里是初始化的配置文件,和docker-compose有点像,需要修改三个地方,这里版本我就用的1.19.0这个版本,如果要用其他的版本这里也需要修改。
注意nodeRegistration下面的name属性是不是和你的主机的hosts一致,不一致的话说明你的hosts文件没有配置正确,或者说你的主机ip和你配置的hosts不一致,这里不一致是会导致部署master节点失败的!!#修改master主机ip(看自己的ip,如果ip和我设置的不一致的话) advertiseAddress:192.168.101.100 #修改进行仓库地址(这里用的阿里的镜像地址) imageRepository: registry.aliyuncs.com/google_containers #在networking下面新增podSubnet podSubnet: "10.244.0.0/16"
如下是修改好的配置文件
-
查看所需镜像细节,主要是查看版本(可跳过)
kubeadm config images list --config kubeadm.yml
-
拉取镜像(这里可能需要一段时间,不要着急,有个WARNING警告,不理)
kubeadm config images pull --config kubeadm.yml
-
镜像全部拉取成功后,安装主节点
kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log #参数:--upload-certs:自动分发证书 后面是日志文件,保存安装细节,方便日后查看
如果看到如上的效果,基本上结束对线,master节点就基本上ok了,按照提示上说的执行下如上的命令mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config #非root用户执行,root用户执行也可以,可以但没必要 sudo chown $(id -u):$(id -g) $HOME/.kube/config
一样的按照上面的提示,在每个node节点上执行下面框出来的命令,每个人的token不一样,不要复制我的!!
kubeadm join 192.168.101.100:6443 --token abcdef.0123456789abcdef \--discovery-token-ca-cert-hash sha256:0fb7869b722e1279f5d6f99bacd14ca781222831ec0507ed3921df0a6041deb3
然后在master上查看下node,再次提醒这个hosts文件,这里显示的应该是你修改的节点域名,一定不要错了
这里节点状态全是NotReady是因为没有配置网络的问题,k8s需要配置容器网络CNI(Container Network Interface) ,只要提供一个标准的接口,就能为同样满足该协议的所有容器平台提供网络功,不然容器间无法互相通信。k8s的CNI插件可以选择flannel,calico,canal,weave。我现在试过的有两种方案:flannel和calico。
flannel目前我只能科学上网(如果有大神知道国flannel国内的镜像地址请分享下,谢谢),而且需要在所有机器上拉取flannel的docker镜像,配置比较繁琐。最常用的是flannel。
calico,无需梯子,只需要在master上操作即可,比较方便,而且通信效率最高,比较给力!
下一章介绍配置网络!!!!!!
报错解决及其他:
端口占用
如果执行了安装失败了,或者重复安装的话,会报端口占用的问题
这时候需要重启kubeadm,一般都能解决问题
kubeadm reset
重新加入节点
其他节点加入master:只要在其他node服务器上安装了kubeadm,kubectl,kubelet这三个工具,使用master中提示的kubeadm join命令就可以了
token和哈希两个值如果过期或者发生了变化,可以使用如下解决方案
新的node主机必须安装kubeadm,kubectl,kubelet这三个工具,安装在第一章基础环境有写
##在master上重新生成token:
kubeadm token create
##列出token
kubeadm token list | awk -F" " '{print $1}' |tail -n 1
##获取哈希
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^ .* //'
##加入master
kubeadm join master主机的ip:6443 --token 新token值 --discovery-token-ca-cert-hash sha256:新哈希值
k8s版本和docker版本不兼容
出现这个问题一般都是k8s版本过于高,当前博客使用的是k8s-1.19.0版本,需要修改kubeadm,kubectl,kubelet版本,最好修改为1.19.0的版本.
请依次执行以下命令
重置集群:
kubeadm reset
卸载k8s命令工具:
yum erase -y kubelet kubectl kubeadm kubernetes-cni
下载指定版本(1.19.0)的k8s工具:
yum install kubeadm-1.19.0 kubectl-1.19.0 kubelet-1.19.0