# k8s-in-mageedu-cloud **Repository Path**: mageedu/k8s-in-mageedu-cloud ## Basic Information - **Project Name**: k8s-in-mageedu-cloud - **Description**: 马哥教育云实验平台专用的实验素材~ - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 3 - **Created**: 2023-07-26 - **Last Updated**: 2025-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Kubernetes实践素材和案例 说明:部署配置文件示例,默认从[马哥教育的Image注册表](https://registry.magedu.com)服务上下载所需要的各Image,仅适用于在[马哥教育云端实验平台](https://cloud.magedu.com:8443/)上部署使用。 - flannel目录:flannel相关的部署配置文件 - ingress-nginx目录:部署ingress-nginx相关的部署配置文件 - csi-driver-nfs目录:nfs-server和csi-driver-nfs相关的部署配置文件 - kuboard目录:kuboard相关的部署配置文件 ## 部署Kubernetes集群 前提: 1、为各节点确定要使用的主机名,对应修改各主机的主机名,并在各节点通过/etc/hosts文件设置其名称解析; 2、修改配置文件kubeadm-init-config.yaml,将关于控制平面第一个节点的主机名和IP地址完成对应修改; 提示:如下步骤中,如果registry.magedu.com/google_containers仓库中没有可用的Image,则可以将之替换为registry.aliyuncs.com进行。 ### 部署过程 第一步,列出Image,使用registry.magedu.com/google_containers作为Image Registry ``` kubeadm config images list --image-repository=registry.magedu.com/google_containers ``` > 提示:如需要指定Kubernetes的版本号,可以在如上和下面第二步的命令上,额外使用“--kubernetes-version VERSION”选项进行指定。 第二步,下载各Image,使用registry.magedu.com/google_containers作为Image Registry ``` kubeadm config images pull --cri-socket unix:///run/cri-dockerd.sock --image-repository=registry.magedu.com/google_containers ``` 第三步,基于现在的pause image生成“registry.k8s.io/pause:3.6“标签。 ``` docker image tag registry.magedu.com/google_containers/pause:3.9 registry.k8s.io/pause:3.6 ``` 第四步,运行脚本,生成kubeadm init的配置文件 确认generate-init-config.sh脚本文件中各配置已经适配到当前环境,尤其是控制平面第一个节点的主机名和IP地址,以及API Server的接入端点等; 确认完成后运行脚本,即可生成配置文件kubeadm-init-config.yaml ; ``` bash generate-init-config.sh ``` > 提示:脚本在马哥教育教育云端实验平台名为“ubuntu-22.04-with-kubeadm-amd64”的KVM Image中直接附带,用户以root用户的身份登录后,在$HOME下的k8s-inst/目录下可找到所需要的脚本和模板文件。 第五步,运行如下命令,初始化控制平面的第一个节点; ``` kubeadm init --config ./kubeadm-init-config.yaml --upload-certs ``` 第六步,按上面的初始化命令输出的提示,复制Kubernetes管理员的认证配置。 ``` mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 第七步,部署网络插件,以flannel为例; ``` kubectl apply -f https://gitee.com/mageedu/k8s-in-mageedu-cloud/raw/master/flannel/kube-flannel.yml ``` 第八步,(如何需要)按kubeadm init命令输入中提示,添加控制平面的其它节点; 第九步,按kubeadm init命令输入中提示,添加工作节点至集群中;在将节点添加至集群之前,建议先运行如下命令,准备好所需要用到的pause镜像; ``` docker image pull registry.magedu.com/google_containers/pause:3.9 docker image tag registry.magedu.com/google_containers/pause:3.9 registry.k8s.io/pause:3.6 ``` 待如上两个命令运行结束后,再运行kubeadm join命令; ### 维护操作 重置集群节点(危险操作,请再三确认): ``` kubeadm reset --cri-socket unix:///run/cri-dockerd.sock rm -rf /etc/kubernetes/ /var/lib/kubelet /var/lib/dockershim /var/run/kubernetes \ /var/lib/cni /etc/cni/net.d /var/lib/etcd /run/flannel/ ``` ## 部署必要的组件 ### ingress-nginx 将配置文件定义的资源创建于Kubernetes集群上即可完成部署。 ``` kubectl apply -f https://gitee.com/mageedu/k8s-in-mageedu-cloud/raw/master/ingress-nginx/ingress-nginx.yml ``` 需要说明的是,ingress nginx的service默认为LoadBalancer类型,或无可用的Cloud Provider,也可以将NodePort或者额外添加的ExternalIP作为访问入口。 运行如下命令,可获取各Pod的运行状态和相关Service资源的状态。 ``` kubectl get pods,services -n ingress-nginx ``` ### 部署csi-driver-nfs 首先运行如下命令部署nfs-server,它默认将被部署至nfs名称空间之下。 ``` kubectl apply -f https://gitee.com/mageedu/k8s-in-mageedu-cloud/raw/master/csi-driver-nfs/nfs-server.yaml ``` 而后即可部署csi-driver-nfs相关的组件,下面的命令会自动下载所需要的配置文件并完成部署操作。 ``` curl -skSL https://gitee.com/mageedu/k8s-in-mageedu-cloud/raw/master/csi-driver-nfs/install-driver.sh | bash -s v4.4.0 -- ``` 运行下面的命令,监测各组件的运行状态。 ``` kubectl -n kube-system get pod -o wide -l 'app in (csi-nfs-node,csi-nfs-controller)' ``` 待各Pod转为“running”状态后,即可运行如下命令,创建StorageClass资源。 ``` kubectl apply -f https://gitee.com/mageedu/k8s-in-mageedu-cloud/raw/master/csi-driver-nfs/storageclass-csi-driver-nfs.yml ``` 随后,可运行如下命令,创建PVC,测试动态PV置备的功能是否可用。 ``` kubectl apply -f https://gitee.com/mageedu/k8s-in-mageedu-cloud/raw/master/csi-driver-nfs/pvc-nfs-csi-dynamic.yaml ``` 若PVC正确绑定到了某个动态置备的PV上,则代表服务正常,随后即可删除该PVC。 ``` kubectl get pvc kubectl delete pvc -f https://gitee.com/mageedu/k8s-in-mageedu-cloud/raw/master/csi-driver-nfs/pvc-nfs-csi-dynamic.yaml ``` ### 部署kuboard 运行如下命令,即可将kuboard部署至kubernetes集群。 ``` kubectl apply -f https://gitee.com/mageedu/k8s-in-mageedu-cloud/raw/master/Kuboard/kuboard.yml ``` 若正常部署了Ingress Nginx,则可运行如下命令,给kuboard创建ingress资源。 ``` kubectl apply -f https://gitee.com/mageedu/k8s-in-mageedu-cloud/raw/master/Kuboard/kuboard-ingress.yml ```