初始化(Master节点上操作):
可以先用“kubeadm —help”先了解一下kubeadm命令
Available Commands:
alpha # 处于测试中不太完善的命令
config # 显示当前配置
init # 初始化集群
join # 各Node节点加入集群中时使用
reset # 每个节点都可以用,把配置还原到最初始的状态
upgrade # 升级集群的版本
可以用“kubeadm config print init-defaults”命令来看一下初始化配置参数
重要参数解读:
[root@ck-master ~]# kubeadm config print init-defaults # 下面只截取部分配置
imageRepository: k8s.gcr.io # 默认加载镜像的仓库,需要梯子才能访问,如果知道国内别的仓库有需 要的镜像,初始化时可以手动指定仓库地址
kind: ClusterConfiguration kubernetesVersion: v1.18.0 # k8s版本,这是初始化会加载的配置,如果与 你预期的版本不符,自行修改
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12 # Service网络默认网段
scheduler: { }
# 至于Pod网络间通讯,k8s只提供CNI,真正实现网络通信需要借助第三方插件,如flannel / calico,两者各有优劣,flannel的默认地址是10.244.0.0/16,calico的默认地址是192.168.0.0/16,不使用默认地址也可以,只要保证部署网路插件时yaml中指定的网段与k8s部署时指定的Pod网络网段一致就可
确保这两个值为1
“cat /proc/sys/net/bridge/bridge-nf-call-iptables”
“cat /proc/sys/net/bridge/bridge-nf-call-ip6tables”
修改命令为:
“sysctl -w net.bridge.bridge-nf-call-iptables=1”
“sysctl -w net.bridge.bridge-nf-call-ip6tables=1”
“rpm -ql kubelet”查看一些相关配置文件
“vim /etc/sysconfig/kubelet”用以编辑kubelet文件
“KUBELET_EXTRA_ARGS=—fail-swap-on=false”
“KUBELET_NETWORK_ARGS=—network-plugin=cni —cni-conf-dir=/etc/cni/ —cni-bin-dir=/opt/cni/bin”
这一步可做可不做,如果你在后面的初始化没有问题,那可以不做,这是为了避免swap开着导致初始化失败,我们在之前的禁用swap已紧做过了
“kubeadm init —kubernetes-version=v1.23.5 —service-cidr=10.96.0.0/12 —image-repository=registry.aliyuncs.com/google_containers —pod-network-cidr=10.244.0.0/16 —ignore-preflight-errors=all”用初始化命令,并指定一些初始化参数去初始化master(注意格式),这一步可能需要一点时间
root@ck-master ~]# kubeadm init
—apiserver-advertise-address=192.168.2.24 \ # kube-apiserver的监听地址。
—image-repository=registry.aliyuncs.com/google_containers \ # 指定init过程中拉取镜像的仓库。
—kubernetes-version=v1.18.0 \ # 指定kubernetes的版本。
—service-cidr=10.96.0.0/12 \ # 指定service资源的网段。
—pod-network-cidr=10.244.0.0/16 \ # 指定Pod资源的网段。
—ignore-preflight-errors=all # 忽略前置检查中出现的错误,被忽略的错误会显示为警告信息
PS:如果初始化过程出错,可以使用kubeadm reset命令删除初始化过程产生的文件,重置到初始状态。上面执行结果会返回一些重要的信息:
Your Kubernetes control-plane has initialized successfully!
如果你在初始化过程中遇到如图中的报错信息,这时候你去网上搜索,你会发现全是让你把swap关掉的解决方案,但其实不是的,因为我们在开始之前就关闭了,其实是因为docker.service导致的
解决方案为如下(如果你严格按照我之前在安装dcoker中的进行,就不会有这个问题):
“vim /usr/lib/systemd/system/docker.service”去修改一下docker.service配置文件
“—exec-opt native.cgroupdriver=systemd”随后在指定位置加入指定语句
“systemctl daemon-reload”重启一下
解决方案链接:https://blog.csdn.net/qq_29349143/article/details/120872330
再执行一次“kubeadm init —kubernetes-version=v1.23.5 —service-cidr=10.96.0.0/12 —image-repository=registry.aliyuncs.com/google_containers —pod-network-cidr=10.244.0.0/16 —ignore-preflight-errors=all”,可以看到,初始化完成
这一串秘钥字符需要特别留意与记录,因为后面要靠这个,让node加入集群
kubeadm join 10.1.10.128:6443 —token u6d701.s74jf8bj0zfhlhkd \
—discovery-token-ca-cert-hash sha256:33c1b20682d8816924492dab11490ec0d369c741d5dbbd7a420fb07e5cca7289
用“systemctl status kubelet.service”查看一下kubelet服务状态,可以看到,已经正常启动
随后根据他的建议,把这三步执行一下
“mkdir -p $HOME/.kube”
“cp -i /etc/kubernetes/admin.conf $HOME/.kube/config”
“chown $(id -u):$(id -g) $HOME/.kube/config”
避免后续再出现不知名故障