debian 下简单的时间同步

以前写过一个 CentOS 下的 ntp 时间同步,centos 一般公司的服务器会使用。就我个人还是比较习惯 Debian 系的,所以我Debian 系的一些文章都是相对简易的,主要目标就是 It Just Work 即可。

说一下写这篇的背景,我给自己服务器中安装了 Etcd 集群,使用集群的时候就有一个重要的前提——时钟一致。一般的做法是在集群中指定一台机器作为ntp服务器,由这台向远端同步,其它机器同步这台。

个人服务要求不高的话,可以在所有机器中按照如下方式实现:

  1. 安装
     $ sudo apt-get update
     $ sudo apt-get install ntpdate -y
    
  2. 同步

     ntpdate time.windows.com
    

    当然也可以用阿里的服务器 ntp.aliyun.com

  3. 定时同步 每小时同步一次

     $ sudo crontab -e
    
     在最后一行添加
     5 * * * * ntpdate time.windows.com > /dev/null 2>&1
    

Debian 8 修改本机dns地址

最近架设了自用的dns服务器,修改本机的 /etc/resolv.conf 实际上并不生效,解决办法如下:

  1. 查看 /etc/resolv.conf 文件头部

先说说为什么/etc/resolv.conf每次重启会清理掉,通过ls -l 查看,会发现resolv.conf只是一个软链接文件,源文件位于/run/resolvconf/resolv.conf ,查看该文件会发现如下两条注释:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

上面已经说的非常清晰明了了。

解决方法

方法一:

/etc/network/interfaces中添加一行DNS信息

dns-nameservers 8.8.8.8

方法二:

编辑/etc/resolvconf/resolv.conf.d/base文件,加入DNS信息

nameserver 8.8.8.8

方法三:

编辑/etc/resolvconf/resolv.conf.d/head 文件,在其中加入DNS信息

nameserver 8.8.8.8

注:此方法虽然有用但不推荐,因为该文件中,同样有警告信息。

增加完DNS信息后,执行下面的命令生效

resolvconf  -u
service networking restart

执行完该命令后,查看/etc/resovle.conf文件,会发现其DNS信息,就是我们刚刚在方法一或方法二中写的DNS信息。


使用 helm 安装 MySQL (包括持久化存储)

背景

本文介绍如何使用 helm 安装 mysql ,使用本地存储的方式。

1. 安装storage

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage-mysql
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

在这里起了名叫 local-storage-mysql 的 storage class。

在这里我们使用了 WaitForFirstConsumer 延迟绑定pv,直到 pod 被调度。

2. 安装pv绑定

apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv-mysql
spec:
  capacity:
    storage: 8Gi
  # volumeMode field requires BlockVolume Alpha feature gate to be enabled.
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage-mysql
  persistentVolumeReclaimPolicy: Retain
  local:
    path: /app/kelu/local-storage/mysql
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - keludev06

在这里我们在 keludev06 这台机器上创建了文件夹 /app/kelu/local-storage/mysql 用于持久化存储。

在这里我们必须定义 nodeAffinity,Kubernetes Scheduler 需要使用 PV 的 nodeAffinity 描述信息来保证 Pod 能够调度到有对应 local volume 的机器上。

如果出现了这个错误 Node didn't find available persistent volumes to bind ,大多原因是因为你没有写对 hsotname, 注意在 k8s 中hostname都是小写显示的,具体参考命令行 kubectl get node -owide

3. 修改 values.yaml

去到 helm 维护的MySQL目录: https://github.com/helm/charts/tree/master/stable/mysql ,下载 values.yaml 文件。

搜索 persistence ,填充 storage class的内容。

55135198291

4. 安装

55135211037

helm search mysql
helm install --name mysql -f values.yaml stable/mysql --namespace kelu

安装到 kelu 这个namespace下。

参考资料


使用 helm 安装 Redis (包括持久化存储)

背景

本文介绍如何使用 helm 安装 redis,使用本地存储的方式。

1. 安装storage

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage-redis
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

在这里起了名叫 local-storage-redis 的 storage class。

在这里我们使用了 WaitForFirstConsumer 延迟绑定pv,直到 pod 被调度。

2. 安装pv绑定

apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv-redis
spec:
  capacity:
    storage: 8Gi
  # volumeMode field requires BlockVolume Alpha feature gate to be enabled.
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  storageClassName: local-storage-redis
  persistentVolumeReclaimPolicy: Retain
  local:
    path: /app/kelu/local-storage/redis
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - keludev05

在这里我们在 keludev05 这台机器上创建了文件夹 /app/kelu/local-storage/redis 用于持久化存储。

在这里我们必须定义 nodeAffinity,Kubernetes Scheduler 需要使用 PV 的 nodeAffinity 描述信息来保证 Pod 能够调度到有对应 local volume 的机器上。

如果出现了这个错误 Node didn't find available persistent volumes to bind ,大多原因是因为你没有写对 hsotname, 注意在 k8s 中hostname都是小写显示的,具体参考命令行 kubectl get node -owide

3. 修改 values.yaml

去到helm维护的 Redis 目录: https://github.com/helm/charts/tree/master/stable/redis ,下载 values.yaml 文件。也可以看下他们的 readme,看看还有哪些推荐配置项。

搜索 persistence ,填充 storage class的内容。

55135270788

4. 安装

helm search redis
helm install --name redis -f values.yaml stable/redis --namespace kelu

安装到 kelu 这个namespace下。

参考资料


Zotero介绍——文献管理

什么是 Zotero

Zotero是一款免费、开源的“知识”管理软件。它的管理能力不仅仅是对于文献,而是涉及书籍、专利、百科以及新闻。

它面向这些人群:

  • 高校研究生
  • 作家
  • 老师
  • 协作社区人群

Zotero桌面应用程序的屏幕截图

功能

信息收集

  • 互联网自动识别:Web Translators (URL bar icon)
  • 手动输入:Manual Input or Edit From a bibliographic
  • 文件导入:format (RIS, BibTeX, MARC, etc.)
  • 通过标示符增加:Add by identifier (DOI, ISBN, PMID)
  • 通过PDF元数据识别:Add PDF then Retrieve Metadata
  • 从网页识别:Get any Webpage with basic data
    • 豆瓣
    • 维基百科
    • Google学术
    • 知网

tips

参考此处: 判断文献重要性

  • 作者的重要性:比如【H指数】
  • 文献的引用次数:比如【Google学术引用次数】
  • 文献的学术社交媒体影响力,比如【altmetric分数】

可视化

Paper Machines 插件:http://www.papermachines.org

32

33

安装

参考资料


helm 安装报错 - error forwarding socat not found

今天在一个新环境上安装helm,出现了如下报错:

root@node01:~# helm version
Client: &version.Version{SemVer:"v2.5.0", GitCommit:"012cb0ac1a1b2f888144ef5a67b8dab6c2d45be6", GitTreeState:"clean"}
E0711 10:09:50.160064   10916 portforward.go:332] an error occurred forwarding 33491 -> 44134: error forwarding port 44134 to pod tiller-deploy-542252878-15h67_kube-system, uid : unable to do port forwarding: socat not found.
Error: cannot connect to Tiller

参考 github 上的 issue helm needs socat on the nodes of the k8s cluster,需要在所有节点安装 socat 包:

yum install socat