在 docker-compose 中使用 network:host

参考docker官方文档: https://docs.docker.com/compose/compose-file/#net

平时使用 docker run 命令可以简单使用 –net=host 方式使用主机网络模式,这篇文章记录下在 docker-compose 下如何使用。

network_mode

在集群模式下无法使用。单机模式下使用如下:

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

例如:

version:  '3.2'
  abc:
    image: abc/edf
    container_name: abc
    restart: always
    network_mode: "host"

参考资料


kubernetes 更改iptables模式为ipvs

Kubernetes 原生的 Service 负载均衡基于 Iptables 实现,其规则链会随 Service 的数量呈线性增长,在大规模场景下对 Service 性能会有严重的影响。具体测试可参考这篇文章:《华为云在 K8S 大规模场景下的 Service 性能优化实践》

本文主要记录操作层面的。

所有节点运行

在每个节点上安装ipvs,加载相关系统模块

#!/bin/bash

# 每台机器都要运行modprobe

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

yum install -y ipset ipvsadm

k8s master运行

修改 kube-proxy 的配置,明确使用 ipvs 方式。

#!/bin/bash

rm *.yaml;
kubectl get configmap kube-proxy -n kube-system -oyaml >kube-proxy-configmap.yaml
sed -e '/mode:/s/""/"ipvs"/g' kube-proxy-configmap.yaml  >kube-proxy-configmap-ipvs.yaml
kubectl replace -f kube-proxy-configmap-ipvs.yaml
kubectl get pod  -n kube-system|grep kube-proxy|awk '{print "kubectl delete po "$1" -n kube-system"}'|sh

# https://segmentfault.com/a/1190000015104653
# https://blog.frognew.com/2018/10/kubernetes-kube-proxy-enable-ipvs.html

# kubectl logs kube-proxy -n kube-system
# ipvsadm -ln

sudo 出现unable to resolve host

每次执行sudo 就出现这个警告讯息:

sudo: unable to resolve host xxx

虽然有提示,其实并不影响执行。最近在运行某个脚本也出现了这个提示。这就不得了了。

解决办法也简单,在/etc/hosts中设定xxx(hostname) 指向 127.0.0.1 的 IP 即可:

127.0.0.1       localhost xxx  #要保证这个名字与 /etc/hostname中的主机名一致

# 或改成下面这两行
127.0.0.1       localhost
127.0.0.1       xxx

yarn 容器化及基本操作

容器化早已深入我服务器的方方面面。最近用到yarn,下面记录下前端框架 yarn 的镜像构建的过程,和一些常用的 yarn 的命令。

Dockerfile

FROM node:10

# Debian packages
RUN apt-get -y update && \
  apt-get install -y --no-install-recommends \
    fakeroot \
    lintian \
    rpm \
    ruby \
    ruby-dev \
  && \
  apt-get clean && \
  rm -rf /var/lib/apt/lists/*

# Ruby packages
RUN gem install fpm

WORKDIR /var/www/html

我把它编译成了镜像kelvinblood/yarn

docker-compose

version:  '3.2'

  yarn:
    image: kelvinblood/yarn
    restart: always
    container_name: yarn
    stdin_open: true
    tty: true
    volumes:
      - ./:/var/www/html:rw
      - /usr/local/share/.cache/yarn:/usr/local/share/.cache/yarn
#    entrypoint:  [ "/bin/bash"]
    entrypoint:
      - npm
      - run
      - watch
      - --
      - --watch-poll

中间那个entrypoint是为了测试用的,下面是生产用的。

常用操作

yarn config set registry 'https://registry.npm.taobao.org'
SASS_BINARY_SITE=http://npm.taobao.org/mirrors/node-sass yarn
yarn add china-area-data
yarn add sweetalert
npm run watch-poll

参考资料