openEuler+kubernetes v1.29+iSulad 集群初始化部署

openEuler+kubernetes v1.29+iSulad 集群初始化部署

openEuler+kubernetes v1.29+iSulad 集群初始化部署

准备集群服务器

需准备至少3台openEuler机器,建议在openEuler-24.03版本运行。下表为示例搭建机器信息,仅供参考。

主机名 IP 系统版本 角色 组件
openEuler-master 10.20.172.190 openEuler 22.03 LTS 控制节点 iSulad/k8s
openEuler-node1 10.20.172.191 openEuler 22.03 LTS 工作节点1 iSulad/k8s
openEuler-node2 10.20.172.192 openEuler 22.03 LTS 工作节点2 iSulad/k8s

修改host文件

  1. 修改主机名,以其中一台机器为例。
    hostnamectl set-hostname openEuler-master
    sudo -i
    
  2. 配置主机名解析,编辑三台服务器的/etc/hosts文件。
    vim /etc/hosts
    
  3. 在hosts文件中添加以下内容(IP+主机名)
    10.20.172.190 openEuler-master m1
    10.20.172.191 openEuler-node1 n1
    10.20.172.192 openEuler-node2 n2
    

环境准备

  1. 关闭防火墙。
    systemctl stop firewalld
    systemctl disable firewalld
    
  2. 禁用selinux。
    setenforce 0
    
  3. 关闭系统swap。
    swapoff -a
    sed -ri 's/.*swap.*/#&/' /etc/fstab
    
  4. 网络配置,开启相应的转发机制。
    cat > /etc/sysctl.d/kubernetes.conf <<EOF
    net.bridge.bridge-nf-call-iptables = 1
    net.ipv4.ip_forward = 1
    net.bridge.bridge-nf-call-ip6tables = 1
    vm.swappiness=0
    EOF
    
  5. 生效规则。
    modprobe overlay
    modprobe br_netfilter
    sysctl -p /etc/sysctl.d/kubernetes.conf
    
  6. 配置开机启动脚本。
    vim /etc/init.d/k8s.sh
    
    • 在k8s.sh脚本中添加以下内容。
      #!/bin/sh
      modprobe br_netfilter
      sysctl -w net.bridge.bridge-nf-call-ip6tables = 1
      sysctl -w net.bridge.bridge-nf-call-iptables = 1
      
    • 改变脚本权限。
      chmod +x /etc/init.d/k8s.sh
      
  7. 添加配置文件。
    配置文件br_netfilte.service应该放在systemd的service目录,一般在/usr/lib/systemd/system。

    vim /usr/lib/systemd/system/br_netfilte.service
    
    [Unit]
    Description=To enable the core module br_netfilter when reboot
    After=default.target
    [Service]
    ExecStart=/etc/init.d/k8s.sh //可以自定义
    [Install]
    WantedBy=default.target
    
    • 添加完成后启动服务。
      systemctl daemon-reload
      systemctl enable br_netfilte.service
      
  8. 配置sysctl。
    sed -i "s/net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/g" /etc/sysctl.conf
    sed -i 12a\vm.swappiness=0 /etc/sysctl.conf
    

安装CNI+iSulad

安装jq

dnf install -y jq

构建CNI的plugin

mkdir CNI
cd CNI 
建立netconf文件以描述网络
[root@HWCLOUD CNI]# mkdir -p /etc/cni/net.d
[root@HWCLOUD CNI]# cat >/etc/cni/net.d/10-mynet.conf <<EOF
{
	"cniVersion": "0.2.0",
	"name": "mynet",
	"type": "bridge",
	"bridge": "cni0",
	"isGateway": true,
	"ipMasq": true,
	"ipam": {
		"type": "host-local",
		"subnet": "10.22.0.0/16",
		"routes": [
			{ "dst": "0.0.0.0/0" }
		]
	}
}
EOF

[root@HWCLOUD CNI]# cat >/etc/cni/net.d/99-loopback.conf <<EOF
{
	"cniVersion": "0.2.0",
	"name": "lo",
	"type": "loopback"
}
EOF
构建plugin

