ubuntu22 虚拟机 lvs配置
操作系统版本
server版
版本详情:
$ lsb_release -aNo LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.2 LTS
Release: 22.04
Codename: jammy
参考:
官方文档
虚拟化软件
如果使用VMWare Workstation Pro或者Virtualbox安装虚拟机建立工作流,十分推荐链接克隆功能,只需要几秒就可以从模板虚拟机的快照创建一个全新的虚拟机,本篇博客其实也是一篇建立模板的最佳实践。
网络
一般来说虚拟机使用两张网卡满足网络访问需求,即网络地址转换+仅主机,其中仅主机使用固定IP,网络地址转换使用DHCP,比较新的Ubunru中使用netplan作为默认的网络管理工具,执行命令sudo vim /etc/netplan/00-installer-config.yaml可以看到这种模式下的网络配置:
network:ethernets:
enp0s3: # 仅主机网卡
addresses:
- 192.168.56.57/24 # 指定静态IP
enp0s8: # 网络地址转换网卡
dhcp4: true
nameservers: # 指定DNS,在DNS部分另外说明
addresses:
- 8.8.8.8version: 2
DNS相关的配置会在后面提到,这种模式可能出现的问题是一旦关闭NAT网卡的DHCP则无法连接互联网,其本质是OS无法通过DHCP获得默认网关和DNS配置,但某些情况下所有网卡静态IP是必须的,比如部署K8s,否则可能会导致被分配新的IP后组件间无法通信,这里给出一份仅使用NAT网卡的配置,它也适用于多网卡配置静态IP:
network:ethernets:
ens33: # 网络地址转换网卡
dhcp4: false
addresses:
- 192.168.195.50/24 # 指定静态IP
routes: # 指定默认网关
- to: default
via: 192.168.195.2
nameservers:
addresses:
- 8.8.8.8
- 192.168.195.2 # 指定默认网关为DNS服务器version: 2
修改配置文件后执行命令sudo netplan apply,以立即应用更改,注意,SSH登录时,如果变更会造成网络中断,应避免使用命令sudo netplan try,否则在执行命令后将无法确认更改,直到超时后配置自动回滚。此配置下,虚拟机和宿主机可以互ping,需要考虑的问题是防火墙和ICMP回显是否打开,例如无法ping通Windows宿主机的网关地址,需要修改宿主机的防火墙规则:进入防火墙和网络保护-允许应用通过防火墙-更改设置-允许“文件和打印机共享”即可。
如果执行apply命令出现以下警告:
# 配置文件权限警告(generate:1170): WARNING : 10:48:44.225: Permissions for /etc/netplan/00-installer-config.yaml are too open. Netplan configuration should NOT be accessible by others.
服务缺失警告
WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.
执行命令sudo chmod 600 /etc/netplan/00-installer-config.yaml修改配置文件权限(权限必须为600),ovsdb-server.service服务不是必须的,这里不安装它。
对于网络调试,给出以下建议:
# 查看网卡的DNS路由等信息sudo netplan status
查看系统路由
route
查看DNS状态
resolvectl status
解析域名
nslookup baidu.com
从指定的DNS解析域名
nslookup baidu.com 8.8.8.8
Shell脚本解释器
目前,Debian和Ubuntu中,/bin/sh已经默认软链到dash,而非bash,dash拥有更快的执行速度,偏向运行程序,而bash有更多的功能,偏向交互,二者的语法是不同的,例如dash不支持function关键字,因此在Ubuntu默认配置下使用sh <包含function关键字的脚本>会报错,需要使用bash命令运行,而脚本头中指定的解释器只有在特定情况(脚本具有执行权限,且使用.或者source执行)下才能生效。
用户和权限
ubuntu不建议使用root登录,而是使用sudo提权,安装后可配置指定用户的sudo免密:
$ sudo visudo修改
%sudo ALL=(ALL:ALL) ALL
为
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
防火墙
关闭防火墙:
# 查看状态sudo ufw status verbose
关闭
sudo ufw disable
启动
sudo ufw enable
APT源
在22.04中不用修改apt源,系统会自动匹配当前地区最快的镜像。
DNS
当虚拟机联通互联网的网络被配置为DHCP时,将从DHCP服务器自动获得DNS配置,此时可能出现部分域名无法解析的问题,通过执行resolvectl status命令可以看到127.0.0.53的上游DNS服务器,以帮助定位域名解析问题的根本原因:
# 默认DNS无法解析ian@ian:~$ nslookup raw.githubusercontent.com
Server: 127.0.0.53
Address: 127.0.0.53#53
Non-authoritative answer:
Name: raw.githubusercontent.com
Address: 0.0.0.0
Name: raw.githubusercontent.com
Address: ::
指定DNS可解析
ian@ian:~$ nslookup raw.githubusercontent.com 8.8.8.8
当系统自动获得的DNS不能满足需求时,需要手动指定DNS服务器,对于Ubuntu,指定DNS的复杂性主要体现在识别当前使用的网络管理工具,否则系统重启后指定的配置被覆盖或者不能生效。从网络上得到的信息看,至少自18.04版本开始,netplan已经作为默认的网络管理工具,因此需要修改/etc/netplan路径下的配置文件,这里是00-installer-config.yaml,修改详情看前面的网络部分,这里不重复贴出配置内容。另外一种方法是使用静态文件替换/etc/resolv.conf文件,或者将它链接到一个新的文件,并在其中指定DNS。还有一种情况是容器继承主机的DNS配置(比如CoreDNS),当主机DNS仅有网关时,容器将无法成功运行。
时区
执行以下命令:
# 显示当前时区配置timedatectl
设置时区
sudo timedatectl set-timezone Asia/Shanghai
修改为24小时制
echo "LC_TIME=en_DK.UTF-8" | sudo tee -a /etc/default/locale && cat /etc/default/locale
sudo reboot
验证
date
配置命令行
在~/.profile文件中增加,仅仅修改了默认值中的\w为\W,显示当前目录名称,而不是其绝对路径:
# set viewexport PS1="[\e]0;\u@\h: \W\a]${debian_chroot:+($debian_chroot)}[\033[01;32m]\u@\h[\033[00m]:[\033[01;34m]\W[\033[00m]$ "
关闭swap
执行命令sudo swapoff -a立即关闭swap,执行命令sudo vim /etc/fstab注释其中的swap行,永久关闭swap,并删除swap文件sudo rm -rf /swap.img
升级包
如果登录后提示类似43 updates can be applied immediately.这样的内容,可执行命令apt list --upgradable查看能够升级的包,或者执行命令sudo apt upgrade升级(可能会导致操作系统的修订版本号变更,例如从22.04.2变更为22.04.3,修订版本号变更不会有不兼容的变化产生),升级或者安装包的过程中可能会看到这样的交互界面卡住升级过程,需要人工介入:

