首页
关于
留言
接口
搜索
资讯
技术
资源
悦读
杂记
首页
登录
登录
搜索
emer
累计撰写
60
篇文章
累计收到
0
条评论
首页
栏目
资讯
技术
资源
悦读
杂记
首页
登录
页面
首页
关于
留言
接口
技术
置顶
K8s升级记录:1.29升级到1.30
上次升级提到要从1.29升级到1.30是要修改K8s的软件包仓库地址。本次就不再重复了,大家可以参考官网的方法:https://v1-30.docs.kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/change-package-repository/本次主要记录一下K8s从1.29.8升级到1.30.0的过程及步骤命令。大致分两部分一、升级控制节点1、升级准备a.修改软件包仓库地址、升级软件包和查看及确定升级版本vim /etc/apt/sources.list.d/kubernetes.listsudo apt update &&sudo apt-cache madison kubeadmb.调整控制节点调度状态,腾空节点kubectl cordon xianchaomaster1kubectl drain xianchaomaster1 --ignore-daemonsets2、升级kubeadm执行:apt-mark unhold kubeadm && apt-get install -y kubeadm='1.30.0-1.1' && apt-mark hold kubeadm查看升级计划:kubeadm upgrade plan虽然计划上提示可以升级到1.30.4,但接下来还是设定计划1.30.0执行,不然会报错官网上有这个提示:所以先执行了killall -s SIGTERM kube-apiserver &&sleep 20然后再执行升级命令:kubeadm upgrade apply v1.30.0最后提示升级成功并要求升级kubelet3、升级kubelet和kubectlapt-mark unhold kubelet kubectl && apt-get update && apt-get install -y kubelet='1.30.0-1.1' kubectl='1.30.0-1.1' && apt-mark hold kubelet kubectl4、重启检验是否成功,并接触节点不可调试状态,升级完成systemctl daemon-reloadsystemctl restart kubelet二、升级工作节点1、在控制节点调整节点调试状态,腾空工作节点资源kubectl cordon xianchaonode1kubectl drain xianchaonode1 --ignore-daemonsets2、在工作节点上升级kubeadma、修改软件包仓库地址:vim /etc/apt/sources.list.d/kubernetes.listb、升级软件仓库并确定升级信息apt-get update && apt-cache madison kubeadmc、安装kubeadm升级命令:apt-mark unhold kubeadm &&apt-get update && apt-get install -y kubeadm='1.30.0-1.1' && apt-mark hold kubeadmd、执行升级节点kubeadm(与控制节点不同,此处使用upgrade node命令),如下图执行:kubeadm upgrade node升级成功会提示升级kubelet.3、在工作节点上升级kubelet、kubectlapt-mark unhold kubelet kubectl && apt-get update apt-get install -y kubelet='1.30.0-1.1' kubectl='1.30.0-1.1' && apt-mark hold kubelet kubectl4、重启验证升级是否成功root@xianchaonode1:~# systemctl daemon-reloadroot@xianchaonode1:~# systemctl restart kubelet返回控制节点查看升级结果。可以看到控制节点和工作节点都成功升级到1.30.0版本。
2024年-9月-13日
92 阅读
0 评论
技术
置顶
K8s升级1.29升级到1.29.8
因为Cks考试基于1.30,而之前的模板机一直是1.29,为一更适应考试决定升级到1.30.查看系统系统:lsb_release -a升级系统:sudo apt update一、升级kubeadmroot@xianchaomaster1:~# apt-cache madison kubeadm没有找到1.30(因为没有修改软件包地址,后面有提到),先升级到1.29.8调整节点为不可调度状态kubectl cordon xianchaomaster1腾空节点:kubectl drain xianchaomaster1 --ignore-daemonsetsroot@xianchaomaster1:~# apt-get update && apt-get install -y kubeadm='1.29.8-1.1' && apt-mark hold kubeadm如下图:查看升级计划:root@xianchaomaster1:~# kubeadm upgrade plan查看节点状态:root@xianchaomaster1:~# kubectl get nodesNAME STATUS ROLES AGE VERSIONxianchaomaster1 Ready,SchedulingDisabled control-plane 133d v1.29.0xianchaonode1 Ready 133d v1.29.0执行升级命令:#升级 etcd 时的注意事项,由于 kube-apiserver 静态 Pod 始终在运行(即使你已经执行了腾空节点的操作), 因此当你执行包括 etcd 升级在内的 kubeadm 升级时,对服务器正在进行的请求将停滞, 因为要重新启动新的 etcd 静态 Pod。作为一种解决方法,可以在运行 kubeadm upgrade apply 命令之前主动停止 kube-apiserver 进程几秒钟。这样可以允许正在进行的请求完成处理并关闭现有连接, 并最大限度地减少 etcd 停机的后果。执行以下命令killall -s SIGTERM kube-apiserver # 触发 kube-apiserver 体面关闭sleep 20 # 等待一下,以完成进行中的请求kubeadm upgrade ... # 执行 kubeadm 升级命令root@xianchaomaster1:~# kubeadm upgrade apply v1.29.8升级成功最后如下图二、升级kubelet、kubectl命令:sudo apt-mark unhold kubelet kubectl &&apt-get update &&apt-get install -y kubelet='1.29.8-1.1' kubectl='1.29.8-1.1'&&apt-mark hold kubelet kubectl重启kubelet,检测是否升级成功如上图,master节点已成功升级到1.29.8,解除节点不可调度,完成控制节点升级三、工作节点升级:1、在控制节点上操作:调整节点调度状态,腾空工作节点2、工作节点上升级软件包,sudo apt updatesudo apt-cache madison kubeadm升级kubeadmroot@xianchaonode1:~# apt-mark unhold kubeadm && apt-get install -y kubeadm='1.29.8-1.1'&& apt-mark hold kubeadm返加控制节点执行升级节点命令:kubectl upgrade node最后有提示升级成功返回工作节点升级kubelet,kubectlroot@xianchaonode1:~# apt-mark unhold kubelet kubectl && apt-get update && apt-get install -y kubelet='1.29.8-1.1' kubectl='1.29.8-1.1'&&apt-mark hold kubelet kubectl然后kubelet返回控制节点查看节点状态,节点正常刚解除节点不可调试状态,恢复正常。检查节点资源是否正常最后:升级到1.30则采用类似方法,需要修改软件仓库的版本信息才以下:修改文件路径:/etc/apt/sources.list.d/kubernetes.list如果是1.29的话,应该是这样的deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/deb/ /如果这个不修改是没办法获取到1.30版本的升级包,所以必须把软件包仓库地址中1.29修改成为想要升级的版本,本次升级到1.30所以修改为:deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/deb/ /保存退出然后可以获取1.30的版本包如下:apt update &&apt-cache madison kubeadm同理,别忘记了修改工作节点上的软件包仓库地址其他操作类似。
2024年-9月-13日
87 阅读
0 评论
技术
2024-6-26
linux日常必备命令
基本操作命令:ls: 列举文件夹下的所有显性文件(.*文件不显示)ll -a: 列举文件夹下的所有文件,给出详细信息cd: 切换目录,e.g. cd .. 退到上一级目录; cd - 回到最近一次在的目录; cd ~回到用户所在home目录mv: 重命名或移动文件mkdir: 创建目录rmdir: 删除目录mv -rf: 删除目录id: 查看用户登录信息passwd: 修改密码ssh: 节点间切换ifconfig: 查看服务器ipchmod: 修改文件权限,e.g. chmod u+x ***chsh: 切换系统shell命令, chsh -lecho $SHELL: 查看当前使用shell————————————————文件操作命令:vi: 打开文件并编辑,:q退出,:wq保存退出,:q!不保存退出vim: 打开文件并编辑cat: 查看文件,从第一行开始显示文件内所有内容tac: 查看文件,从最后一行开始显示文件内所有内容cat: 合并文件, cat file1 file2 >file3, cat *.list >all_listhead: 查看文件头(默认10行)tail: 查看文件尾(默认10行)more:按页查看文件,百分比表示已显示前*%的内容,按enter键加载一行;按空格键向后翻页,按b键退后一页,最多只能退一页,再不能往前翻less: 按页查看文件,pg up &down,随心所欲。查看目录下文件个数: ls -l |grep "^-"|wc -l统计目录下子目录个数:ls -l |grep "^d"|wc -l统计目录下所有文件个数,包括子目录里的:ls -lR|grep "^-"|wc -l打包tar.gz文件: tar -zcvf abc.tar.gz ./abc解压tar.gz文件: tar -xzvf *.tar.gz打包zip文件: zip directory.zip directory/*解压zip文件: unzip directory.zip查看磁盘空间:df -h查看目录占用空间: du -sh权限管理命令权限管理命令:chmod命令所在路径:/bin/chmod执行权限:所有用户语法:chmod [{ugoa}{±=}{rwx}][文件或目录] u是所有者,g是所属组,o是其他人,a是所有人 ,+是添加权限,-是减少权限,=是所有人必须按规定权限[mode = 421][文件或目录]-R 递归修改功能描述:改变文件或目录权限注:想要删除一个文件,必须要对当前文件所在的目录有写权限在这里插入图片描述权限管理命令:chown命令所在路径:/bin/chown执行权限:所有用户语法:chown [用户][文件或目录]功能描述:改变文件或目录的所有者权限管理命令:chgrp命令所在路径:/bin/chgrp执行权限:所有用户语法:chgrp [用户组][文件或目录]功能描述:改变文件或目录的所属组权限管理命令:umask命令所在路径:Shell内置命令执行权限:所有用户语法:umask[-S]-S 以rwx形式显示新建文件缺省权限功能描述:改变文件或目录的所有者————————————————文件搜索命令文件搜索命令:find命令所在路径:/bin/find执行权限:所有用户语法:find [搜索范围] [匹配条件]功能描述:文件搜索,不区分大小写根据文件名称来查找find /etc -name init 在目录/etc中查找文件名为init的文件find /etc -name init??? 在目录/etc中查找文件名以init开头后加任意三个字符的文件(* 与文件名之间无空格)find /etc -name * init 在目录/etc中查找文件名以init为结尾的文件find /etc -name init * 在目录/etc中查找文件名以init为开头的文件find /etc -name *init * 在目录/etc中查找文件名以init为中间的文件根据文件大小来查找find / -size +204800 在根目录下查找大于100MB的文件,204800表示数据块,一个数据块表示512字节 = 0.5k+n表示大于 -n表示小于 n表示等于根据文件所有者来查找find /home -user ygq在根目录下查找所有者为ygq的文件根据文件修改时间来查找find /etc -cmin -5在/etc目录下查找5分钟内被修改过属性的文件和目录-amin 访问时间 access-cmin 文件属性change-mmin 文件内容modify联合查找find /etc -size +163840 -a - size -204800在etc目录下查找大于80MB且小于100MB的文件-a 表示两个条件同时满足-o 表示两个条件满足任意一个即可find /etc -name inittab -exec ls -l {} ;在etc目录下查找inittab文件并显示其详细信息-exec/-ok 命令 {};表示对搜索结果执行操作根据文件类型查找-type f 文件d 目录l 软链接文件根据i节点查找-inum文件搜索命令:locate命令所在路径:/usr/bin/locate执行权限:所有用户语法:locate 文件名功能描述:在文件资料库中查找文件文件搜索命令:which命令所在路径:/usr/bin/which执行权限:所有用户语法:which 命令功能描述:搜索命令所在目录及别名信息文件搜索命令:whereis命令所在路径:/usr/bin/whereis执行权限:所有用户语法:whereis [命令名称]功能描述:搜索命令所在目录及帮助文档路径文件搜索命令:grep命令所在路径:/bin/grep执行权限:所有用户语法:grep -iv[指定字串][文件]功能描述:在文件中搜索字串匹配的行并输出-i 不区分大小写-v排除指定字串帮助命令帮助命令:man命令所在路径:/usr/bin/man执行权限:所有用户语法:man [命令或配置文件]功能描述:获取帮助信息用户管理命令用户管理命令:useradd命令所在路径:/usr/sbin/useradd执行权限:root语法:useradd 用户名功能描述:添加新用户用户管理命令:passwd命令所在路径:/usr/bin/passwd执行权限:所有用户语法:passwd 用户名功能描述:设置用户密码用户管理命令:who命令所在路径:/usr/bin/who执行权限:所有用户语法:who功能描述:查看登录用户信息用户管理命令:w命令所在路径:/usr/bin/w执行权限:所有用户语法:w功能描述:查看登录用户详细信息压缩解压命令压缩解压命令:gzip命令所在路径:/bin/gzip执行权限:所有用户语法:gzip [文件]功能描述:压缩文件压缩后文件格式:.gz压缩解压命令:gunzip命令所在路径:/bin/gunzip执行权限:所有用户语法:gunzip [文件]功能描述:解压缩.gz的压缩文件压缩解压命令:tar命令所在路径:/bin/tar执行权限:所有用户语法:tar 选项[-zcf][压缩后的文件名][目录]-c 打包-v 显示详细信息-f 指定文件名-z 打包同时压缩功能描述:打包目录压缩后文件格式:.tar.gz压缩解压命令:zip命令所在路径:/usr/bin/zip执行权限:所有用户语法:zip 选项[-r][压缩后的文件名][文件或目录]-r 压缩目录功能描述:压缩文件或目录压缩后文件格式:.zip压缩解压命令:unzip命令所在路径:/usr/bin/unzip执行权限:所有用户语法:unzip [压缩文件]功能描述:解压.zip的压缩文件压缩解压命令:bzip2命令所在路径:/usr/bin/bzip2执行权限:所有用户语法:bzip2 选项[-k][文件]-k 产生压缩文件后保留原文件功能描述:压缩文件压缩后文件格式:.bz2压缩解压命令:bunzip2命令所在路径:/usr/bin/bunzip2执行权限:所有用户语法:bunzip2 选项[-k][压缩文件]-k 解压缩后保留原文件功能描述:解压缩文件网络命令网络命令:wall命令所在路径:/usr/bin/wall执行权限:所有用户语法:wall [message]功能描述:发广播信息网络命令:ping命令所在路径:/bin/ping执行权限:所有用户语法:ping 选项 IP地址-c 指定发送次数功能描述:测试网络连通性网络命令:ifconfig命令所在路径:/sbin/ifconfig执行权限:root语法:ifconfig 网卡名称 IP地址功能描述:查看和设置网卡信息网络命令:mail命令所在路径:/bin/mail执行权限:所有用户语法:mail [用户名]功能描述:查看和发送电子邮件网络命令:traceroute命令所在路径:/bin/traceroute执行权限:所有用户语法:traceroute功能描述:显示数据包到主机间的路径网络命令:netstat命令所在路径:/bin/netstat执行权限:所有用户语法:netstat [选项]功能描述:显示网络相关信息网络命令:setup命令所在路径:/usr/bin/setup执行权限:root语法:setup功能描述:配置网络挂载命令挂载命令:mount命令位置:/bin/mount执行权限:所有用户命令语法: mount [-t 文件系统] 设备文件关机重启命令关机重启命令:shutdownshutdown:shutdown [选项]时间-c 取消前一个关机命令-h 关机-r 重启其他关机命令haltpoweroffinit 0其他重启命令rebootinit 6退出登录命令exit or logout————————————————注意事项:Linux严格区分大小写Linux中的所有内容以文件形式保存,包括硬件1、硬盘文件是/dev/sd[a-p]2、光盘文件是/dev/sr0等Linux不靠扩展名区分文件类型1、压缩包:”.gz“、”.bz2“、”.tar.bz2“、”.tgz“等2、二进制软件包:”.rpm“3、网页文件:”.html“、”.php“4、脚本文件:”.sh“5、配置文件:”.conf“Linux所有的存储设备都必须挂载之后用户才能使用,包括硬盘、U盘和光盘————————————————
2024年-6月-26日
175 阅读
0 评论
技术
2024-5-21
K8s运维:Pod常见错误及处理思路
Pod常见错误及处理思路Pod可能会出现启动和运行时错误。启动错误包括:ImagePullBackoffImageInspectErrorErrImagePullErrImageNeverPullRegistryUnavailableInvalidImageName运行时错误包括:CrashLoopBackOffRunContainerErrorKillContainerErrorVerifyNonRootErrorRunInitContainerErrorCreatePodSandboxErrorConfigPodSandboxErrorKillPodSandboxErrorSetupNetworkErrorTeardownNetworkError1.ImagePullBackoffImagePullBackoff 是一个 Kubernetes 中常见的错误状态,它表示 Kubernetes 试图从容器镜像仓库拉取容器镜像,但出现了一些问题,导致暂时无法完成这个操作。这个状态通常是临时的,Kubernetes 将会按退避算法(即逐渐增加间隔时间)重试拉取操作。常见原因镜像不存在:指定的镜像名或标签在镜像仓库中不存在。拼写错误:在 image 字段中镜像名称或标签拼写错误。私有镜像仓库凭证问题:对于存储在私有仓库中的镜像,可能是因为 Kubernetes 没有正确配置访问私有镜像仓库的凭证。网络问题:Kubernetes 节点无法访问或连接到镜像仓库,可能是由于网络配置或者代理设置的问题。仓库限流或访问限制:一些公共镜像仓库(如 Docker Hub)对拉取频率有限制,可能触发了这些限制。错误处理检查镜像名称和标签:确认 image 字段中的名称和标签是否正确,且镜像确实存在于镜像仓库中。检查仓库凭证: 确认是否已为 Kubernetes 集群提供了私有仓库的访问凭证。 检查 Kubernetes 的 Secret 是否正确创建,并且被 Pod 引用。网络连接检查: 检查 Kubernetes 集群的网络配置,确认节点可以访问外部网络。 如果使用了代理,请确保代理配置正确。检查镜像仓库限制: 如果使用的是公共镜像仓库,如 Docker Hub,检查是否有拉取次数限制或是否需要认证。查看日志和事件: 使用 kubectl describe pod <pod-name> 查看 Pod 的事件,了解更多错误信息。 使用 kubectl logs <pod-name> 查看 Pod 日志,获取额外的错误细节。2.ImageInspectErrorImageInspectError 是 Kubernetes 在尝试检查镜像时遇到的一个错误状态,这通常发生在 Kubernetes 在拉取镜像后,尝试读取镜像的元数据时遭遇问题。这种错误可能由多种原因导致,以下是一些常见的原因及其解决方法:常见原因损坏的镜像:镜像文件可能在传输过程中被损坏,或者镜像本身存在问题。错误的镜像格式:有时候镜像可能并不符合 Docker 或 Kubernetes 所支持的格式。存储问题:节点上的存储系统出现问题,如磁盘满、文件系统损坏等,可能会导致无法正确读取镜像文件。镜像拉取后的权限问题:可能是因为节点上的 Docker 或容器运行时的配置问题,导致拉取下来的镜像无法被正确读取。运行时组件问题:容器运行时(如 Docker、containerd)存在问题,可能是软件缺陷或配置错误。处理方式重新拉取镜像: 删除有问题的 Pod,让 Kubernetes 尝试重新创建并拉取镜像。 在有问题的节点上手动尝试拉取镜像,以查看是否存在相同问题。检查镜像完整性和兼容性: 确保镜像没有损坏,可以在其他环境中测试该镜像。 确认镜像格式正确,并且兼容 Kubernetes 所使用的容器运行时。检查节点存储: 检查节点的磁盘空间,确保有足够的空间用于存储镜像。 检查文件系统是否完好,没有损坏或错误。检查权限和配置: 确认容器运行时和节点上的安全策略是否允许正常访问和处理这些镜像。 检查是否存在与 SELinux、AppArmor 相关的安全限制问题。检查和重启容器运行时: 检查 Docker 或其他容器运行时的状态,必要时进行重启。 检查容器运行时的日志,寻找可能的错误信息或警告。查看 Kubernetes 事件和日志: 使用 kubectl describe pod <pod-name> 命令查看 Pod 的状态和相关事件。 查看相关节点和容器运行时的日志以获得更多诊断信息。3.ErrImagePullErrImagePull 是 Kubernetes 中遇到的一种常见错误,它发生在 Kubernetes 尝试从容器镜像仓库拉取容器镜像时失败。这个错误可能由多种原因引起,包括但不限于网络问题、认证错误、镜像名称或标签错误等。以下是一些常见原因及其解决方法:常见原因镜像不存在:在仓库中找不到指定的镜像或标签。拼写或路径错误:镜像名称或标签拼写错误,或者路径指定不正确。认证失败:对于私有仓库,可能是因为没有提供正确的认证凭据。网络问题:拉取镜像的节点无法访问镜像仓库,可能是因为网络配置或者代理设置的问题。镜像仓库问题:镜像仓库服务器可能宕机或无法处理请求。处理方式检查镜像名称和标签: 确保在 Pod 定义中指定的镜像名称和标签完全正确。 在不同的环境中测试镜像名称,比如在本地 Docker 环境中。确认认证信息: 如果镜像存储在私有仓库中,确保已在 Kubernetes 集群中创建了正确的 Secret,并在 Pod 定义中使用 imagePullSecrets 引用该 Secret。 检查 Secret 中的认证信息是否正确,例如 Docker 登录凭据。检查网络连接: 确认 Kubernetes 集群内的节点可以访问外部的镜像仓库。可以在节点上手动尝试拉取镜像。 如果集群使用代理,检查相关的代理设置是否正确。检查镜像仓库状态: 确认镜像仓库是否运行正常,特别是当使用私有或自托管的仓库时。检查 Kubernetes 集群和节点状态: 使用 kubectl describe pod <pod-name> 来获取 Pod 的状态和事件信息,这通常能提供关于为什么镜像拉取失败的线索。 检查集群中相关节点的状态,确保它们运行正常且资源不是过度紧张。查看日志: 查看相关的 Kubernetes 组件(如 kubelet)的日志以获取详细的错误信息。4.ErrImageNeverPullErrImageNeverPull 是 Kubernetes 在处理容器镜像时遇到的一个特定错误。这个错误表明 Kubernetes 被配置为不去拉取镜像,通常发生在以下几种情况:常见原因Pod 配置了 ImagePullPolicy 为 Never:在这种情况下,Kubernetes 期望容器镜像已经存在于节点上,而不会去尝试从镜像仓库中拉取它。使用本地开发环境:在本地开发环境(如 Minikube 或 Docker Desktop 的 Kubernetes 集群)中,可能会预先加载或构建镜像到本地环境中,而不需要从远程仓库拉取。离线环境或策略限制:在某些离线环境中,可能不允许或无法从外部镜像仓库中拉取镜像。处理方式检查 ImagePullPolicy: 确认 Pod 定义中的 imagePullPolicy 设置。如果设为 Never,Kubernetes 将不会尝试拉取镜像。 如果需要 Kubernetes 从远程仓库拉取镜像,应将 imagePullPolicy 设置为 Always 或 IfNotPresent。确保镜像在节点上存在: 如果 imagePullPolicy 设为 Never,确保需要的镜像已经在所有可能运行该 Pod 的节点上预先加载。 在节点上使用类似 docker images 的命令来检查镜像是否存在。调整开发或部署策略: 在本地开发环境中,如果使用如 Minikube 或 Docker Desktop,可以通过构建镜像直接到本地 Kubernetes 环境中,或者将镜像手动加载到这些环境里。 在离线或受限环境中,需要将所需的所有镜像事先加载到所有节点上。5.RegistryUnavailableRegistryUnavailable 是 Kubernetes 或其他容器编排工具中的一个错误,表示无法访问或连接到指定的容器镜像仓库。这个错误通常表明 Kubernetes 集群的节点无法访问用于拉取容器镜像的注册中心(registry)。常见原因镜像仓库服务器宕机:容器镜像仓库可能由于各种原因(如维护、配置错误、网络问题)而暂时不可用。网络问题:Kubernetes 集群的节点可能因为网络配置错误或连通性问题无法访问镜像仓库。DNS 解析问题:如果 Kubernetes 集群的节点无法正确解析镜像仓库的 DNS 名称,可能会导致无法访问仓库。认证失败:对于需要认证的私有仓库,如果没有提供正确的凭据或凭据过期,也可能导致无法访问。处理方式检查镜像仓库的状态: 确认仓库服务器是否运行并且可以正常访问。这可能涉及检查仓库的状态页面、服务健康检查或尝试手动从仓库拉取镜像。检查网络连接: 确保 Kubernetes 集群的节点可以访问镜像仓库的网络。可以在节点上手动尝试 ping 或 traceroute 到镜像仓库的地址。 如果使用了网络策略或防火墙,确保它们没有阻止对镜像仓库的访问。验证 DNS 配置: 检查 Kubernetes 集群的 DNS 解析是否正常工作。你可以在 Pod 中尝试解析仓库的 DNS 名称来测试这一点。检查认证信息: 如果你的镜像仓库需要登录,确保 Kubernetes 集群中正确设置了镜像拉取的 Secret,并且它们没有过期。 检查 imagePullSecrets 是否已被正确应用到 Pod 配置中。检查仓库的配置和证书: 对于使用 HTTPS 的仓库,确保相关的 SSL/TLS 证书是有效的,并且 Kubernetes 集群的节点信任这些证书。 如果你的环境有特殊的证书要求(如自签名证书),确保这些证书已被正确导入和配置。6.InvalidImageNameInvalidImageName 错误在 Kubernetes 中通常指的是 Pod 无法启动,因为其定义中的容器镜像名称不符合预期格式或包含了不正确的字符。这种问题通常发生在 Kubernetes 的 Pod 配置中,特别是在 image 字段。常见原因格式错误:镜像名称、标签(tag)或者域名(registry domain)的格式可能不正确。例如,镜像名称可能缺少了必要的部分(如域名或标签),或者包含了非法字符。使用了不存在的标签或镜像:在指定的仓库中,镜像标签可能不存在,或者整个镜像可能不存在。拼写错误:简单的拼写错误,如将 latest 错误地写作 latset,也会导致这个问题。不完整或缺少仓库地址:如果没有指定完整的仓库地址或者使用了错误的仓库地址(例如私有 Docker Registry 的地址),可能会导致此错误。处理方式检查镜像名称的格式: 确保镜像名称完整,包括仓库地址、镜像名和标签(如 registry.example.com/myimage:tag)。 镜像名称和标签应只包含合法字符。验证镜像和标签的存在: 确认你试图使用的镜像和标签在 Docker Registry 中确实存在。 通过运行 docker pull <image_name> 或相应的命令来本地测试。检查拼写和空格: 确认镜像名称、仓库地址和标签的拼写正确,没有不必要的空格或拼写错误。使用默认仓库(如适用): 如果你使用的是 Docker Hub 的公共镜像而没有指定仓库地址,可以省略仓库地址。例如,使用 ubuntu:latest 而不是 docker.io/ubuntu:latest。更新和重试: 一旦镜像名称被更正,更新你的 Kubernetes 配置(如 Deployment、Pod 等),然后重新部署。7.CrashLoopBackOffCrashLoopBackOff 是 Kubernetes 中的一个常见错误,指的是当一个或多个容器在 Pod 中重复启动、崩溃、重启的循环。这通常是由于应用程序在启动后遇到错误而崩溃导致的。理解和解决这一问题,需要查看 Pod 的日志,检查应用程序的运行环境和配置。常见原因配置问题:配置错误(如环境变量设置错误)、缺少配置文件或配置不正确。资源不足:内存或 CPU 资源分配不足,导致应用启动不了或在运行时崩溃。应用程序错误:应用代码中存在的错误或异常,导致应用崩溃。权限问题:应用试图访问没有权限的资源(如文件系统、网络接口)。依赖问题:应用依赖的服务(如数据库、其他微服务)无法访问或未准备好。健康检查失败:Kubernetes 的 liveness 或 readiness 探针失败,导致容器重启。处理方式查看 Pod 日志:kubectl logs <pod-name> 1这通常是理解为什么 Pod 崩溃的第一步。检查资源分配: 使用 kubectl describe pod <pod-name> 查看是否有资源相关的错误(如 OOMKilled)。 根据需要调整 Pod 的资源请求和限制。检查应用健康检查(Probes): 确认 liveness 和 readiness 探针是否配置正确。 如果探针配置错误,Pod 可能会被频繁重启。检查依赖服务: 确保所有依赖的外部服务可用,并且网络配置正确。分析应用程序日志和输出: 确认应用程序是否因错误而退出,或是否有异常输出。 考虑在应用程序中增加更多日志输出以帮助诊断问题。调试 Pod: 如果日志不足以诊断问题,可以尝试使用 kubectl exec -it <pod-name> -- /bin/bash 进入容器内部进行调试。 检查文件系统、运行进程和网络连接等。回滚变更: 如果问题发生在部署新版本或更改配置后,考虑回滚这些变更。8.RunContainerErrorRunContainerError 在 Kubernetes 环境中出现时,通常意味着 Kubelet 在尝试运行容器时遇到了问题。这种错误可能是由各种原因造成的,包括容器镜像、网络配置、存储问题或其他环境设置的问题。常见原因镜像问题:无法拉取镜像(比如镜像不存在或私有仓库认证失败),或者镜像损坏。配置错误:Pod定义中的错误,比如命令行参数错误、环境变量问题等。资源限制:请求的资源超过了节点的可用资源。存储/卷挂载问题:无法挂载配置的卷,例如由于权限问题、不存在的路径、网络存储问题等。网络问题:容器网络配置错误,或者网络策略限制了所需的连接。系统级问题:节点问题(如 Docker daemon 故障、节点上其他服务占用了必要资源等)。处理方式检查事件日志:使用 kubectl describe pod <pod-name> 查看与 Pod 相关的事件日志,这通常提供了失败的具体原因。验证容器镜像: 确认指定的镜像是否存在,并且可以从运行节点上拉取。 检查是否有私有镜像仓库认证问题。检查 Pod 配置: 确保 Pod 定义中的所有参数都是正确的。 检查容器的启动命令和参数。检查资源请求和限制: 确认 Pod 的资源请求(CPU、内存)是否过高,导致无法在节点上调度。检查存储和卷: 检查 Pod 定义的卷是否都可以正确挂载。 检查是否存在权限问题或路径错误。网络配置: 确认网络策略和容器的网络配置是否正确。 检查是否有防火墙或安全组限制通信。节点健康状况: 检查节点的健康状况,包括 Docker 或容器运行时的状态。 确认是否有足够的资源来运行容器。查看 kubelet 日志: 如果以上步骤都无法解决问题,可以在相应的节点上查看 kubelet 的日志,获取更深入的信息。重启 Pod: 在某些情况下,简单地重启 Pod 可能解决问题(例如,在解决了底层资源限制问题后)。9.KillContainerErrorKillContainerError 在 Kubernetes 环境中通常指 Kubelet 在尝试停止一个容器时遇到了错误。这个问题可能是由于底层容器运行时的问题、资源问题、或与特定容器有关的特定状态或配置问题导致的。常见原因容器运行时问题:例如 Docker 或其他容器运行时出现问题或不响应。节点问题:节点上的资源不足(如内存、CPU),或者节点的磁盘空间不足。系统级问题:例如,操作系统层面的问题,比如内核错误或者资源紧张。网络问题:网络延迟或中断可能导致管理命令无法及时传达到容器。Kubernetes 错误:Kubernetes 自身的错误或 Bug 有时也会导致这种情况。处理方式查看容器和节点日志: 用 kubectl describe pod <pod-name> 查看 Pod 的状态和相关事件。 检查节点(如 Docker 节点)上的日志,以确定是否有与停止容器相关的错误信息。检查容器运行时: 检查容器运行时的状态和日志(例如 Docker 的状态和日志)。 尝试手动停止容器,看是否有详细的错误信息。资源使用情况: 检查节点的资源使用情况(CPU、内存、磁盘空间)。 如果资源使用率过高,考虑扩容或优化应用以减少资源消耗。系统和网络健康状况: 确认节点的系统健康状况和网络连接状态。重启相关组件: 在某些情况下,重启 kubelet 或 Docker 服务可以恢复正常状态。 但这应该是最后的手段,因为它可能影响到节点上的其他容器。10.VerifyNonRootErrorVerifyNonRootError 是 Kubernetes 中的一个错误,指示 Pod 的容器因为某些原因无法以非 root 用户身份启动。这通常与 Pod 的安全上下文设置有关,特别是当在 Pod 或容器规范中明确要求以非 root 用户运行时。常见原因安全上下文配置:在 Pod 定义中的 securityContext 配置要求容器以非 root 用户运行,但实际上容器尝试以 root 用户启动。容器镜像配置:容器镜像可能默认以 root 用户运行,与 Kubernetes 的安全要求冲突。权限或文件系统问题:容器中的应用可能需要以 root 用户权限来访问某些文件或执行特定操作,但 Kubernetes 的安全策略阻止了这一行为。处理方式检查和修改 Pod 安全上下文: 查看 Pod 或容器的 securityContext 设置,确保 runAsNonRoot: true 和 runAsUser: <non-root-user-id> 配置正确。 如果设置了 runAsNonRoot 但没有指定 runAsUser,确保容器镜像以非 root 用户作为默认用户。检查和修改容器镜像: 确认容器镜像的默认用户。你可以通过检查 Dockerfile 中的 USER 指令来了解这一点。 如果需要,更改镜像以使用非 root 用户运行,或者创建一个新的镜像版本,确保以非 root 用户启动。调整应用程序的权限需求: 如果应用确实需要特定的权限,请仔细评估这些权限是否必要,以及是否可以通过修改应用逻辑或配置来避免这些需求。 有时候,你可能需要调整文件系统的权限,使非 root 用户也能访问必要的文件或目录。测试和验证: 在进行更改后,确保在一个安全的测试环境中验证这些更改,以确保应用程序仍然按预期工作。11.RunInitContainerErrorRunInitContainerError 在 Kubernetes 环境中出现时,表示初始化容器(Init Container)启动失败。初始化容器是在 Pod 的应用容器启动之前运行的,通常用于设置环境、初始化配置或等待外部依赖。常见原因配置错误:Init 容器的配置或命令行指令有误,导致容器无法正确启动或执行所需任务。镜像问题:Init 容器使用的镜像无法拉取,或镜像本身有问题(例如损坏或不包含所需的执行文件)。资源限制:资源限制太严格,导致容器无法获取足够的 CPU 或内存来启动。权限问题:权限设置不当,使得容器无法访问所需的文件系统或网络资源。外部依赖问题:容器可能在等待外部资源或服务(如数据库、配置服务等),而这些依赖项未能按预期提供服务。处理方式检查 Init 容器的定义和日志: 使用 kubectl describe pod <pod-name> 查看 Pod 详细信息和事件日志。 使用 kubectl logs <pod-name> -c <init-container-name> 查看 Init 容器的日志。检查和修改容器配置: 确保 Init 容器的配置(如执行命令、环境变量等)正确无误。 检查 Init 容器使用的镜像是否正确且可访问。调整资源限制: 如果怀疑资源限制问题,可尝试增加 Init 容器的 CPU 或内存限制。检查权限和安全策略: 确保 Init 容器拥有执行其任务所需的权限,包括对文件系统、网络和其他 Kubernetes 资源的访问。处理外部依赖: 如果 Init 容器依赖于外部服务或资源,确保这些服务可用且网络通畅。查看 Kubernetes 系统日志: 如果上述方法都无法解决问题,可以检查 Kubernetes 节点上的系统日志,查找可能的系统级错误信息。12.CreatePodSandboxErrorCreatePodSandboxError 是 Kubernetes 中出现的错误,通常指在创建 Pod 的沙盒环境时发生了问题。在 Kubernetes 中,"沙盒"通常是指容器运行时的环境,这个环境为容器提供了隔离和资源控制。该错误表明在设置这个基础环境时遇到了障碍。常见原因网络问题:创建 Pod 沙盒时,可能会因为网络配置或网络插件问题导致失败。容器运行时问题:容器运行时(如 Docker、containerd)可能遇到内部错误或配置问题。资源不足:节点上的 CPU、内存或存储资源不足,无法满足 Pod 的需求。系统错误:底层系统(如操作系统、内核)的问题可能导致无法正常创建沙盒。安全策略限制:如 PodSecurityPolicy 或其他安全框架设置的限制导致 Pod 无法创建。Kubernetes 组件错误:Kubernetes 自身的组件(如 kubelet 或 API 服务器)存在问题或配置错误。处理方式检查网络配置: 确认集群的网络插件(如 Calico、Flannel)正常运行。 检查 Pod 的网络策略或相关的网络设置是否正确。检查容器运行时: 确认容器运行时服务(如 Docker)正在运行并且健康。 检查容器运行时的日志,了解可能的错误信息。检查节点资源: 使用 kubectl describe node <node-name> 检查节点的资源使用情况。 确认节点上有足够的 CPU、内存和存储资源可供 Pod 使用。检查系统日志和状态: 查看节点上的系统日志(如 /var/log/messages、/var/log/syslog),找寻可能的错误信息。 确认操作系统和内核状态正常,没有出现相关的错误或故障。检查安全策略: 如果你的集群中启用了 PodSecurityPolicy 或其他安全框架,请检查相关策略是否阻止了 Pod 的创建。检查 Kubernetes 组件: 查看 kubelet 和 Kubernetes API 服务器的日志,寻找可能的错误信息。 确认 Kubernetes 的组件配置正确,无误配置或兼容性问题。重新调度或重启 Pod: 有时,简单的重新调度(删除后重新创建)Pod 或重启 kubelet 服务可以解决问题。13.ConfigPodSandboxErrorConfigPodSandboxError 在 Kubernetes 环境中出现,表明在配置 Pod 的沙盒环境时出错。沙盒环境是指为 Pod 创建的隔离环境,这包括网络、存储、安全设置等。此错误通常意味着在 Pod 初始化阶段,设置这些基本组件时出现了问题。常见原因网络配置问题:错误的网络配置或网络插件故障可能导致配置失败。容器运行时配置错误:容器运行时(如 Docker、containerd)的配置错误或故障。安全设置或策略错误:例如,错误的安全上下文、权限设置或 PodSecurityPolicy 配置错误。资源限制:节点的 CPU、内存限制或者其他资源限制可能导致配置失败。系统级错误:底层操作系统或 Kubernetes 自身的错误,如系统调用失败、内核问题等。处理方式检查网络配置: 审核集群的网络配置,确保网络插件(如 Calico、Flannel 等)运行正常。 检查相关的网络策略和设置,确保它们符合集群和 Pod 的需求。审核容器运行时配置: 确保容器运行时服务(如 Docker)正常工作。 检查容器运行时的配置文件和日志,寻找潜在的配置错误或警告。检查安全设置: 检查 Pod 定义中的安全上下文设置,确保它们正确无误。 如果使用 PodSecurityPolicy,确保相应的策略允许所需的配置。评估资源限制: 检查 Pod 所在节点的资源使用情况,包括 CPU、内存和磁盘空间。 适当调整 Pod 的资源请求和限制,确保其不超出节点可提供的范围。检查系统和 Kubernetes 组件: 查看底层主机的系统日志(如 /var/log/messages、/var/log/syslog)和内核日志(dmesg),找出可能的错误或告警。 确认 Kubernetes 组件(特别是 kubelet)运行正常,检查其日志以了解更多细节。14.KillPodSandboxErrorKillPodSandboxError 在 Kubernetes 环境中出现时,表明在尝试终止或清理 Pod 的沙盒环境(基础的隔离环境,包括网络、存储等)时发生了错误。这种错误通常出现在 Pod 正在被删除或重启的过程中。常见原因容器运行时问题:问题可能出现在底层的容器运行时(例如 Docker、containerd),例如进程卡死、响应超时或内部故障。资源释放问题:Pod 相关资源(如网络接口、存储卷)清理不彻底或失败。节点问题:节点硬件故障、操作系统问题、或是资源极度紧张(如 CPU、内存不足)可能导致操作失败。系统调用失败:底层的系统调用(如与网络或存储相关的调用)可能因权限不足、配置错误或系统问题而失败。Kubernetes 组件问题:kubelet 或 Kubernetes API 服务本身的故障或错误配置可能导致操作无法正确执行。处理方式检查容器运行时日志: 查看容器运行时(如 Docker、containerd)的日志,寻找任何错误或异常信息。 重启容器运行时服务可能有助于解决挂起或死锁问题。审查资源清理: 检查与 Pod 相关的网络接口和存储卷,确认它们是否已经被正确释放和清理。 如果发现资源泄露或清理不彻底,可能需要手动介入清理或调整自动清理流程。节点健康检查: 检查节点的 CPU、内存、磁盘空间等资源使用情况。 检查节点的系统日志(如 /var/log/messages、/var/log/syslog)和内核日志(dmesg)。系统配置和权限: 确保系统配置正确,特别是与网络和存储相关的配置。 检查是否有任何安全策略或权限设置阻碍了正常操作。Kubernetes 组件状态: 检查 kubelet 和 Kubernetes API 服务的状态和日志。 如果 kubelet 出现问题,考虑重启 kubelet 服务。15.SetupNetworkErrorSetupNetworkError 在 Kubernetes 环境中通常指 Pod 在设置网络(如分配 IP、设置网络路由等)过程中遇到错误。这可能导致 Pod 无法与其他 Pod 或服务正常通信。常见原因网络插件故障:如果使用的 CNI(容器网络接口)插件出现问题或配置错误,可能导致网络设置失败。IP 地址耗尽:如果集群中可分配的 IP 地址耗尽,新的 Pod 将无法获得 IP 地址。主机网络问题:节点上的网络问题(如 DNS 问题、路由问题、网络接口问题)也会影响 Pod 网络。资源限制:例如,安全策略(如 SELinux)或网络策略可能阻止网络的正常配置。系统错误:底层操作系统或网络堆栈中的错误、驱动问题或硬件故障。处理方式检查 CNI 插件: 确保 CNI 插件正常运行并且配置正确。 检查 CNI 插件的日志以寻找任何错误或警告信息。IP 地址管理: 检查 IP 地址池,确保还有足够的 IP 地址可供分配。 如果 IP 地址耗尽,考虑清理未使用的 IP 或扩展地址池。节点网络状态: 检查涉及的节点上的网络配置,包括 DNS、路由和网络接口。 使用命令如 ip addr, ip route, nslookup 等检查网络状态。审查资源限制和安全策略: 检查是否有任何网络策略或安全策略(如 SELinux)影响 Pod 网络设置。 确保这些策略正确配置,允许所需的网络流量和操作。操作系统和硬件检查: 检查操作系统的日志和状态,查看是否有与网络相关的错误或警告。 如果怀疑是硬件问题,如网络适配器故障,检查相应的硬件状态和日志。16.TeardownNetworkErrorTeardownNetworkError 在 Kubernetes 中通常表示在拆除或清理 Pod 的网络设置时遇到了问题。这种错误发生在 Pod 生命周期的末尾,当 Pod 被删除或重启时,其网络配置需要被清理。常见原因CNI 插件问题:容器网络接口(CNI)插件可能因为内部错误或配置不当导致无法正确拆除网络。资源释放问题:IP 地址或其他网络资源可能没有被正确释放回网络池。节点通信问题:拆除网络时,如果节点间的通信存在问题,可能导致网络设置无法正确拆除。Pod 状态异常:如果 Pod 在拆除网络时处于非正常状态,可能会导致清理过程失败。权限不足:执行网络拆除操作的进程可能因权限不足无法执行必要的步骤。处理方式检查 CNI 插件日志: 检查 CNI 插件的日志文件以寻找相关的错误信息。 验证 CNI 插件是否正确安装和配置。资源释放检查: 检查 IP 地址和网络资源是否被正确释放。 在网络池中查看是否有僵尸 IP 地址或未正确清理的资源。节点间通信检查: 确保涉及的节点间可以互相通信。 使用网络诊断工具(如 ping、traceroute)检查节点间网络连接。检查 Pod 状态: 使用 kubectl get pods 和 kubectl describe pod <pod-name> 查看 Pod 的当前状态和事件日志。 如果 Pod 处于异常状态,尝试解决这些问题后再进行网络拆除。权限检查: 确保执行网络拆除的进程具有足够的权限。 检查与安全策略相关的设置,如 SELinux、AppArmor 等。———————————————— 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。原文链接:https://blog.csdn.net/weixin_46660849/article/details/134110477
2024年-5月-21日
285 阅读
0 评论
技术
置顶
Ingress 配置SSL证书,启用HTTPS
构建TLS站点(1)准备证书,在k8s的控制节点操作openssl genrsa -out tls.key 2048openssl req -new -x509 -key tls.key -out tls.crt -subj /C=CN(国别)/ST=XX(省份)/L=xx(城市)/O=DevOps/CN=www.lucky.com(域名)2)生成secret,在k8s的控制节点操作kubectl create secret tls tomcat-ingress-secret --cert=tls.crt --key=tls.key(3)查看生成的secret详细信息操作: kubectl describe secret secret名字 (4)配置修改ingress配置文件在配置文件里的spec字段下增加以下代码 tls: - hosts: - tomcat.lucky.com secretName: tomcat-ingress-secret如图保存退出,(5)更新ingress[root@23master ingress]# kubectl apply -f ingress-myapp.yaml(6)、在浏览器打开域名查验是否已配置成功,浏览器访问https://XXX.com
2024年-5月-21日
453 阅读
0 评论
技术
置顶
Harbor无法登陆,报错……unauthorized: authentication required
无法在节点服务器上登陆harbor,故障报错如下:奇怪的是在浏览器上是正常登陆,经过询问得知,harbor服务器变更过IP,由此根据提示大体可知原因,安装时的做的证书跟现在的IP对不上,导致无法完成认证授权,解决办法大体有两个:一个是把IP修改为原有IP,第二个就是删除旧证书,重新生成现在IP的证书即可。方案一、1、修改harbor服务器IP,如将现在192.168.40.168修改为原IP192.168.181,重启网络2、修改节点服务器docker配置文件的ip,将insecure-registries后的IP,修改为旧IP路径为 /etc/docker/daemon.json3、重新加载docker配置文件4,重新登陆,成功登陆 方案二:删除原有的证书,重新配置证书。为Harbor自签发证书[root@192 ~]# hostnamectl set-hostname harbor && bash[root@harbor ~]# mkdir /data/ssl -p[root@harbor ~]# cd /data/ssl/生成ca证书:openssl genrsa -out ca.key 3072生成一个3072位的key,也就是私钥openssl req -new -x509 -days 3650 -key ca.key -out ca.pem生成一个数字证书ca.pem,3650表示证书的有效时间是3年,按箭头提示填写即可,没有箭头标注的为空:生成域名的证书:openssl genrsa -out harbor.key 3072生成一个3072位的key,也就是私钥openssl req -new -key harbor.key -out harbor.csr生成一个证书请求,一会签发证书时需要的,标箭头的按提示填写,没有箭头标注的为空:签发证书:openssl x509 -req -in harbor.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out harbor.pem -days 3650显示如下,说明证书签发好了:如果是之前登陆过harbor会在 ~/.docker/config.json这个文件保存之前的信息,需要变更为新的IP,或者直接删除,当再次登陆成功里会自动生成。查看当前密钥:cat ~/.docker/config.json如果是报错如下:Error response from daemon: Get "https://192.168.40.168/v2/": tls: failed to verify certificate: x509: cannot validate certificate for 192.168.40.168 because it doesn't contain any IP SANs需要 排查docker的daemon.json文件,正常需要添加harbor的镜像地址:如下图包括这段: "insecure-registries":["192.168.40.168"],修改保存后,需要重新加载,并重启docker.[root@ctdnode2 ~]# systemctl daemon-reload[root@ctdnode2 ~]# systemctl restart docker
2024年-5月-19日
303 阅读
0 评论
技术
2024-5-19
harbor无法启动排查
之前在VM里安装过的harbor一直挂机太久没启动,现在继续开起居然发现无法打开?一查进程,原来是harbor没启动找到安装路径执行下启动命令即可[root@harbor]# cd /data/install/harbordocker-compose start其中harbor默认的账号密码:admin/Harbor12345,如果找不到可以在配置文件harbor.yaml可以找到。附:如果docker-compose start启动harbor之后,还是访问不了,可以尝试下重启虚拟机再次启动。
2024年-5月-19日
257 阅读
0 评论
技术
2024-2-18
k8s vs k3s 差异解析 二者该如何选择
目前,我们看到K3s或轻量级的Kubernetes发行版,轻巧、高效、快速,占用空间极小。鉴于目前企业对于在生产环境中使用K3s还是K8s感到纠结。我们就此讨论一K3s和K8s各自的独特之处。如果你只想在你的企业中使用其中之一,想避免选择的纠结,请和我一起前进。让我们开始吧!什么是 K3s?K3s是Rancher实验室的一个轻量级Kubernetes发行版,是由CNCF完全认证的Kubernetes产品。在K3s中,我们看到运内存占用或集群组件的二进制文件很小。这意味着K3s的体积很小。由于K3s的二进制文件很小,所以它是非常轻量级的,这使得安装过程更快。此外,用这种轻量级的Kubernetes部署应用程序也更快。K3s有一个基础二进制包,其大小不到100MB。由于它如此之小,我们甚至可以在Raspberry Pi(价格低廉的小型计算机硬件)中运行一个K3s集群。K3s Working Structure(Source: K3s)K3s的优势小型K3s 的最大优势是它的尺寸最小(小于 100 MB),这有助于它以最少的设置在小型硬件中启动 Kubernetes 集群。快速部署curl -sfL https://get.k3s.io | sh -检查就绪代码takes maybe 30 secondsk3s kubectl get node轻量K3s 由于内存占用小,非常轻量,这有助于 Kubernetes 快速启动和运行。这意味着包含运行集群所需的所有非容器化组件的二进制文件更小。持续集成K3s,由于其轻量级的环境和小尺寸,有助于持续集成。它有助于将来自多个贡献者的代码自动集成到单个项目中。物联网和边缘计算的完美选择由于支持 ARM64 和 ARMv7,K3s 对于要在资源受限的物联网设备上分发Kubernetes 非常有效。简单和安全小于 100 MB 的单个二进制文件封装了 K3s,这使得它变得简单,而且单个二进制文件易于保护,副作用更少。什么是K8s?Kubernetes或K8s是最流行的管理容器的编排工具。它具有可移植性、灵活性和可扩展性,同时支持命令式/声明式配置和自动化,作为CNCF的一个毕业项目,其拥有一个庞大的生态系统。Kubernetes。终极指南围绕可扩展和可靠服务的需求每天都在成倍增加。市场的驱动力是客户要求他们最喜欢的服务拥有零停机时间,而公司每停机一分钟就会损失数百万美元。如果你遇到过负责保持系统运行的空间,你会[...]。Kubernetes是为适应大规模配置(多达5000个节点)和帮助在生产环境中部署应用程序而设计的。K8s的优势可移植性Kubernetes具有高度的可移植性,因为大量的基础资源和环境配置都使用Kubernetes。大多数其他编排器都缺乏这种可移植性,因为它们与特定的运行时或基础设施绑在了一起。灵活Kubernetes非常灵活,因为它实际上可以与任何容器运行时(运行容器的程序)一起工作。它是Kubernetes集群的一部分,它依靠CRI-O将Kubernetes与CRI(容器运行时接口)集成。但是,这种整合并不适用所有可用的容器运行时,例如runc或Rkt。它使用kubelet来调度容器。多云能力Kubernetes是供应商无关的,这意味着它可以在任何可用的基础设施上运行,包括公共云、私有云和混合云。可扩展性根据传入流量来扩展应用程序的能力是任何现代基础设施的基本功能。HPA(HorizontalPod Autoscaler)是Kubernetes中的一个内置资源,它决定了一个服务的副本数量。在Kubernetes中,弹性是一个高度自动化的核心组件。开放源代码Kubernetes是开源的,属于CNCF的范畴,因此与其他工具有更好的兼容性,也有助于整个项目在社区驱动的贡献者帮助下快速修复错误和发布。k8s与k3s:区别K3s在功能上与K8s没有什么不同,但它们有一些区别,使它们显得独特。K3s能比K8s更快地部署应用程序。不仅如此,K3s可以比K8s更快地启动集群。K8s是一个通用的容器编排器,而K3s是一个专门为在裸金属服务器上运行Kubernetes而打造的容器编排器。Kubernetes使用kubelet,这是一个在每个Kubernetes节点上运行的代理,对该节点上运行的容器进行循环控制。这个代理程序在容器内运行。而K3s并不使用kubelet,它在主机上运行kubelet,使用主机的调度机制来运行容器。同样,我们可以看到,K3S由于体积小,所以是轻量级的,这有助于它在RaspberryPi等资源有限的物联网设备中运行集群。相比之下,我们可以看到,普通的Kubernetes或K8s在物联网或边缘计算设备中是不可行的。另外,K3s同时支持ARM64和ARMv7的二进制文件结构。Kubernetes或K8s可以托管运行于多个环境中的工作负载,而K3s只能托管在单一云中运行的工作负载。这主要是因为K3s不包含在多个云上维护复杂的工作负载的能力,因为它的规模很小。同时,我们可以看到 Kubernetes 借助其大规模的能力,在托管工作负载和多云环境中运行集群具有优势。K3s是一个独立的服务器,与K8s不同,它是Kubernetes集群的一部分。K8s依靠CRI-O来整合Kubernetes与CRI(容器运行时接口),而K3s使用CRI-O与所有支持的容器运行时兼容。K8s使用kubelet来调度容器,但K3s使用主机的调度机制来调度容器。K3s使用kube-proxy来代理Kubernetes节点的网络连接,但K8s使用kube-proxy来代理单个容器的网络连接。它还使用kube-proxy来设置IP伪装,而K3s不使用kube-proxy来做这个。同样,K8s使用kubelet来监视Kubernetes节点的配置变化,而K3s不监视Kubernetes节点的配置变化。相反,它从Kubernetes控制平面接收包含配置信息的部署清单,并做出相应的改变。当涉及到大规模数据环境的编排(自动化任务的编排和协调)时,Kubernetes非常有优势,因为它有存储大量数据的数据库和编排大量对象的能力。同时,k3s对小规模数据的情况也是比较有用的。存储在一个小于100MB的二进制文件中,这将有助于快速启动集群,更快地调度pod和其他任务。k3s有比k8s更严格的安全部署,因为其攻击面小。k3s的另一个优势是,它可以减少安装、运行或更新Kubernetes集群所需的依赖性和步骤。我应该选择k3s还是k8s?中等市值的企业可以决定同时使用K3s和K8s从上面的讨论中可以看出,K3s和K8s都有其优点和缺点,这使得它们彼此之间有独特的区别。两者都非常有用,但鉴于业务情况,不同业务场景的用法会也不一样。我们已经看到了K8s对于大型应用的好处,牢记一点,一个处理大量数据的高市值企业,其工作负载分布在多个云服务器中,应该使用K8s,这将在很多方面受益。中等市值的企业可以同时使用K3s和K8s,因为企业在运营过程中不会有确定的吞吐量。他们可以从使用K8s来处理大型工作负载中受益,而对于小规模生产过程中需要快速运行集群的情况,使用K3s会有更有优势。保持K3s和K8s之间的平衡可以帮助企业在保持正常运营的同时节省大量的资金。没有任何大型应用的小市值企业可以自愿选择K3s,因为K3s在部署小工作负载的应用时非常快速,而且安装、运行和更新也很容易。热衷于物联网和边缘计算的独立开发者选择K3s作为他们的Kubernetes发布环境会更大优势。他们使用许多计算资源受限的硬件,如RaspberryPi和其他。我们都知道K3s是以一个小的单一二进制文件出现的,并且支持在ARM64和ARMv7的物联网设备上运行。最后的想法您可能认为 k3s 比“全脂”k8s 更好,但让我提醒您 k3s 存在局限性。目前,k3s 不支持在主节点上运行除 SQLite 以外的任何其他数据库,也不支持多个主节点。因此,在选择默认容器编排器时,定义需求和目标非常重要。我希望你在这篇文章之后对 Kubernetes 和 k3s 有相当程度的了解。如果您想学习和探索,官方教程将是一个很好的起点。转自:https://www.modb.pro/db/161082原文链接:https://www.cnblogs.com/yuwen01/p/16470772.html
2024年-2月-18日
561 阅读
0 评论
技术
2024-1-18
ubuntu防火墙和端口开放状态查看、开启和关闭
本文主要介绍ubuntu的防火墙开放端口、ubuntu防火墙关闭、开启、重启、开启/禁用相应端口等相关命令使用。 1、ubuntu的防火墙启用 sudo ufw enable sudo ufw default deny 作用:开启了防火墙并随系统启动同时关闭所有外部对本机的访问(本机访问外部正常)。 2、ubuntu的防火墙关闭 sudo ufw disable 3、ubuntu查看防火墙状态命令 sudo ufw status 4、开启/禁用相应端口或服务举例 进入Ubuntu 查看80端口的情况,发现80端口并未开启; netstat -ntlp | grep 80 5、允许外部访问80端口 sudo ufw allow 80 6、禁止外部访问80 端口 sudo ufw delete allow 80 7、允许此IP访问所有的本机端口 sudo ufw allow from 192.168.1.1 8、禁止外部访问smtp服务 sudo ufw deny smtp 9、删除上面建立的某条规则 sudo ufw delete allow smtp 10、要拒绝所有的TCP流量从10.0.0.0/8 到192.168.0.1地址的22端口 sudo ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 22 11、可以允许所有RFC1918网络(局域网/无线局域网的)访问这个主机(/8,/16,/12是一种网络分级): sudo ufw allow from 10.0.0.0/8 sudo ufw allow from 172.16.0.0/12 sudo ufw allow from 192.168.0.0/16 推荐设置 sudo apt-get install ufw sudo ufw enable sudo ufw default deny 这样设置已经很安全,如果有特殊需要,可以使用 sudo ufw allow 开启相应服务。
2024年-1月-18日
844 阅读
0 评论
技术
置顶
ubuntu 如果使用命令修改系统的时区
要在Ubuntu上更改时区,可以按照以下步骤进行操作:打开终端(Terminal),如果不是管理执行:sudo -i 然后输入密码切换到root下:1、使用命令timedatectl list-timezones | grep "Asia/Shanghai"来查看当前系统支持的所有时区列表中包含"Asia/Shanghai"关键字的结果。如果没有安装 tzdata 软件包,则需先运行 sudo apt install tzdata 安装该软件包。 选择合适的时区并记住其名称,比如我们选择了"Asia/Shanghai"。输入命令sudo timedatectl set-timezone Asia/Shanghai将时区设置为"Asia/Shanghai"。根据提示输入管理员密码确认操作。重新启动计算机或者通过命令source /etc/profile立即生效。现在就已经成功地将Ubuntu的时区更改为"Asia/Shanghai"。同时执行同步时间命令:如果没有ntpdate命令可以使用 sudo apt install update -y 安装注意事项:这些步骤会影响到整个系统的时间显示和日期相关的应用程序。若想永久性地保存时区设置,可以编辑 /etc/default/rcS 文件,添加 UTC=no 参数后再次重启系统。
2024年-1月-18日
358 阅读
0 评论
技术
1
2
3