如果没有安装go,则先安装


wget https://dl.google.com/go/go1.23.1.linux-amd64.tar.gz
tar -zxvf go1.23.1.linux-amd64.tar.gz -C /usr/local
vim /etc/profile

#在/etc/profile中添加以下两句
export GOROOT=/usr/local/go
export PATH=$PATH:$GOROOT/bin

source /etc/profile

git clone https://github.com/containernetworking/plugins.git
cd plugins/
./build_linux.sh 
mkdir -p /opt/cni/bin
cp ./bin/* /opt/cni/bin/

至此CNI安装完毕

安装iSulad

dnf install -y iSulad

对iSulad配置文件/etc/isulad/daemon.json做如下修改

设”network-plugin”为”cni”。

[root@HWCLOUD iSula]# vim /etc/isulad/daemon.json 


{
    "group": "isula",
    "default-runtime": "lcr",
    "graph": "/var/lib/isulad",
    "state": "/var/run/isulad",
    "engine": "lcr",
    "log-level": "ERROR",
    "pidfile": "/var/run/isulad.pid",
    "log-opts": {
        "log-file-mode": "0600",
        "log-path": "/var/lib/isulad",
        "max-file": "1",
        "max-size": "30KB"
    },
    "log-driver": "stdout",
    "container-log": {
        "driver": "json-file"
    },
    "hook-spec": "/etc/default/isulad/hooks/default.json",
    "start-timeout": "2m",
    "storage-driver": "overlay2",
    "storage-opts": [
        "overlay2.override_kernel_check=true"
    ],
    "registry-mirrors": [
        "hub.lony.win",
		"docker.io"
    ],
    "insecure-registries": [
		"k8s.lony.win",
		"k8s-gcr.lony.win"
    ],
    "pod-sandbox-image": "k8s.lony.win/pause:3.9",
    "native.umask": "secure",
    "network-plugin": "cni",
    "cni-bin-dir": "/opt/cni/bin",
    "cni-conf-dir": "/etc/cni/net.d",
    "image-layer-check": false,
    "use-decrypted-key": false,
	"enable-cri-v1": true,
    "insecure-skip-verify-enforce": false,
    "cri-runtimes": {
        "kata": "io.containerd.kata.v2"
    }
}

注意上述文件中:

“cni-bin-dir”的默认值即为”/opt/cni/bin”;
“cni-conf-dir”的默认值即为”/etc/cni/net.d”,我们上一步安装CNI时即是按照这样的目录结构安排的。

“enable-cri-v1” 由于需要使用CRI v1,所以需要先使能。

仓库地址有所修改。

“default-runtime”: “lcr” 默认runc改为了lcr,lcr是用于根据 OCI 规范生成和运行容器的 CLI 工具。它基于liblxc​,采用C​语言编写,并可以被容器引擎iSulad使用。iSulad通过 dlopen​ 调用lcr​中定义的函数。

重启iSulad服务

[root@HWCLOUD iSula]# systemctl restart isulad

安装 kubeadm、kubelet 和 kubectl

你需要在每台机器上安装以下的软件包:
kubeadm​:用来初始化集群的指令。
kubelet​:在集群中的每个节点上用来启动 Pod 和容器等。
kubectl​:用来与集群通信的命令行工具。
以下是1.29版本的仓库,如果要更换版本只需更新v版本号即可

cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF

yum clean all && yum makecache
# 指定版本
yum install -y kubelet-1.29.4 kubeadm-1.29.4 kubectl-1.29.4 --disableexcludes=kubernetes

# 不指定版本
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

systemctl enable --now kubelet

加载isulad镜像

  1. 查看需要的系统镜像。
    kubeadm config images list
    

注意对应的版本号,输出结果如图所示。

image

  1. 使用isula拉取所需镜像。

    说明 : 以下所下载的镜像版本均为示例,具体版本号以上条命令返回结果为准,下同。

    isula pull k8s.lony.win/kube-apiserver:v1.29.11
    isula pull k8s.lony.win/kube-controller-manager:v1.29.11
    isula pull k8s.lony.win/kube-scheduler:v1.29.11
    isula pull k8s.lony.win/kube-proxy:v1.29.11
    isula pull k8s.lony.win/coredns/coredns:v1.11.1
    isula pull k8s.lony.win/pause:3.9
    isula pull k8s.lony.win/etcd:3.5.16-0
    
  2. 修改已下载的镜像标签。
    isula tag k8s.lony.win/kube-apiserver:v1.29.11 registry.k8s.io/kube-apiserver:v1.29.11
    isula tag k8s.lony.win/kube-controller-manager:v1.29.11 registry.k8s.io/kube-controller-manager:v1.29.11
    isula tag k8s.lony.win/kube-scheduler:v1.29.11 registry.k8s.io/kube-scheduler:v1.29.11
    isula tag k8s.lony.win/kube-proxy:v1.29.11 registry.k8s.io/kube-proxy:v1.29.11
    isula tag k8s.lony.win/coredns/coredns:v1.11.1 registry.k8s.io/coredns/coredns:v1.11.1
    isula tag k8s.lony.win/pause:3.9 registry.k8s.io/pause:3.9
    isula tag k8s.lony.win/etcd:3.5.16-0 registry.k8s.io/etcd:3.5.16-0
    
  3. 删除旧镜像。
    isula rmi k8s.lony.win/kube-apiserver:v1.29.11
    isula rmi k8s.lony.win/kube-controller-manager:v1.29.11
    isula rmi k8s.lony.win/kube-scheduler:v1.29.11
    isula rmi k8s.lony.win/kube-proxy:v1.29.11
    isula rmi k8s.lony.win/coredns/coredns:v1.11.1
    isula rmi k8s.lony.win/pause:3.9
    isula rmi k8s.lony.win/etcd:3.5.16-0
    
  4. 查看已拉取的镜像。
    isula images
    

初始化master节点

执行如下命令初始化master节点:

kubeadm init --kubernetes-version v1.29.11 --cri-socket=/var/run/isulad.sock --pod-network-cidr=10.244.0.0/16

//以上参数的解释
kubernetes-version 为当前安装的版本
cri-socket 指定引擎为isulad
pod-network-cidr 指定pod分配的ip段

根据系统提示输入如下命令:

# mkdir -p $HOME/.kube
# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# sudo chown $(id -u):$(id -g) $HOME/.kube/config

初始化成功后,复制最后两行内容,在node节点上执行刚刚复制的命令,将节点加入master集群,如未记录上述命令可通过如下命令生成:

# kubeadm token create --print-join-command

node节点加入集群

kubeadm join 10.20.172.190:6443 --token n90z86.aqdz0c5r59u3qb80 \
        --discovery-token-ca-cert-hash sha256:904443e6efd26efbfbc90b0c3471cff0d0b0c688ded261b21106c32d88499176 \
        --cri-socket=/var/run/isulad.sock

在加入集群时,需要指定cri, –cri-socket=/var/run/isulad.sock

安装calico网络插件

Kubernetes 定义了 CNI 标准,有很多网络插件,这里选择最常用的 calico

# 直接下载到机器进行解压
wget -O calico.zip "https://bucket.aigan.cc/%E9%95%9C%E5%83%8F/calico.zip"

unzip calico.zip

由于国内无法正常拉取docker镜像,因此需要手动导入

# 进入解压路径
cd calico

# 解压calico-images.tar.gz
tar -zxvf calico-images.tar.gz

# 使用ctr -n k8s.io images import导入
isula load -i calico-images/calico-kube-controllers-v3.26.3.tar
isula load -i calico-images/calico-cni-v3.26.3.tar
isula load -i calico-images/calico-node-v3.26.3.tar 
isula load -i calico-images/calico-typha-v3.26.3.tar

随后执行:kubectl apply -f calico-typha.yaml

最后可以看到node和pod正常运行

image​​image

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容