Rootop 服务器运维与web架构

2020-04-29
发表者 Venus
阿里云ecs服务器arp映射表与实际mac地址不一致的疑问已关闭评论

阿里云ecs服务器arp映射表与实际mac地址不一致的疑问

最近在排查k8s问题的时候发现arp表中的mac地址和实际的mac地址不一致。但还能通信,这就很疑惑了。(以前也没注意过这个mac地址)
几台服务器都在在同一个可用区、同一个网络同一个安全组下。

# 服务器1
内网IP:172.19.34.91

[root@iZuf60rpsu8z9v5nzviztlZ ~]# ping 172.19.34.89 # ping 服务器2
PING 172.19.34.89 (172.19.34.89) 56(84) bytes of data.
64 bytes from 172.19.34.89: icmp_seq=1 ttl=64 time=0.208 ms

# 查看服务器1的arp

[root@iZuf60rpsu8z9v5nzviztlZ ~]# arp -e
Address                  HWtype  HWaddress           Flags Mask            Iface
172.17.0.9               ether   02:42:ac:11:00:09   C                     docker0
172.19.34.89             ether   ee:ff:ff:ff:ff:ff   C                     eth0

通过arp -e查看arp表,172.19.34.89 ip的mac地址为 ee:ff:ff:ff:ff:ff

# 服务器2

