- 操作系统:Ubuntu 24.04.1 LTS
- 容器运行时:containerd://1.7.12
# 此内容为部署完的k8s集群信息
root@k8s-kubeovn:~# kubectl get node -owide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8s-kubeovn Ready control-plane 3h55m v1.31.2 192.168.8.150 <none> Ubuntu 24.04 LTS 6.8.0-35-generic containerd://1.7.12
1. 安装容器运行时
1. 安装containerd,并配置开机自启动
apt install containerd #默认同时安装runc
apt install ipvsadm # 安装ipvs
2. 生成containerd配置文件
mkdir /etc/containerd
containerd config default > /etc/containerd/config.toml
1. 配置 systemd cgroup 驱动
结合 runc 使用 systemd cgroup 驱动,在 /etc/containerd/config.toml 中设置:
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
2. 修改sandbox_image镜像地址
sandbox_image = "k8s.lixx.cn/pause:3.10"
重启containerd
systemctl restart containerd
systemctl enable containerd
2. 安装前配置
1. 编辑hosts文件,添加本机host地址
root@k8s-kubeovn:~# cat /etc/hosts
127.0.0.1 localhost
192.168.8.150 k8s-kubeovn
2. 手动启用 IPv4 数据包转发
# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF
# 应用 sysctl 参数而不重新启动
sudo sysctl --system
# 验证
sysctl net.ipv4.ip_forward
3. 关闭防火墙
ufw disable
sudo systemctl stop apparmor
sudo systemctl disable apparmor
4. 关闭swap
如果 kubelet 未被正确配置使用交换分区,则你必须禁用交换分区。 例如,sudo swapoff -a 将暂时禁用交换分区。要使此更改在重启后保持不变,请确保在如 /etc/fstab、systemd.swap 等配置文件中禁用交换分区,具体取决于你的系统如何配置
修改/etc/fstab配置文件,注释最后一行(和swap有关的一行)并重启操作系统。
3. 安装 k8s
1. 配置apt源,下载 kubelet kubeadm kubectl
如果下载慢可以更换阿里云镜像源或清华镜像源,修改地址即可。
以下指令适用于 Kubernetes 1.31.
- 更新
apt
包索引并安装使用 Kubernetesapt
仓库所需要的包:sudo apt-get update # apt-transport-https 可能是一个虚拟包(dummy package);如果是的话,你可以跳过安装这个包 sudo apt-get install -y apt-transport-https ca-certificates curl gpg
- 下载用于 Kubernetes 软件包仓库的公共签名密钥。所有仓库都使用相同的签名密钥,因此你可以忽略URL中的版本:
# 如果 `/etc/apt/keyrings` 目录不存在,则应在 curl 命令之前创建它,请阅读下面的注释。 # sudo mkdir -p -m 755 /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
说明:
在低于 Debian 12 和 Ubuntu 22.04 的发行版本中,/etc/apt/keyrings
默认不存在。 应在 curl 命令之前创建它。
- 添加 Kubernetes
apt
仓库。 请注意,此仓库仅包含适用于 Kubernetes 1.31 的软件包; 对于其他 Kubernetes 次要版本,则需要更改 URL 中的 Kubernetes 次要版本以匹配你所需的次要版本 (你还应该检查正在阅读的安装文档是否为你计划安装的 Kubernetes 版本的文档)。# 此操作会覆盖 /etc/apt/sources.list.d/kubernetes.list 中现存的所有配置。 echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
- 更新
apt
包索引,安装 kubelet、kubeadm 和 kubectl,并锁定其版本:sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl # 查看各个组件版本 kubectl version --client kubelet --version kubeadm version systemctl restart kubelet systemctl enable kubelet
2. 配置crictl
- 创建 /etc/crictl.yaml 文件
cat <<EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 2
debug: false
pull-image-on-create: false
EOF
- 验证
root@k8s-kubeovn:~# crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD
3. kubeadm初始化
- 使用本人自建的镜像仓库,或者使用阿里云的
registry.aliyuncs.com/google_containers
# 查看要下载哪些镜像
kubeadm config images list
# 执行
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address 192.168.8.150 --image-repository k8s.lixx.cn
- apiserver-advertise-address: 服务器地址
- image-repository:用阿里云镜像快速下载
- 执行成功结果如下
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 172.8.8.16:6443 --token 8on0q5.vhcyalu0mognziwd \
--discovery-token-ca-cert-hash sha256:3360d57313f4a51f2ce3896a2af503f41fdcd2342a2d8fd74e07522945db922b
#执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
4. 安装cni插件 kube-ovn
去除节点上的污点,允许 kube-ovn-pinger 调度到该节点
kubectl taint nodes k8s-kubeovn node-role.kubernetes.io/control-plane:NoSchedule-
下载安装脚本
wget https://raw.githubusercontent.com/kubeovn/kube-ovn/release-1.12/dist/images/install.sh
修改配置参数
使用编辑器打开脚本,并修改下列变量为预期值:
REGISTRY="hub.lixx.cn/kubeovn" # 镜像仓库地址 默认"kubeovn"
VERSION="v1.12.28" # 镜像版本/Tag
POD_CIDR="10.16.0.0/16" # 默认子网 CIDR 不要和 SVC/NODE/JOIN CIDR 重叠
SVC_CIDR="10.96.0.0/12" # 需要和 apiserver 的 service-cluster-ip-range 保持一致
JOIN_CIDR="100.64.0.0/16" # Pod 和主机通信网络 CIDR,不要和 SVC/NODE/POD CIDR 重叠
LABEL="node-role.kubernetes.io/master" # 部署 OVN DB 节点的标签
IFACE="" # 容器网络所使用的的宿主机网卡名,如果为空则使用 Kubernetes 中的 Node IP 所在网卡
TUNNEL_TYPE="geneve" # 隧道封装协议,可选 geneve, vxlan 或 stt,stt 需要单独编译 ovs 内核模块
可使用正则表达式来匹配网卡名,例如 IFACE=enp6s0f0,eth.*
。
执行安装脚本
bash install.sh
等待安装完成。
root@k8s-kubeovn:~# kubectl get po -owide -A
kube-system coredns-7d54cd9f-4sdjp 1/1 Running 0 60m 10.16.0.2 k8s-kubeovn <none> <none>
kube-system coredns-7d54cd9f-q52dz 1/1 Running 1 (61m ago) 62m 10.16.0.4 k8s-kubeovn <none> <none>
kube-system etcd-k8s-kubeovn 1/1 Running 7 (61m ago) 3h55m 192.168.8.150 k8s-kubeovn <none> <none>
kube-system kube-apiserver-k8s-kubeovn 1/1 Running 7 (61m ago) 3h55m 192.168.8.150 k8s-kubeovn <none> <none>
kube-system kube-controller-manager-k8s-kubeovn 1/1 Running 7 (61m ago) 3h55m 192.168.8.150 k8s-kubeovn <none> <none>
kube-system kube-ovn-cni-kmwsc 1/1 Running 2 (61m ago) 72m 192.168.8.150 k8s-kubeovn <none> <none>
kube-system kube-ovn-controller-54c97bf4cd-vskdc 1/1 Running 2 (61m ago) 72m 192.168.8.150 k8s-kubeovn <none> <none>
kube-system kube-ovn-monitor-59579846b7-fsf8r 1/1 Running 2 (61m ago) 72m 192.168.8.150 k8s-kubeovn <none> <none>
kube-system kube-ovn-pinger-769pc 1/1 Running 0 59m 10.16.0.5 k8s-kubeovn <none> <none>
kube-system kube-proxy-hdxbw 1/1 Running 7 (61m ago) 3h55m 192.168.8.150 k8s-kubeovn <none> <none>
kube-system kube-scheduler-k8s-kubeovn 1/1 Running 7 (61m ago) 3h55m 192.168.8.150 k8s-kubeovn <none> <none>
kube-system ovn-central-664c6d577-6tx9g 1/1 Running 2 (61m ago) 73m 192.168.8.150 k8s-kubeovn <none> <none>
kube-system ovs-ovn-kxcm4 1/1 Running 2 (61m ago) 73m 192.168.8.150 k8s-kubeovn <none> <none>
评论