Hot For Coding
  • Debian apt install Could not get lock 错误

    full debian apt could not get lock

    我在Debian10安装Mariadb时遇到一个错误

    $ apt install mariadb-server
    E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
    E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
    

    ...

    READ ALL

  • Etcd took too long 问题

    full etcd disk sync duration

    Kubernetes集群在跑几天之后总会有一两个Etcd节点的系统负载特别高,甚至高达27,ssh进去半天才有响应,之前图省事每当负载高到离谱的时候我就reboot又能坚持几天。

    然而这个问题始终反复困扰着我,还是得花点时间彻底解决一下这个系统负载高的问题,通过top命令我得知CPU资源被百分之百占用的程序是Etcd。

    这有点奇怪,Kubernetes用Etcd来存储它的一些配置信息,以及ConfigMap等。我的集群目前只有20个节点,所有的Pods加一起也就250个左右,按理说这么点数据量对于三个节点构成高可用集群的Etcd来说不应该存在瓶颈的。

    ...

    READ ALL

  • Docker run iptables No chain/target/match by that name 错误

    full docker animals

    我使用Docker运行一个HAProxy到多个Kubernetes API Server作为高可用,但经常性的发现某一个Node处于NotReady状态,通过查看kubelet日志发现连接不到Kubernetes API Server。于是赶紧查看以下HAProxy容器,发现HAProxy容器居然已经挂掉了,虽然我设置了--restart=always,但不知道什么原因还能挂掉。

    我打算先把容器启动之后再排查,结果发现启动不了

    ...

    READ ALL

  • 如何在CentOS7上通过kubeadm快速安装k8s集群

    full k8s install on CentOS7

    本文介绍一下如何在CentOS7上通过kubeadm快速安装k8s集群,以下每一步骤我都亲自测试过,现在要搭建一个k8s集群相比前两年太容易了,只需要使用官方推荐的kubeadm工具即可快速初始化出一个k8s集群

    准备

    • CentOS7系统,记得是7
    • 内存不小于2G
    • CPU双核以上
    • 所有机器直接网络互通
    • 唯一的Hostname
    • 防火期推荐关闭,使用外层的防火墙策略
    • Swap关闭

    本文机器例子

    HostnameIPOS
    cp1172.16.11.199CentOS7
    worker1172.16.11.198CentOS7
    worker2172.16.11.197CentOS7

    ...

    READ ALL

  • certbot自动续签与更新Dnspod记录脚本

    full auto renew with Certbot

    Let's Encrypt为了推广HTTPS的普及,提供了免费证书,麻烦的是每三个月就到期,需要重新续签一下。重新续签有两种途径

    • 自动续签
    • 手动续签

    自动续签与国际通用的DNS提供商有较好的合作支持,但对于国内比如Dnspod没有在它的自动续签支持里,不过它提供hook,你可以写任意shell脚本完成TXT记录即可实现自动续签。

    Dndpod从新版开始token直接采用id,token组合而成,这里需要注意一下,脚本如下

    ...

    READ ALL

  • Kubernetes删除与新增节点

    full CoreOS End-Of-Life

    End-Of-Life

    最近遇到了一件倒霉的事,我使用的CoreOS家的Container Linux居然宣布要在五月终止产品线了,提示在使用这款操作系统的用户尽快切换到其它操作系统,官方推荐了被Red Hat收购后搞起的Fedora CoreOS。这件事对我影响非常大,因为我有一个Kubernetes集群全部20+节点使用了Container Linux操作系统,这意味着我必须把我的集群所有节点都要重新更换操作系统才能让其在安全的环境下继续工作。

    ...

    READ ALL

  • Kubernetes新节点加入集群后mount NFS错误

    full Linux mount NFS error

    因为集群的负载有点过重,于是准备加入节点分摊,在kubeadm join结束之后发现分配到新节点的pod一直处于ContainerCreating好长时间。用kubectl describe po <pod-name>看一下原因,发现一直重复出现以下信息

    ...
    Mounting command: systemd-run
    Mounting arguments: --description=Kubernetes transient mount for /var/lib/kubelet/pods/45e5a290-077b-4f9b-889b-71de0c7f17bc/volumes/kubernetes.io~nfs/json --scope -- mount -t nfs nfs.server.com:/data /var/lib/kubelet/pods/45e5a290-077b-4f9b-889b-71de0c7f17bc/volumes/kubernetes.io~nfs/json
    Output: Running scope as unit: run-rf893345a476c4ac2bebef49266fc63c6.scope
    mount: /var/lib/kubelet/pods/45e5a290-077b-4f9b-889b-71de0c7f17bc/volumes/kubernetes.io~nfs/json: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.
      Warning  FailedMount  33s (x4 over 11m)  kubelet, node15  Unable to attach or mount volumes: unmounted volumes=[json], unattached volumes=[config json default-token-5hhj7]: timed out waiting for the condition
    ...
    

    ...

    READ ALL

  • Actix中自定义错误处理

    full Actix custom handle error

    Actix

    Actix是一个非常高效的Web框架在Rust中,这段时间非常喜欢用它写Web Server端,至少我觉得比Rocket要好用,目前Actix的处理性能要比绝大部分的Web框架都要高效,从benchmarks这里就能看出来绝大部分框架的基准测试结果对比,这个是跨语言的框架对比,Rust的Actix明显排前置位置。

    ...

    READ ALL

  • Rust如何在VSCode中debug

    full Debug Rust in VSCode

    这些年使用了不少编辑器,但直到VSCode才觉得比较满意,感觉它比之前的编辑器要好用,于是写C/C++、JavaScript、Golang、Python、 Java以及Rust都喜欢用VSCode写。既然要在VSCode中编写Rust那么如何Debug就尤其重要,此篇文章记录一下我的配置步骤一边未来需要顺便可以帮助那些也想在VSCode中编写Rust的开发者。

    安装VSCode扩展

    因为我是在使用Mac电脑,所以我需要安装CodeLLDB

    ...

    READ ALL

  • 容器下快速部署HAProxy

    HAProxy

    在阿里云部署了Kubernetes集群,购买了SLB用于API负载均衡。阿里云的SLB负载均衡不支持ECS即当服务器端又当客户端,这会造成我们的Master节点在访问API时恰好回路到原节点会出现timeout情况。这种情况下只能Worker节点使用SLB转发到API,而Master节点最省事的方式就是在每个节点上自建一套HAProxy负载均衡到其余Master节点。

    而采用容器化Docker方式快速部署HAProxy非常非常容易

    首先新建一个目录供HAProxy使用

    mkdir /etc/haproxy
    

    ...

    READ ALL