[root@iZuf60rpsu8z9v5nzviztmZ ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.19.34.89  netmask 255.255.240.0  broadcast 172.19.47.255
        ether 00:16:3e:0e:36:60  txqueuelen 1000  (Ethernet)
        RX packets 1248357423  bytes 321629365565 (299.5 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 794943098  bytes 186700299960 (173.8 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

服务器2通过ifconfig查看到的mac地址为 00:16:3e:0e:36:60

为何服务器1上arp表中服务器2的mac地址和实际的eth0网卡的mac地址不一致?

发工单后回答说:
ecs底层是虚拟化的网络,不是传统的物理网络。表项的学习是通过arp代理实现,为了避免大量ARP学习影响组件性能,所以看到的都是同一个MAC ee:ff:ff:ff:ff:ff ,是正常的现象。

同样一个问题,腾讯云回答并没有很直观的得到答案(也不知道是不是我表述有问题)。

再后来腾讯云客服回了个电话也只是说虚拟化架构的问题,并不影响使用。

2020-04-28
发表者 Venus
zabbix报警磁盘使用率高 lsof deleted已关闭评论

zabbix报警磁盘使用率高 lsof deleted

zabbix报警磁盘使用率高 lsof deleted

zabbix提示磁盘使用率达到80%了,但是去看对应的分区,统计大小发现不对。

[root@localhost ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda3       17G  4.2G   13G  25% /
devtmpfs        7.8G     0  7.8G   0% /dev
tmpfs           7.7G     0  7.7G   0% /dev/shm
tmpfs           7.7G  537M  7.2G   7% /run
tmpfs           7.7G     0  7.7G   0% /sys/fs/cgroup
/dev/xvdb1       99G   79G   15G  85% /home
/dev/xvda1     1014M  131M  884M  13% /boot
tmpfs           1.6G     0  1.6G   0% /run/user/0
overlay          17G  4.2G   13G  25% /var/lib/docker/overlay2/26d1ef95672fa668f982e5d65a45d76172017d915d34cc29e1192feb1fe24724/merged
overlay          17G  4.2G   13G  25% /var/lib/docker/overlay2/1a7ac2aa8da4ccb74632f1e19ba58989b4ef90341577e95225c5ea568582a3db/merged
overlay          17G  4.2G   13G  25% /var/lib/docker/overlay2/3525382a68d07254d42c9f9c2767391785dda8bf04f8dd1f780a373cdd34ccca/merged

# 去查home大小

[root@localhost ~]# du -sh /home
9.7G	/home

实际发现才不到10G,很有可能是删除了日志文件,而不是清空文件内容。

# 通过lsof查找标记为删除状态的文件

[root@localhost tmp]# lsof | grep deleted
java        557   560              root    6w      REG              202,3       9248   17719072 /tmp/spring.log.7 (deleted)
.
.
.
省略部分

第二列是进程号

# 查出来有很多重复的,这里直接截取第10列,并根据此列去重

[root@localhost tmp]# lsof | grep deleted | awk '{print $10}' | sort -u
(deleted)
/home/jar/basic/logs/basic-service-2020-04-20.error.log
/home/jar/config/log.log
/home/jar/pay/log.log
/home/jar/product/log.log
/home/jar/product/logs/product-service1-2020-02-11.error.log
/home/jar/sign/log.log
/home/jar/sign/logs/sign-2020-02-11.error.log
/home/jar/zuul/log.log
/home/web/tomcat-ald/logs/catalina.out
/home/web/tomcat-ald/logs/host-manager.2020-02-12.log
/home/web/tomcat-ald/logs/manager.2020-02-12.log
/home/web/tomcat-report/logs/catalina.out
/home/web/tomcat-report/logs/host-manager.2020-02-18.log
/home/web/tomcat-report/logs/manager.2020-02-18.log
/tmp/spring.log.7
/var/log/rabbitmq/log/crash.log.3

这里每个日志都在对应的项目目录下,这样就能查到哪些文件被打开但标记是删除。也可以通过进程号找到对应进程。
挨个去重启相应的服务就会释放打开的文件。

2020-04-27
发表者 Venus
k8s设置secrets自动拉取私库镜像已关闭评论

k8s设置secrets自动拉取私库镜像

# 查看现有secrets

[root@node1 shop-api]# kubectl get secrets
NAME                  TYPE                                  DATA   AGE
default-token-v4cld   kubernetes.io/service-account-token   3      4h5m

# 创建一个私库secrets

[root@node1 shop-api]# kubectl create secret docker-registry harbor --docker-server=reg.xxx.com --docker-username=admin --docker-password=123 --docker-email=admin@xxx.com
secret/harbor created

# 查看创建

[root@node1 shop-api]# kubectl get secrets
NAME                  TYPE                                  DATA   AGE
default-token-v4cld   kubernetes.io/service-account-token   3      4h6m
harbor                kubernetes.io/dockerconfigjson        1      2s

# yaml中添加私库认证信息,截取部分。

spec:
  containers:
  - image: reg.xxx.com/prod/shop-api:0426
	name: java
	ports:
	- containerPort: 8080
	resources:
	  #limits:
	   #cpu: 1
	   #memory: 1024G
	  #requests:
	   #cpu: 1
	   #memory: 1024G
	command: ["java"]
	args: ["-jar","shop-api-0.0.1-SNAPSHOT.jar","--spring.profiles.active=test","--server.port=8080"]
	workingDir: /mnt
   
  # 私库认证
  imagePullSecrets:
  - name: harbor

注意imagePullSecrets和containers配置同级。
这样就会从私库自动认证并拉取镜像。

2020-04-26
发表者 Venus
docker push到harbor私库中报unknown blob错误已关闭评论

docker push到harbor私库中报unknown blob错误

本地构建好镜像推送到私库。
执行docker push到harbor私库中时报unknown blob错误

[root@node1 ~]# docker push reg.xxx.com/prod/filebeat-java:0426
The push refers to repository [reg.xxx.com/prod/filebeat-java]
e52576dc1f49: Pushing [==================================================>]  3.584kB
ffdb94571df7: Pushing [==================================================>]  372.7kB
47fc804728ff: Pushing [>                                                  ]  545.3kB/80.14MB
dab4e68f20a2: Pushing [==================================================>]  6.144kB
6435966ee18f: Pushing [==================================================>]  4.096kB
b1c057a951b8: Waiting 
df654d36e69e: Waiting 
77b174a6a187: Waiting 
unknown blob

网上搜索后说屏蔽掉nginx反向代理中添加的请求头解决
#proxy_set_header Host $host;
具体原因也没查为什么。
PS:我这里用的harbor修改过端口号,用nginx反向代理了harbor。

2020-04-26
发表者 Venus
harbor修改默认的80端口已关闭评论

harbor修改默认的80端口

之前做私库的时候会在harbor中直接加入https证书,但是会占用80和443,如果再添加其它的虚拟主机比较麻烦,这里直接改为其它端口。
再通过物理机上的nginx去反向代理harbor(https)。

harbor修改步骤:
1、配置文件

[root@node1 harbor]# vim harbor.cfg 
ui_url_protocol = http 这里只用http,不像之前改为https

2、服务编排文件修改

[root@node1 harbor]# vim docker-compose.yml 
  proxy:
    image: goharbor/nginx-photon:v1.7.4
    container_name: nginx
    restart: always
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - NET_BIND_SERVICE
    volumes:
      - ./common/config/nginx:/etc/nginx:z
    networks:
      - harbor
    dns_search: .
    ports:
      - 7080:80  # 80改掉
      - 3443:443 # 443改掉
      - 4443:4443

3、私库模板配置文件

[root@node1 harbor]# vim common/templates/registry/config.yml 
auth:
  token:
    issuer: harbor-token-issuer
    realm: $public_url:7080/service/token
    rootcertbundle: /etc/registry/root.crt
    service: harbor-registry

把 realm: $public_url/service/token 改为 realm: $public_url:7080/service/token
这个地方不改的话,会报错:
Error response from daemon: Get https://reg.xxx.com/v2/: unauthorized: authentication required

# 创建harbor

[root@node1 harbor]# sh install.sh 

#物理机配置nginx反向代理7080端口,加上https。
location / {
	proxy_pass http://127.0.0.1:7080;
}

再docker login即可。