kubernetes ceph rbd 文件同步

ceph真不错, 也支持多点只读挂载, 但如果多点挂载的话,文件同步就是问题了,尤其在kubernetes集群中。 不过,可以将rbd以读写的方式挂载到master节点,然后在master节点上运行一个nfs服务器,而nfs服务器支持多点挂载,多点同时读取,写入,这样就可以完美解决了。 至于是放入到kubernetes集群中以docker节点的形式还是本地服务的形式,就完全看喜好了。

无意之中发现一个不错的网站

今天在使用google搜索ctex的时候,输入了ctext,然后进入了一个叫ctext.org的网站,发现竟然是一个介绍古代文献的库。 我对于古代文献仅限于上学时的古诗,发现这个网站在这方面的内容非常的全,以表面上的语言而论,就已经包涵英文/繁体/简体了。 而相关的分类,原文,批注等等也非常不错。

网站的地址:http://ctext.org

使用spacemacs

比较愚钝,前两天才知道有spacemacs这个东东,研究了下,发现确实不错,至少我不需要手动配置N多参数了,还有模式兼容比我之前自己管理要好的多。所以将emacs的配置管理升级为使用spacemacs了

我对emacs-lisp几乎属于完全不懂的地步,原来的管理都是在org-mode下配置的,这个不想更改,因为相关的配置说明或者遇到问题做标注还是很方便的。

直接上配置:

私人配置

(org-babel-load-file (expand-file-name “person.org” “~/emacs_config”))

emacs 初始化配置

.emacs 中的配置

  • windows上首先设置HOME路径,如果在环境变量中设置了则不用
  • 然后设置配置文件所在目录的路径
  • 设置org-mode的路径,在第一次初始化配置的时候,会使用系统自带的org版本,完全初始化成功后,变成安装后的
  • 加载配置文件
(setenv "HOME" "C:\\work")
(setq user-emacs-directory "~/emacs_config")
(setq load-path (cons "~/emacs_config/elpa/org-plus-contrib-20161118" load-path))
(org-babel-load-file (expand-file-name "tips.org" user-emacs-directory))

patch

ntemacs 24的bug:调用grep会出现下面的错误

grep: warning: GREP_OPTIONS is deprecated; please use an alias or script

注释掉emacs/24.4/lisp/progmodes/grep.el::470的下列代码

