
使用isula作为子节点加入kubernetes集群
本教程使用的是openEuler提供的kubernetes版本,isula才可以加入到kubernetes集群,其他版本的kubernetes可能无法支持isula。openEuler22.03LTS版本提供的kubernetes安装版本为1.20.2,笔者试过使用kubernetes官方的1.20.2版本,docker引擎能加入到kubernetes集群,唯独isula不行,不知道是什么原因,也
前置条件
必须使用openEuler提供的kubernetes版本
本教程使用的是openEuler提供的kubernetes版本,isula才可以加入到kubernetes集群,其他版本的kubernetes可能无法支持isula。openEuler22.03LTS版本提供的kubernetes安装版本为1.20.2,笔者试过使用kubernetes官方的1.20.2版本,docker引擎能加入到kubernetes集群,唯独isula不行,不知道是什么原因,也可能需要特殊配置,总之,笔者没有成功过。
保证使用的kubernetes版本相同或者接近
最好不要出现api版本有差异的情况,否则也有可能导致兼容性问题,从而无法正常组成集群。
安装必要的软件包
在openEuler系统上,安装以下软件包
dnf install -y kubernetes kubernetes-kubeadm kubernetes-kubelet kubernetes-cni
dnf install -y iSulad
安装crictl
由于使用kubeadm加入集群会使用crictl进行检查,所以需要安装crictl。这里使用crictl v1.21.0,此版本接近 kubernetes1.20.2,是笔者验证了可用的版本。当然你也可以想办法跳过kubeadm的检查流程。
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.21.0/crictl-v1.21.0-linux-amd64.tar.gz
tar xvf crictl-v1.21.0-linux-amd64.tar.gz -C /usr/bin
如果你的目标节点是其他架构的,如arm64、riscv64,则需要自行用go交叉编译源码
配置必要参数
创建目录和cni软链接
创建目录,避免由于没有目录而出现kubelet启动失败的问题。创建软链接,因为kubernetes-cni安装的cni目录,不是kubernetes cni插件默认的目录。
mkdir -p /opt/cni /etc/kubernetes/manifests
ln -s /usr/libexec/cni/ /opt/cni/bin
配置isula参数并重启服务
vi /etc/isulad/daemon.json
修改pod-sandbox-images字段内容,这里我填写了阿里云的镜像pause容器地址,你可以根据需要自行改动
"pod-sandbox-image": "registry.aliyuncs.com/google_containers/pause:3.2"
CNI 网络配置
需要配置CNI网络,如果不配置,创建的pod将会无法获取ip地址
在/etc/isulad/daemon.json
中配置isulad
:
"network-plugin": "cni",
"cni-bin-dir": "/opt/cni/bin",
"cni-conf-dir": "/etc/cni/net.d",
重启isula服务
systemctl restart isulad
加入集群
导出kubernetes join配置参数
kubeadm config print join-defaults > kubeadm-join-defaults.yaml
修改kubeadm-join-defaults.yaml中的参数
vi kubeadm-join-defaults.yaml
apiServerEndpoint修改为master节点的ip,token修改为master节点的token,tlsBootstrapToken修改为master节点的token,新增caCertHashes字段,其值修改为master节点提供的加入节点必须的hash值,最后criSocket需要修改为/var/run/isulad.sock。完整参数如下。
apiVersion: kubeadm.k8s.io/v1beta2
caCertPath: /etc/kubernetes/pki/ca.crt
discovery:
bootstrapToken:
apiServerEndpoint: 192.168.12.239:6443
token: abcdef.0123456789abcdef
unsafeSkipCAVerification: true
caCertHashes: [sha256:099ac7a996d5a8bbbdded90a7130585e188a4da6bf0055d2d195536bfa741c52]
timeout: 5m0s
tlsBootstrapToken: abcdef.0123456789abcdef
kind: JoinConfiguration
nodeRegistration:
criSocket: /var/run/isulad.sock
name: openeuler-node
taints: null
加入集群
kubeadm join --config kubeadm-join-defaults.yaml
成功后的效果如下
常见问题
flannel组件处于CrashLoopBackOff状态
是init时没有加--pod-network-cidr参数
忘记了添加 podSubnet字段
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16 # Pod 网段,flannel插件需要使用这个网段
flannel安装完成,却显示Not Ready
sudo ls /opt/cni/bin
显示只有flannel一个bin文件,说明缺少其他必要的文件
编译生成 CNI 插件的二进制文件,并将该二进制文件复制到 /opt/cni/bin
$ git clone https://github.com/containernetworking/plugins.git
$ cd plugins && ./build_linux.sh
$ cd ./bin && ls
bandwidth bridge dhcp firewall flannel ...
isula所在的节点仍然显示Not Ready
发现报错
Unable to read config path "/etc/kubernetes/manifests": path does not exist, ignoring
手动创建该路径即可
多看 kubelet跟isulad的日志
sudo journalctl -u kubelet
重装isulad就好了
记得必须要配置isulad
在/etc/isulad/daemon.json
中先配置pod-sandbox-image
:
"pod-sandbox-image": "registry.aliyuncs.com/google_containers/pause:3.2"
kubadm join时出现奇怪报错
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
error execution phase preflight: unable to fetch the kubeadm-config ConfigMap: failed to get config map: Unauthorized
To see the stack trace of this error execute with --v=5 or higher
此时需要及时修改join config中的token,所有的token都需要改
更多推荐










所有评论(0)