这是由 needrestart命令触发的,它的主要作用是检查库升级后有那些需要重启的守护进程。默认是交互式的,可以执行命令sudo vim /etc/needrestart/needrestart.conf,复制$nrconf{restart} = 'i';行并取消注释,将i修改为a是自动重启守护进程(先复制后修改,一般情况下可以帮助我们了解默认配置是什么),修改为l是列出需要重启的守护进程,这里根据守护进程的重启影响评估,测试环境可以设置为自动重启。
主机名
如果需要变更主机名,可以执行命令sudo hostnamectl hostname
定制登录提示信息
如果需要定制登录提示信息,可以参考 motd - message of the day,也可以在互联网搜索关键字motd,也可以参考这篇博客:Ubuntu登录提示信息(MOTD)定制与开关,这里做了这些操作:
# 将ENABLED设为0,关闭newssudo vim /etc/default/motd-news
将不需要的提示信息文件移入disable以禁用
禁用策略:
1. 排除已经关闭的,比如news
2. 排除无明确影响的,即根据看到的信息渐进修改
sudo mkdir /etc/update-motd.d/disable
cd /etc/update-motd.d
sudo mv \
10-help-text \
91-release-upgrade \
disable
快捷启用代理
如果ubuntu作为虚拟机,可以通过别名快速设置代理,假设宿主机的代理软件本地http监听端口为10809,并且允许来自局域网的连接,在网关地址为192.168.62.1时,可以在~/.profile中添加别名:
# vpn aliasalias setvpn="export http_proxy=http://192.168.62.1:10809; export https_proxy=http://192.168.62.1:10809"
alias unsetvpn="unset http_proxy; unset https_proxy"
测试:
# 生效source ~/.profile
设置代理
setvpn
测试
curl -I www.goole.com
这里有几个问题需要注意:
- 设置代理的环境变量有很多,比如http_proxy、HTTP_PROXY、ALL_PROXY等,但具体程序会识别不同的环境变量、不同的协议,比如curl可以识别http_proxy、ALL_PROXY,且后者支持socks5协议,而apt只能识别http_proxy,且不支持socks5协议,尽量采取通用的配置;
- 同时设置http_proxy和https_proxy变量,均指向http代理端点,否则https的流量无法代理;
- 当使用sudo时,默认会重置环境变量,因此无法继承非root shell中用于配置代理的环境变量,要改变此行为需要执行sudo visudo命令,在sudoers文件中解除对Defaults:%sudo env_keep += "http_proxy https_proxy ftp_proxy all_proxy no_proxy"行的注释,放行相关的环境变量,变量名大小写敏感;
建立工作空间
将指定目录作为工作空间能够隔离类似.profile的配置文件:
mkdir ~/workspaceecho -e "\ncd ~/workspace\n" >> ~/.profile
还可以配置一些其他的alias快捷方式。
其他常用操作
清理journal日志:
# 查看日志占用空间sudo journalctl --disk-usage
清理一周之前生成的日志
sudo journalctl --vacuum-time=1w
清理超出指定大小的日志
sudo journalctl --vacuum-size=500M