# kubeos-deploy **Repository Path**: weiy6/kubeos-deploy ## Basic Information - **Project Name**: kubeos-deploy - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-03-29 - **Last Updated**: 2024-09-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 准备工作 **k8s v1.24.0 containerd 1.6.6 runc 1.1.3** **为保证master节点有充足磁盘空间,在解压tar包后,需要先对`openEuler-22.03-LTS-SP1-x86_64.qcow2`镜像进行扩容** ```bash qemu-img resize openEuler-22.03-LTS-SP1-x86_64.qcow2 +20G ``` 1. 将tar包解压,从openEuler-22.03-LTS-SP1-x86_64.qcow2磁盘创建虚拟机 2. 扩容根分区,请根据实际情况修改磁盘名称,如将`/dev/sda`修改为`/dev/vda` ```bash fdisk /dev/sda p d n w resize2fs /dev/sda2 ``` 3. 将KubeOS-dependency文件夹(除虚拟机qcow2文件)上传至上步创建的虚拟机内 4. 进入到虚拟机内,设置hostname及ip,如下示例,relogin shell ```bash hostnamectl set-hostname master cat >> /etc/hosts << EOF 192.168.122.1 master 192.168.122.2 node1 192.168.122.3 node2 EOF ``` # 以下操作都是在虚拟机内 ## Containerd+k8s集群安装部署当前节点为master节点 进入`KubeOS-dependency`目录,执行`deploy.sh`脚本 ```bash cd KubeOS-dependency bash deploy.sh ``` ## KubeOS镜像制作 ```bash bash build-kubeos.sh ``` 制作完成后,`scripts`目录下会新增三个文件`system.img`, `system.qcow2`和`update.img` `system.qcow2`即为KubeOS node镜像 从`system.qcow2`磁盘创建虚拟机启动 ## Node节点加入集群 1. 启动后,修改hostname,在/etc/hosts内添加node和master节点的ip ```bash hostnamectl set-hostname node1 # vi /etc/hosts添加master和node ip地址 echo 1 > /proc/sys/net/ipv4/ip_forward ``` 2. (如果需要)上传离线容器镜像至`/persist`目录下,加载容器镜像。加入集群所需要的容器镜像列表: ```bash docker.io/calico/cni:v3.25.0 docker.io/calico/node:v3.25.0 k8s.gcr.io/kube-proxy:v1.24.0 k8s.gcr.io/pause:3.7 ``` ​可以拷贝images目录下的`load-images.sh`脚本至`/persist`目录下,使用该脚本加载镜像至`ctr -n k8s.io`命名空间下 ```bash bash load-images.sh ``` 3. 在master节点上,获取`kubeadm`加入集群命令 ```bash kubeadm token create --print-join-command ``` 4. 在node节点上执行步骤3返回的命令 ```bash mkdir -p /etc/kubernetes/manifests kubeadm join .... ``` ## 部署KubeOS os-operator和os-proxy os-operator和os-proxy为KubeOS实现原子化升级/回滚/配置的必要组件,部署方法如下 1. 在KubeOS镜像制作阶段,已经制作了两个容器镜像: `kubeos/kubeos-operator:1.0.5-4`和`kubeos/kubeos-proxy:1.0.5-4`,请根据实际情况对该镜像tag并push到镜像仓 2. 部署OS CRD及rbac配置 ```bash kubectl apply -f config/crd kubectl apply -f config/rbac ``` 3. 部署deployment和daemonset 打开`config/manager.yaml`,根据实际情况,修改operator和proxy的容器镜像地址,执行命令 ```bash kubectl apply -f config/manager.yaml ``` # FAQ 1. `kubeadm init`失败,出现如下报错 ```bash I0328 08:31:54.939136 1162 round_trippers.go:553] GET https://192.168.122.3:6443/healthz?timeout=10s 500 Internal Server Error in 3 milliseconds ``` `journalctl`查看kubelet日志出现如下类似报错 ```bash 1253 kubelet.go:2419] "Error getting node" err="node \"master\" not found" ``` 解决方法:此问题一般出现在设置hostname后没有重新登录shell,尝试重新登录shell(或者reboot)后再创建集群 2. KubeOS制作镜像后启动不了虚拟机 解决方法: 1. 确认虚拟机配置的引导模式和KubeOS镜像制作过程中的引导模式是否一致。KubeOS镜像制作脚本默认为UEFI引导。 2. `scripts/grub.cfg`文件内默认寻找`/dev/sda2`或者`/dev/sda3`磁盘,请根据实际情况更改此项。 ![image-20240329162319885](grub-modify.png)