ceph真不错, 也支持多点只读挂载, 但如果多点挂载的话,文件同步就是问题了,尤其在kubernetes集群中。 不过,可以将rbd以读写的方式挂载到master节点,然后在master节点上运行一个nfs服务器,而nfs服务器支持多点挂载,多点同时读取,写入,这样就可以完美解决了。 至于是放入到kubernetes集群中以docker节点的形式还是本地服务的形式,就完全看喜好了。
月度归档: 2016年12月
无意之中发现一个不错的网站
今天在使用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,因此,需要将不同设备的环境,配置下相关工具的位置
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 使用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的选择
- 上述的安装使用的是kubeadm安装,因此,选择使用kubeadm/calico.yaml配置
- /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会自动加载这个
- 删除下载下来的配置中的etcd的配置和etcd服务的配置
- 修改下载下来的配置中的etcd的地址为kubeadm启动的etcd的地址,没记错的话,直接搜索6666就可以找到这个了
- 可能是防火墙影响,一直pull不下来,然后一直重拾
- calico pool 未知命令( 这个已经不需要了)
- 下载的calico.yaml可能比较老,使用最新的版本
- 老版本的pool命令已经需要了,新版本中是apply命令
- 如果不想更新calico的配置的话,自己pull一个老版本的,然后打tag
- 修改calico配置中的calico/ctl的版本为较老的版本
- 这个非常坑,我尝试了十几次才找到可以支持的,结果发现官网中的kubeadm/calico.yaml更新了
- kube-dns 出现 2/3 runing的状态
基本上,上述pool的问题解决了之后,这个一般不会出现,但不幸,我碰到了, 重启下docker服务试试?
- calico-* 等在node加入后的各种不正常现象
- 要求各节点的主机名称不能相同,(修改/etc/hosts,/etc/hostname等文件)
- etcd监听的为127.0.0.1,修改( 上述提到过)
- calico的yaml中修改etcd的地址,重新create,未试过apply
- 去掉各节点的docker启动服务参数中的dns为127.0.0.1(简单的理解,这个dns要可以解析各个自节点的主机名)
- 重启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终于算是比较正常了,可以运行了