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文件
- 修改主机名,以其中一台机器为例。
hostnamectl set-hostname openEuler-master sudo -i
- 配置主机名解析,编辑三台服务器的/etc/hosts文件。
vim /etc/hosts
- 在hosts文件中添加以下内容(IP+主机名)
10.20.172.190 openEuler-master m1 10.20.172.191 openEuler-node1 n1 10.20.172.192 openEuler-node2 n2
环境准备
- 关闭防火墙。
systemctl stop firewalld systemctl disable firewalld
- 禁用selinux。
setenforce 0
- 关闭系统swap。
swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab
- 网络配置,开启相应的转发机制。
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
- 生效规则。
modprobe overlay modprobe br_netfilter sysctl -p /etc/sysctl.d/kubernetes.conf
- 配置开机启动脚本。
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
- 在k8s.sh脚本中添加以下内容。
- 添加配置文件。
配置文件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
- 添加完成后启动服务。
- 配置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镜像
- 查看需要的系统镜像。
kubeadm config images list
注意对应的版本号,输出结果如图所示。
- 使用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
- 修改已下载的镜像标签。
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
- 删除旧镜像。
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
- 查看已拉取的镜像。
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正常运行
暂无评论内容