(setenv "GREP_OPTIONS"
    (concat (getenv "GREP_OPTIONS")
        " --color=" (if (eq grep-highlight-matches 'always)
                "always" "auto")))

环境变量

我在很多不同的设备和环境中使用emacs,因此,需要将不同设备的环境,配置下相关工具的位置

  • ubuntu笔记本

    (message (concat “system name=” system-name))
    (when (member system-name ‘(“rix-u-work”))
    )

  • mac笔记本

    (message (concat “system name=” system-name))
    (when (member system-name ‘(“RIX-MAC”))
    )

  • 相关配置生成文件的位置

    (setq locate-user-emacs-directory “~/.emacs.d”)
    (setq server-auth-dir “~/.emacs.d/server”)

shell 配置

windows 下没有bash,这真是一个非常痛苦的事情,这个就是在windows上配置bash的相关内容

(cond
((memq initial-window-system ‘(x w32))
(cond
((memq system-type ‘(windows-nt cygwin))
;(
(message “for windows”)
; (setq exec-path (cons “~/Git/usr/bin” exec-path))
(setq shell-file-name “bash”)
(setenv “PS1” “\\[[\\e[32m\\]\\u@\\h \\[\\e[33m\\]\\w\\[\\e[0m\\]]\\$ “)
(setenv “SHELL” shell-file-name)
;(setenv “CYWIN” “nodosfilewaring”)
(setq explicit-shell-file-name shell-file-name)
;使用方法,把光标移动到要粘贴的地方,然后用按住 Alt + 拖拉鼠标, 选择要拷贝的部分, 抬起鼠标,选择的部分就粘贴到了光标所在位置. 也就是说,一个动作完成 copy & paste 的工作,而且不改变 kill ring 的内容, 用 windows 的术语是剪切板. 和上面的方法类似, 如果按住 Alt + Shift + 拖动鼠标,那么就会完成 cut & paste 的功能.
(defun cygwin-shell()
(interactive)
(shell “*cygwin-shell*”)
; (set-buffer-process-coding-system ‘chinese-gbk-unix ‘chinese-gbk-unix)
(delete-other-windows)
)
;; enable cygwin clear, default set it does not work
(add-hook ‘shell-mode-hook ‘n-shell-mode-hook)
(defun n-shell-mode-hook ()
“12Jan2002 – sailor, shell mode customizations.”
(local-set-key ‘[up] ‘comint-previous-input)
(local-set-key ‘[down] ‘comint-next-input)
(local-set-key ‘[(shift tab)] ‘comint-next-matching-input-from-input)
(setq comint-input-sender ‘n-shell-simple-send)
)
(defun n-shell-simple-send (proc command)
“17Jan02 – sailor. Various commands pre-processing before sending to shell.”
(cond
;; Checking for clear command and execute it.
((string-match “^[ \t]*clear[ \t]*$” command)
(comint-send-string proc “\n”)
(erase-buffer)
)
;; Checking for man command and execute it.
((string-match “^[ \t]*man[ \t]*” command)
(comint-send-string proc “\n”)
(setq command (replace-regexp-in-string “^[ \t]*man[ \t]*” “” command))
(setq command (replace-regexp-in-string “[ \t]+$” “” command))
;;(message (format “command %s command” command))
(funcall ‘man command)
)
;; Send other commands to the default handler.
(t (comint-simple-send proc command))

)
)
(make-local-variable ‘comint-completion-addsuffix)
(setq comint-completion-addsuffix ‘(“/” . “”))
;; This variable is local to buffer
(setq comint-prompt-regexp “^[ \n\t]*[$] ?”)
)
((memq system-type ‘(gnu/linux)) (message “for linux”))
)))

其他内容

(setq abbrev-file-name “~/.emacs.d/.abbrev_defs”)
(setq abbreviated-home-dir nil)
(defvar ywb-emacs-lisp-path
(expand-file-name (concat data-directory “../site-lisp/”)))
(global-auto-revert-mode 1)

linux交换按键

win键盘实在难用,即使在spacemacs下,我也不想使用小手指来按ctrl键

clear Mod4
clear Control
!! keySym 格式
!! keysym  原按键 = 修改后的按键
keysym Control_L = Super_L
keysym Super_L = Control_L
!!keysym Control_R = Super_R
keysym Super_R = Control_R
add Mod4 = Super_L Super_R
add Control = Control_L Control_R

密码过期时间

(setq password-cache-expiry nil)

目录设置

(setq diary-file “~/.emacs.d/diary”)
(setq todo-file-do “~/.emacs.d/todo-do”)
(setq todo-file-done “~/.emacs.d/todone-done”)
(setq todo-file-top “~/.emacs.d/todone-top”)

spacemacs 设置

将最近打开的文件保存在默认的.emacs.d下,这样不同设备上就不会产生干扰。

将elpa配置到和配置文件指定的目录,使用同步工具进行同步在不同的设备上都不用重复下载了。

(setq dotspacemacs-configuration-layer-path “~/emacs_config”)
(setq recentf-save-file (expand-file-name “recentf” “.emacs.d”))
(setq dotspacemacs-elpa-https nil)
(setq dotspacemacs-check-for-update nil)
(setq package-user-dir (concat user-emacs-directory “/elpa”))
(setenv “SPACEMACSDIR” user-emacs-directory)
(setq spacemacs-start-directory (concat user-emacs-directory “/spacemacs/”))
(load-file (concat spacemacs-start-directory “init.el”))

快捷键设置

(global-set-key [f2] ‘shell)
(global-set-key [f3] ‘grep-find)

软件

org2blog

我用这个来写blog的

(global-set-key (kbd ““) ‘org2blog/wp-new-entry)

org2blog 使用wordpress的code方式

#+ATTR_WP: :syntaxhl light=true

分页

#+HTML: 继续阅读使用spacemacs

kubernetes 部署私有registry

既然已经部署好了kubernetes基础了,就想着将所有的内容都部署到kubernetes上, 对于我这种懒人而言,尽可能使用公开的镜像是最好的,维护镜像也是一键很累人的事情。

废话少说,下面就是私有registry并且支持https的部署方式:

kubectl create -f https://gitlab.4096.info/rix/kubernetes_repo/raw/master/registry/registry.yaml

上面的涉及宣传了。

其实我将自己已经部署到kubernetes的内容都使用自建的gitlab来管理,然后记录下碰到的相关问题。 这样以后可以方便自己使用。

kubernetes 快速安装

这段时间我一直在折腾kubernetes,我讨厌了在不同的电脑上不断的部署,撤销,部署的循环了。 并且,将尽可能的将所有docker化的服务部署到kurbernetes上。

环境准备

ubuntu 16.04 x86_64

安装

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
# Install docker if you don't have it already.
apt-get install -y docker.io
apt-get install -y kubelet kubeadm kubectl kubernetes-cni

配置

master上运行,其他节点直接join就可以

kubeadm init --api-advertise-addresses=192.168.228.129

ip地址为本地的可访问外网的地址

经过长时间的,坚持不懈的努力,终于在某天,良心发现,99%的梯子能力+1%的运气, 成功下载了所有的镜像,并运行起来了

kubernetes的各种坑开始

kubectl get pods -n kube-system

无法启动

8080端口是否被占用了?

dns 的pod一直无法启动

上述的配置中不含网络配置,网络需要另外安装关于网络的插件,目前有weave和calico等, 据说calico逼格比较高,所以选择calico开始

calico 各种坑开始

  • calico yaml的选择
    1. 上述的安装使用的是kubeadm安装,因此,选择使用kubeadm/calico.yaml配置
    2. /etc/kubernetes/manifests/etcd.json中关于etcd的配置,默认”–listen-client-urls” 为 “http://127.0.0.1:2379“, “–advertise-client-urls”为”http://127.0.0.1:2379“, 至少修改为外网可访问的,幸运的是,不用重启,过一会kubernetes会自动加载这个
    3. 删除下载下来的配置中的etcd的配置和etcd服务的配置
    4. 修改下载下来的配置中的etcd的地址为kubeadm启动的etcd的地址,没记错的话,直接搜索6666就可以找到这个了
    5. 可能是防火墙影响,一直pull不下来,然后一直重拾
  • calico pool 未知命令( 这个已经不需要了)
    1. 下载的calico.yaml可能比较老,使用最新的版本
    2. 老版本的pool命令已经需要了,新版本中是apply命令
    3. 如果不想更新calico的配置的话,自己pull一个老版本的,然后打tag
    4. 修改calico配置中的calico/ctl的版本为较老的版本
    5. 这个非常坑,我尝试了十几次才找到可以支持的,结果发现官网中的kubeadm/calico.yaml更新了
  • kube-dns 出现 2/3 runing的状态

    基本上,上述pool的问题解决了之后,这个一般不会出现,但不幸,我碰到了, 重启下docker服务试试?

  • calico-* 等在node加入后的各种不正常现象
    1. 要求各节点的主机名称不能相同,(修改/etc/hosts,/etc/hostname等文件)
    2. etcd监听的为127.0.0.1,修改( 上述提到过)
    3. calico的yaml中修改etcd的地址,重新create,未试过apply
    4. 去掉各节点的docker启动服务参数中的dns为127.0.0.1(简单的理解,这个dns要可以解析各个自节点的主机名)
    5. 重启docker服务试试?

webui 安装

满怀信心的打开http://127.0.0.1:8080/ui/ , 结果无法访问。webui 需要安装才能使用

kubectl create -f https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml

经过上述坑,kubernetes终于算是比较正常了,可以运行了