搭建k8s本地环境minikube
搭建k8s本地环境minikube的步骤如下:安装Docker:访问Docker官方网站的产品文档页面,下载适合您操作系统的Docker安装程序。按照官方指引完成Docker的安装。安装完成后,通过Docker的镜像仓库获取所需资源,并使用命令进行安装验证,确保Docker已成功安装并运行。安装Minikube:访问Minikube的官方文档页面。
搭建k8s本地环境,尤其是使用minikube,是为了在开发过程中保持与生产环境一致,方便进行实验和调试。在选择小型k8s时,市面上有k0s、MicroK8s、kind、k3s和Minikube等供开发者挑选。其中,Minikube因其易于配置和使用,受到广泛欢迎。开始搭建过程,首先需要安装Docker。
此外,使用kubeconfig多配置文件切换工具和node-shell脚本可以简化K8s宿主机根密码修改的过程。Kuboard.cn提供了基于microk8s的快速实践指南,帮助用户在本地环境中上手Kubernetes。对比其他工具,MicroK8s、K3s和minikube各有优势。MicroK8s以其轻量级和快速安装的特点脱颖而出,适合边缘计算和物联网场景。
集群启动完成后,系统生成并运行名为minikube的容器。通过执行kubectl version --short命令,可以检查K8s集群版本,验证环境搭建是否成功。
k8s从私有仓库拉取镜像创建pod时ImagePullBackOff
1、假如我们自己搭建k8spod镜像了私有仓库k8spod镜像,并在其中上传了需要使用的镜像。这时候我们在k8s集群的机器上,通过 docker pull 是能拉取到私有仓库镜像的。但是k8s是获取不到docker的私有仓库的认证信息的,这时候就会出现ImagePullBackOff的问题。
2、ErrImagePull或ImagePullBackOff:这类问题多与镜像仓库有关。可能是由于镜像仓库在推送镜像过程中出现清理或同步问题,导致拉取镜像失败。解决办法是检查镜像仓库的同步状态,确保镜像存在并可被拉取。Pending:Pending状态涉及的问题多样,可能与资源调度、配置错误或网络问题有关。
3、含义:容器已终止,并且至少一个容器以失败方式退出。可能原因:容器内部错误或系统资源问题。排查方法:检查容器退出状态、错误日志及系统资源使用情况。ImagePullBackOff / ErrImagePull 状态:含义:镜像拉取失败。可能原因:镜像不存在、网络问题或需要进行认证。
4、常见导致pod长时间处于“ContainerCreating”状态的原因包括镜像拉取问题、资源不足、持久卷问题、网络问题以及安全上下文或Docker/运行时问题。要排查镜像拉取问题,可使用kubectl describe pod命令检查pod事件,寻找“Failed to pull image”或“ImagePullBackOff”事件,表明镜像拉取存在问题。
Kubernetes的安装配置
Kubernetes的安装配置主要包括以下步骤:环境准备:配置操作系统:如Centos 7,设置主机名、时区等。关闭安全模块:关闭SELinux等安全模块。关闭防火墙:确保节点间通信不受阻碍。时间同步:确保所有节点的时间同步,以避免时间相关的问题。安装必要软件:如Docker和kubeadm。
在所有节点上配置containerd所需的模块,并启动containerd。安装kubeadm、kubelet、kubectl,这是Kubernetes的核心组件。集群初始化:在master1节点执行kubeadm init命令,下载镜像并初始化集群。记录生成的token值,用于后续节点加入集群。配置环境变量,以便能够使用kubectl命令管理集群。
集群安装配置包括选择镜像、编写脚本执行,配置网络协议,初始化集群信息,以及在Master和Node节点上执行特定命令。遇到问题时,可能需要重置节点或查看Pod状态。一旦集群配置完毕,可以使用kubectl管理命名空间、Pod、服务和集群信息,甚至安装K8S可视化仪表盘进行监控。
安装Calico网络插件,并配置其以支持IPv4/IPv6双栈。配置网络策略以控制Pod间的通信。安装DNS:安装CoreDNS,并配置其以解析集群内的域名。监控工具:安装Metrics Server,以监控集群的资源使用情况。集群验证:部署并验证Pod、服务和网络连通性,确保集群正常工作。
K8S故障检查-Pod处于ContainerCreating状态
1、常见导致pod长时间处于“ContainerCreating”状态的原因包括镜像拉取问题、资源不足、持久卷问题、网络问题以及安全上下文或Docker/运行时问题。要排查镜像拉取问题,可使用kubectl describe pod命令检查pod事件,寻找“Failed to pull image”或“ImagePullBackOff”事件,表明镜像拉取存在问题。
2、面对k8s应用卡在ContainerCreating状态的困扰,我通过kubectl describe po命令获取到了关键的日志信息。
3、ContainerCreating:这种情况表示容器正在创建中,常见于配置问题导致的容器创建失败。例如,当使用docker服务时,可能会遇到节点上的kube-proxy、kubelet或docker服务重启后容器仍无法创建的情况。解决这类问题,通常需要检查服务的运行状态,确认资源是否充足,或者是否存在网络、存储配置问题。
4、一个pod的完整创建,通常会伴随着各种事件的产生,k8s种事件的种类总共只有4种:PodStatus 有一组PodConditions。PodCondition中的ConditionStatus,它代表了当前pod是否处于某一个阶段(PodScheduled,Ready,Initialized,Unschedulable),“true” 表示处于,“false”表示不处于。
K8S部署notebook镜像文件,然后不同形式访问
部署notebook镜像:使用docker命令,执行`docker pull jupyter/datascience-notebook:2023-06-01`。启动notebook服务,指定8090端口,注意内部默认端口为8888。访问notebook有多种形式:内部访问:通过集群的IP地址访问。外部访问 - NodePort形式:创建service配置文件,如service-nodeport.yaml,指定外部访问端口。
首先准备所需镜像,将镜像拉取并推送到内网镜像仓库,修改 manifest 文件的镜像地址,打包项目并上传到部署服务器,创建 kubeflow 工作目录,创建 StorageClass 并设置为默认。部署完成后,访问 kubeflow UI,使用 NodePort 类型的访问方式:node 节点 IP + 31380 端口。
安装完成后,开始安装gpu-manager,可参考腾讯开源的vgpu方案教程。需要下载thomassong/gpu-manager:0.9或相关tag的镜像,并与gpu-admission镜像一同拉取。确保节点设置正确。接下来,使用notebook挂载GPU,通过yaml配置来显示GPU资源已被使用。通过service负载均衡,外部可以访问notebook服务。
【K8s是什么?】比较Docker容器、K8s和GKE的架构与优势
1、K8s以集群为单位,将服务控制和资源分配分开,通过Control Plane统一管理Node和Pod,实现了服务的自动化部署、修复、负载均衡和权限控制。Pod作为最小服务单元,内部管理复杂度降低,方便扩展和沟通。然而,K8s的构建和维护过程繁琐,包括资源设置、安装套件和网络配置等,且一旦出错,问题排查耗时。
2、这使得Docker容器在资源利用率和启动速度方面具有明显的优势。k8s集群管理:虽然k8s本身不直接提供容器的轻量级特性,但它通过高效的集群管理和调度策略,可以充分利用Docker容器的轻量级优势,实现资源的高效利用和应用的快速部署。
3、k8s:k8s是一个开源的容器集群管理系统。它专注于容器集群的自动化部署、自动扩缩容、维护以及服务发现等功能,提供了更为全面的容器管理解决方案。 运行机制: Docker:Docker容器内的应用程序进程直接运行在宿主机的内核上。
4、Docker:Docker更适合用于单个应用的容器化、开发和测试环境,以及轻量级的虚拟化场景。k8s:k8s则更适合用于大规模容器化应用的部署和管理,特别是在云计算和微服务架构中,k8s能够提供强大的集群管理和调度能力。综上所述,Docker和k8s在定义、功能、运行层面、架构与组件以及应用场景等方面都存在显著差异。