如何确定某网卡是哪个容器在使用?

55038137449

最近在做kubernetes的网络测试,排查问题时需要通过网卡确认时哪个容器在跑,具体过程如下:

  1. 确认问题网卡

    route -n
    

    1584609896662

    这是我们的目标网卡 calif036cbd2081

    查看它的接口索引值:

    ip link show calif036cbd2081
    

    1584610154380

    记住前面输出的数字 191

  2. 在所有容器中查看网卡信息。

    以下是运行脚本 test.sh,将在本机上所有容器中运行 ip a 命令

    1584626118231

    运行命令:

    ./test @if191
    

    1584610212163

    在此我们找到了目标容器

  3. 进入容器中确认,确实是这个IP的拥有者

    1584610305790


树莓派新手步骤

最近入手了树莓派4b,这篇文章记录一些使用的要点。5年前也曾买过类似的开发板,可以看这里: BB-Black

照片

1584420813388

1584420822971

1584420830181

1584420834660

查看型号

树莓派是一款来源于英国慈善组织“Raspberry Pi 基金会”的卡片电脑,至今已经发行在售了 9 个型号:

在命令行中输入:

cat /proc/cpuinfo

会打印类似下面的信息:

Hardware        : BCM2835
Revision        : c03111
Serial          : 100000001f00eb37
Model           : Raspberry Pi 4 Model B Rev 1.1

Revision 是板卡型号编码,Model 是型号名称。

Hardware: BCM2835 代表树莓派系列的硬件架构码。

生成树莓派系统信息截图

Neofetch 是用 Bash 脚本编写的,创建系统信息截图的开源工具,可以识别近 150 种不同的操作系统,当然也包含树莓派 Raspbian 操作系统。

sudo apt-get install neofetch
neofetch

修改 ~/.config/neofetch/config.conf 文件还能定制系统信息。下面是我的树莓派截图。

1584447502431

设置开机不加载图形化界面

树莓派性能应该留在刀刃上,图形界面这种吃性能的东西应该默认关闭。

$ raspi-config 

“Boot Options” -> “Desktop / CLI” -> “Console”

开启ssh服务

systemctl enable ssh
systemctl restart ssh

更换系统源

先确认树莓派使用的源地址:

$ /bin/cat /etc/apt/sources.list
deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
#deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi

可以确认该树莓派基于 debian buster

将其备份后使用清华的源,使用同样 buster 版本。如果你的是其它版本的,查看其他版本的。https://mirror.tuna.tsinghua.edu.cn/help/raspbian/

更换pip源

pip国内的一些镜像

  阿里云 http://mirrors.aliyun.com/pypi/simple/   中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/   豆瓣(douban) http://pypi.douban.com/simple/   清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/   中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

修改源:

mkdir -p  ~/.pip/
vi ~/.pip/pip.conf

index-url = https://pypi.tuna.tsinghua.edu.cn/simple

扫描局域网查看树莓派IP

https://www.advanced-ip-scanner.com/cn/

安装好扫描本局域网的IP即可。

1584420390098

安装docker

curl -sSL https://get.docker.com| sh
sudo usermod -aG docker pi && sudo reboot

由于树莓派基于arm平台,和我们平时所用的x86服务器不相同,所以常见的镜像在这里都是不能用的,需要从dockerfile重新构建镜像才可使用。

打印GPIO管脚信息

pinout

1584447755471

查看ARM板参数

cat /proc/cpuinfo 

ARMV7 processor rev 3(v71) 是指基于ARM V7 指令集的处理器。

1584582725796

参考资料


树莓派安装 node-exporter 备忘

源码安装

wget https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.14.0.linux-armv7.tar.gz

tar zxvf node_exporter-0.14.0.linux-armv7.tar.gz
mv node_exporter-0.14.0.linux-armv7/node_exporter /usr/local/bin

运行

直接运行

/usr/local/bin/node_exporter &

systemd 管理运行

vi /usr/lib/systemd/system/node_exporter.service

[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

设定开机启动并启动:

systemctl enable node_exporter
systemctl start node_exporter

查看启动状态

systemctl status node_exporter

Mac 配置 WireGuard 客户端

  1. 安装 WireGuard 客户端

    brew install wireguard-tools
    
  2. 配置 WireGurad 客户端

    sudo mkdir /usr/local/etc/wiregurad 
    sudo touch /usr/local/etc/wiregurad/wg0.conf
    

    wg0.conf 文件如下:

    [Interface]
    Address = 10.200.200.2/32
    PrivateKey = <client_private_key>
    MTU = 1420
       
    [Peer]
    PublicKey = <server_public_key>
    Endpoint = <SERVER_IP:SERVER_PORT>
    AllowedIPs = 10.200.0.0/16
    PersistentKeepalive = 25
    
  3. 启动 WireGuard

    sudo wg-quick up wg0-client
    sudo wg show
    

kubernetes限制节点可的 pod 数量

55038137449

kubernetes 默认每个节点只能启动110个pod,可以在kubelet 中增加启动参数:

--max-pods=60

重启 kubelet 后生效。重启kubelet不会造成已有重启。

现在的kubernetes集群一般是基于 kubeadm 安装的kubernetes,kubelet 启动文件位置为:

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf

原文大致如下:

ExecStartPre=/usr/bin/mkdir -p /sys/fs/cgroup/cpuset/system.slice/kubelet.service
ExecStartPre=/usr/bin/mkdir -p /sys/fs/cgroup/hugetlb/system.slice/kubelet.service

Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_SYSTEM_PODS_ARGS=--pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true"
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-conf-dir=/etc/cni/net.d --cni-bin-dir=/opt/cni/bin"
... ...

ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_SYSTEM_PODS_ARGS $KUBELET_NETWORK_ARGS $KUBELET_DNS_ARGS $KUBELET_AUTHZ_ARGS $KUBELET_CADVISOR_ARGS $KUBELET_CGROUP_ARGS $KUBELET_CERTIFICATE_ARGS $KUBELET_EXTRA_ARGS $KUBELET_INFRA_IMAGE $KUBELET_RES_LIMIT_ARGS $KUBELET_ROTATE $KUBELET_DOCKER_ROOT $KUBELET_NODE_STATUS_ARGS 

添加如下配置:

Environment="KUBELET_NODE_MAX_PODS=--max-pods=6000"

并在最后的 ExecStart 一行 添加启动参数 $KUBELET_NODE_STATUS_ARGS ,重启kubelet即可

systemctl daemon-reload
systemctl restart kubelet.service

Ubuntu 图形化界面登录,报错 sorry,that didn't work.please try again

今天开启电脑后发现 root 用户登录会报这样的错误:

sorry,that didn't work.please try again

实际上命令行登录是没有问题的,说明并不是密码的原因,基本就是桌面环境的原因啦。

vi /etc/pam.d/gdm-autologin
#注释 "auth requied pam_succeed_if.so user != root quiet success"

vi /etc/pam.d/gdm-password
#注释行 "auth requied pam_succeed_if.so user != root quiet success"