ipvsadm启动报错: /bin/bash: /etc/sysconfig/ipvsadm: No such file or directory

问题

ipvsadm启动报错

 journalctl -xe或查看日志可发现错误是:/bin/bash: /etc/sysconfig/ipvsadm: No such file or directory

解决

ipvsadm --save > /etc/sysconfig/ipvsadm  创建一下就可以正常启动了

 

#!/bin/bash echo "192.168.1.11 k8s-master01" >>/etc/hosts echo "192.168.1.12 k8s-node01" >>/etc/hosts echo "192.168.1.13 k8s-node02" >>/etc/hosts yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF yum install wget jq psmisc vim net-tools telnet yum-utils device-mapper-persistent-data lvm2 git -y systemctl disable --now firewalld setenforce 0 sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/sysconfig/selinux sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config swapoff -a && sysctl -w vm.swappiness=0 sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab yum -y install chrony systemctl enable --now chronyd chronyc tracking chronyc -a makestep ulimit -SHn 65535 echo "* soft nofile 65536" >> /etc/security/limits.conf echo "* hard nofile 131072" >> /etc/security/limits.conf echo "* soft nproc 65535" >> /etc/security/limits.conf echo "* hard nproc 655350" >> /etc/security/limits.conf echo "* soft memlock unlimited" >> /etc/security/limits.conf echo "* hard memlock unlimited" >> /etc/security/limits.conf yum install ipvsadm ipset sysstat conntrack libseccomp -y modprobe -- ip_vs && modprobe -- ip_vs_rr && modprobe -- ip_vs_wrr && modprobe -- ip_vs_sh && modprobe -- nf_conntrack cat <<EOF > /etc/modules-load.d/ipvs.conf ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_fo ip_vs_nq ip_vs_sed ip_vs_ftp ip_vs_sh nf_conntrack ip_tables ip_set xt_set ipt_set ipt_rpfilter ipt_REJECT EOF systemctl enable --now systemd-modules-load.service cat <<EOF > /etc/sysctl.d/k8s.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 fs.may_detach_mounts = 1 net.ipv4.conf.all.route_localnet = 1 vm.overcommit_memory=1 vm.panic_on_oom=0 fs.inotify.max_user_watches=89100 fs.file-max=52706963 fs.nr_open=52706963 net.netfilter.nf_conntrack_max=2310720 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_keepalive_intvl =15 net.ipv4.tcp_max_tw_buckets = 36000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_max_orphans = 327680 net.ipv4.tcp_orphan_retries = 3 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 16384 net.core.somaxconn = 16384 EOF sysctl --system yum install docker-ce-20.10.* docker-ce-cli-20.10.* -y cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF modprobe -- overlay modprobe -- br_netfilter cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sysctl --system mkdir -p /etc/containerd containerd config default | tee /etc/containerd/config.toml cat > /etc/crictl.yaml <<EOF runtime-endpoint: unix:///run/containerd/containerd.sock image-endpoint: unix:///run/containerd/containerd.sock timeout: 10 debug: false EOF 这个脚本有语法错误吗
最新发布
03-29
<think>好的,我现在需要仔细检查用户提供的这个Bash脚本是否存在语法错误。首先,我应该逐行阅读脚本,看看是否有明显的语法问题。 首先,脚本开头是#!/bin/bash,这没问题。接下来几行是向/etc/hosts追加主机名和IP地址,使用echo命令和>>重定向,看起来正确。 然后是安装yum-utils等包,这部分命令也正确。添加阿里云的Docker仓库用的是yum-config-manager,参数正确。接下来创建kubernetes.repo文件,使用cat <<EOF,这里有没有正确的EOF结束符?检查发现,用户确实在EOF前后有正确的缩进,不过Bash中heredoc的结束标记应该顶格写。但用户可能因为排版问题在EOF前有空格,这会导致问题。例如: cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] ... EOF 这里如果EOF前面有空格的话,Bash会找不到结束标记。查看用户的脚本,这里的EOF是顶格写的吗?在用户提供的代码中,这部分看起来是顶格的,所以没问题。 接下来安装wget、jq等工具,命令正确。然后是停止防火墙和SELinux的设置,这部分命令也没问题。swapoff和修改fstab的部分,sed命令的语法是否正确?用户使用了sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab,这个正则表达式是匹配非#开头的包含swap的行,并在行首添加#,即注释掉这些行。这里的替换命令用的是s@^@#@,即在行首插入#,正确。 安装chrony并启用,设置时间同步,这部分没问题。ulimit和limits.conf的配置,使用echo追加内容到文件,格式正确。安装ipvsadm等工具,加载内核模块,这部分modprobe命令正确,但注意用户用了--参数,可能为了避免模块名称以-开头的问题,这里应该没问题。 创建/etc/modules-load.d/ipvs.conf,内容是否正确?模块列表是否正确?看起来没问题。然后启用systemd-modules-load服务,这部分正确。 接下来的sysctl配置,创建k8s.conf文件,内容是否正确?键值对格式正确。然后sysctl --system应用更改,没问题。 安装指定版本的docker-ce,用户用了通配符20.10.*,需要确保仓库中存在这些版本,否则安装会失败,但这不属于语法错误,属于运行时问题。 配置containerd的模块加载,overlay和br_netfilter,然后modprobe加载。这部分正确。接着是sysctl配置,正确。 创建/etc/containerd/config.toml,使用containerd config default导出默认配置,这里是否正确?命令正确,但注意管道是否执行成功,不过属于运行时问题,非语法错误。 最后创建/etc/crictl.yaml,使用cat <<EOF,结束标记EOF是否正确顶格?用户提供的代码中这部分EOF是顶格的,所以没问题。 现在检查是否有遗漏的结束符或者语法错误。例如,所有的heredoc是否都正确关闭。在用户的脚本中,所有的cat <<EOF都有对应的EOF,并且位置正确。因此,暂时没有明显的语法错误。 可能的潜在问题:在sed命令中,例如修改SELinux配置的部分,路径是否正确?用户用了/etc/sysconfig/selinux和/etc/selinux/config,这取决于系统,但命令本身语法正确。 另外,在设置sysctl时,是否有拼写错误?比如net.ipv4.ip_forward = 1,等号两边的空格是否正确?sysctl的语法允许等号周围有空格,所以没问题。 总结:整个脚本在语法上是正确的,没有明显的错误。但可能存在环境依赖问题,如软件包版本不可用、模块加载失败等,但这不是语法问题。用户的问题仅询问语法错误,因此应回答没有语法错误。</think>这个Bash脚本整体语法结构正确,但存在几个需要注意的潜在问题,我们逐层分析如下: --- ### 一、基础语法检查 1. **heredoc格式** 所有`<<EOF`内容块都正确闭合,结束标记`EOF`均顶格书写,符合Bash语法要求。例如创建`/etc/yum.repos.d/kubernetes.repo`和`/etc/crictl.yaml`的操作均正确。 2. **命令语法** `sed`、`echo`、`yum`等命令参数使用规范,例如: ```bash sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config # 正确使用分隔符`#` swapoff -a && sysctl -w vm.swappiness=0 # 正确使用逻辑操作符`&&` ``` --- ### 二、潜在问题排查 #### 1. **重复加载内核模块** 脚本中两次加载`ip_vs_sh`模块: ```bash modprobe -- ip_vs && modprobe -- ip_vs_sh ... # 第1次加载 cat <<EOF > /etc/modules-load.d/ipvs.conf # 第2次声明 ip_vs_sh # 此处重复 EOF ``` *虽不影响执行,但冗余声明可能引发维护困惑。* #### 2. **`containerd`配置生成命令** 以下命令中的管道操作可能因环境问题失败: ```bash containerd config default | tee /etc/containerd/config.toml ``` *若环境中未安装`containerd`,此命令会报错。建议先安装`containerd`再执行配置生成。* #### 3. **Docker版本指定** 安装命令`yum install docker-ce-20.10.*`使用通配符指定版本: ```bash yum install docker-ce-20.10.* # 依赖仓库中实际存在的版本 ``` *若阿里云镜像站无匹配版本,会导致安装失败。建议明确版本号或检查仓库可用性。* --- ### 三、功能逻辑分析 #### 1. **环境初始化** - **主机名解析**:通过`/etc/hosts`静态添加节点IP映射,适合小型集群。 - **软件源配置**:使用阿里云镜像加速安装,避免网络延迟。 - **安全设置**:关闭防火墙和SELinux,简化集群通信,但生产环境需谨慎。 #### 2. **系统调优** - **资源限制**:通过`limits.conf`提升文件描述符和进程数限制。 - **内核参数**:`sysctl`优化网络性能和容器运行时需求。 - **IPVS配置**:为Kubernetes Service实现负载均衡做准备。 #### 3. **容器运行时** - **Docker安装**:安装指定版本并间接依赖`containerd`。 - **`containerd`配置**:生成默认配置并适配CRI(容器运行时接口)。 --- ### 四、验证建议 1. **逐段执行测试** 将脚本按功能块分段执行,观察报错信息。例如: ```bash # 测试主机名解析 echo "192.168.1.11 k8s-master01" >>/etc/hosts ping -c 1 k8s-master01 # 测试软件包安装 yum install -y yum-utils device-mapper-persistent-data lvm2 ``` 2. **日志检查** 通过`journalctl -u docker`或`systemctl status containerd`查看服务状态。 --- ### 五、完整修正建议 若需进一步完善脚本: 1. **增加错误中断** 在脚本开头添加`set -e`,确保命令失败时立即退出。 2. **版本明确化** 替换通配符为具体Docker版本,如`docker-ce-20.10.23`。 3. **依赖前置检查** 添加包存在性检查,例如: ```bash if ! command -v containerd &> /dev/null; then yum install -y containerd fi ``` --- **结论**:当前脚本**无语法错误**,但存在少量冗余代码和依赖风险,需根据实际环境调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值