k8s 最简单的一主二从本地集群部署 并部署镜像(2、部署集群)

  • master节点
  • 方式一:
  • 方式二:
  • 报错解决及其他:
  • 端口占用
  • 重新加入节点
  • k8s版本和docker版本不兼容


master节点

master节点部署有两种方式

  1. 方式一:使用kubeadm工具直径命令部署master
  2. 方式二:运用k8s内置安装工具kubeadm拉取配置文件部署master(建议直接方式二!!!!!)

方式一:

kubeadm init 命令:
主要属性值:

  1. –apiserver-advertise-address=主机地址
  2. –image-repository:镜像仓库地址
  3. –kubernetes-version:k8s镜像版本
  4. –service-cidr:svc网络
  5. –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,原理是一样的。只是多了个配置文件。

方式二:

  1. 导出配置文件,并修改(最好创建一个文件夹然后在此文件夹下执行,方便管理)
    这里我在master主机的/usr/local/k8s/master_config 下面操作如下步骤(最好建立一个文件夹)
#初始化配置文件
 kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml

国内k8s镜像 k8s基础镜像_配置文件

  1. 修改配置文件
    主要要修改三个地方(当前版本),分别是master节点ip,镜像仓库地址和pod网络,这里的修改不能出错哈!!!废话不多下面开始修改配置文件:
#打开配置文件
 vim kubeadm.yml

这里是初始化的配置文件,和docker-compose有点像,需要修改三个地方,这里版本我就用的1.19.0这个版本,如果要用其他的版本这里也需要修改。
注意nodeRegistration下面的name属性是不是和你的主机的hosts一致,不一致的话说明你的hosts文件没有配置正确,或者说你的主机ip和你配置的hosts不一致,这里不一致是会导致部署master节点失败的!!

国内k8s镜像 k8s基础镜像_linux_02

#修改master主机ip(看自己的ip,如果ip和我设置的不一致的话)
 advertiseAddress:192.168.101.100
 #修改进行仓库地址(这里用的阿里的镜像地址)
 imageRepository: registry.aliyuncs.com/google_containers
 #在networking下面新增podSubnet
 podSubnet: "10.244.0.0/16"

如下是修改好的配置文件

国内k8s镜像 k8s基础镜像_国内k8s镜像_03

  1. 查看所需镜像细节,主要是查看版本(可跳过)
kubeadm config images list --config kubeadm.yml

国内k8s镜像 k8s基础镜像_linux_04

  1. 拉取镜像(这里可能需要一段时间,不要着急,有个WARNING警告,不理)
kubeadm config images pull --config kubeadm.yml

国内k8s镜像 k8s基础镜像_国内k8s镜像_05

  1. 镜像全部拉取成功后,安装主节点
kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log
 #参数:--upload-certs:自动分发证书 	后面是日志文件,保存安装细节,方便日后查看

国内k8s镜像 k8s基础镜像_国内k8s镜像_06


如果看到如上的效果,基本上结束对线,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

国内k8s镜像 k8s基础镜像_国内k8s镜像_07


国内k8s镜像 k8s基础镜像_kubernetes_08

然后在master上查看下node,再次提醒这个hosts文件,这里显示的应该是你修改的节点域名,一定不要错了

国内k8s镜像 k8s基础镜像_国内k8s镜像_09


这里节点状态全是NotReady是因为没有配置网络的问题,k8s需要配置容器网络CNI(Container Network Interface) ,只要提供一个标准的接口,就能为同样满足该协议的所有容器平台提供网络功,不然容器间无法互相通信。k8s的CNI插件可以选择flannel,calico,canal,weave。我现在试过的有两种方案:flannel和calico。

flannel目前我只能科学上网(如果有大神知道国flannel国内的镜像地址请分享下,谢谢),而且需要在所有机器上拉取flannel的docker镜像,配置比较繁琐。最常用的是flannel。

calico,无需梯子,只需要在master上操作即可,比较方便,而且通信效率最高,比较给力!

下一章介绍配置网络!!!!!!

报错解决及其他:

端口占用

如果执行了安装失败了,或者重复安装的话,会报端口占用的问题

国内k8s镜像 k8s基础镜像_国内k8s镜像_10


这时候需要重启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镜像 k8s基础镜像_国内k8s镜像_11

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