代码量统计 cloc

什么是Cloc

Cloc是一款使用Perl语言开发的开源代码统计工具,支持多平台使用、多语言识别,能够计算指定目标文件或文件夹中的文件数(files)、空白行数(blank)、注释行数(comment)和代码行数(code)。

安装

使用 cloc 命令行可以快速统计代码数量。Github仓库: https://github.com/AlDanial/cloc

可以根据操作系统的不同进行安装:

npm install -g cloc                    # https://www.npmjs.com/package/cloc
sudo apt install cloc                  # Debian, Ubuntu
sudo yum install cloc                  # Red Hat, Fedora
sudo dnf install cloc                  # Fedora 22 or later
sudo pacman -S cloc                    # Arch
sudo emerge -av dev-util/cloc          # Gentoo https://packages.gentoo.org/packages/dev-util/cloc
sudo apk add cloc                      # Alpine Linux
sudo pkg install cloc                  # FreeBSD
sudo port install cloc                 # Mac OS X with MacPorts
brew install cloc                      # Mac OS X with Homebrew
choco install cloc                     # Windows with Chocolatey
scoop install cloc                     # Windows with Scoop

使用

我以 GitHub 上 kubernetes 的代码仓库为例:

$ git clone --depth=1 https://github.com/kubernetes/kubernetes.git
$ cloc kubernetes

显示如下:

1555569428654

它也可以统计压缩包的代码行数:

1555657515793

统计某类型的文件:

1555657583059


kubernetes 使用 calico 网络协议

这篇文章记录在一个纯净的未安装网络插件的k8s环境里,如何快速安装calico环境。

关于k8s的安装可以参考我这篇文章:《kubernetes 安装入门(centos)》,一路向下操作直到8. 安装flannel网络 前即可。

本文可以参考 calico 官网:«https://docs.projectcalico.org/v3.4/getting-started/kubernetes/installation/calico»

安装 etcd

在生产环境中安装etcd,我们一般会使用密钥访问。在这里我这是为了搭建验证环境快速使用,所以相关密钥的地方全部留空。

如果你使用kubeadm安装的集群,可以使用 kubeadm config view 查看集群配置。

我假设容器的service ip 子网为 172.19.0.0/16。在这里需要关注etcd的service的ip,要与子网一致,我设置为 172.19.222.222

运行 kubectl -f etcd.yaml 生效:

# This manifest installs the Calico etcd on the kubeadm master.  This uses a DaemonSet
# to force it to run on the master even when the master isn't schedulable, and uses
# nodeSelector to ensure it only runs on the master.
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: calico-etcd
  namespace: kube-system
  labels:
    k8s-app: calico-etcd
spec:
  template:
    metadata:
      labels:
        k8s-app: calico-etcd
      annotations:
        # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler
        # reserves resources for critical add-on pods so that they can be rescheduled after
        # a failure.  This annotation works in tandem with the toleration below.
        scheduler.alpha.kubernetes.io/critical-pod: ''
    spec:
      tolerations:
        # This taint is set by all kubelets running `--cloud-provider=external`
        # so we should tolerate it to schedule the Calico pods
        - key: node.cloudprovider.kubernetes.io/uninitialized
          value: "true"
          effect: NoSchedule
        # Allow this pod to run on the master.
        - key: node-role.kubernetes.io/master
          effect: NoSchedule
        # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode.
        # This, along with the annotation above marks this pod as a critical add-on.
        - key: CriticalAddonsOnly
          operator: Exists
      # Only run this pod on the master.
      nodeSelector:
        node-role.kubernetes.io/master: ""
      hostNetwork: true
      containers:
        - name: calico-etcd
          image: quay.io/coreos/etcd:v3.3.9
          env:
            - name: CALICO_ETCD_IP
              valueFrom:
                fieldRef:
                  fieldPath: status.podIP
          command:
          - /usr/local/bin/etcd
          args:
          - --name=calico
          - --data-dir=/var/etcd/calico-data
          - --advertise-client-urls=http://$(CALICO_ETCD_IP):6666
          - --listen-client-urls=http://0.0.0.0:6666
          - --listen-peer-urls=http://0.0.0.0:6667
          - --auto-compaction-retention=1
          volumeMounts:
            - name: var-etcd
              mountPath: /var/etcd
      volumes:
        - name: var-etcd
          hostPath:
            path: /var/etcd

---

# This manifest installs the Service which gets traffic to the Calico
# etcd.
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: calico-etcd
  name: calico-etcd
  namespace: kube-system
spec:
  # Select the calico-etcd pod running on the master.
  selector:
    k8s-app: calico-etcd
  # This ClusterIP needs to be known in advance, since we cannot rely
  # on DNS to get access to etcd.
  clusterIP: 172.19.222.222
  ports:
    - port: 6666


chrome 扩展推荐

推荐几个常用的chrome扩展:

1555382806007

日常类

  • AdBlock —— 可谓是浏览器必备了,广告屏蔽
  • Google翻译 —— 哎,经常需要看英文文档,先翻译知道大概再看原文吧
  • Instapaper —— 稍后阅读
  • Rss —— Rss嗅探
  • Zotero —— 文献管理。
  • Vimium —— vim 快捷方式
  • QR Code —— 网页

开发类

  • Host Switch Plus —— 快速切换 Host,前端开发利器
  • Proxy SwitchySharp —— 快速切换不同内网
  • Octotree —— GitHub重排页面
  • Sourcegraph —— 在线查看GitHub代码
  • Wappalyzer —— 嗅探网站架构信息

在 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

1 2 3 4 5 6 87 88 89 90 91