kubernetes

  • 一直以来,我使用的是 rancher,它提供的 k8s 集群非常棒,基于 docker 镜像安装,免去了很多的安装配置细节,如果对于 k8s 的运行原理不想太深入了解、图方便快捷或者只是想尝试功能,那么它会让你绝对满意:在界面上点击配置下就能搭建起一个集群了。

    但是这次我就需要自己真正在机器上搭建起一个原生的集群,折腾下自己。众所周知,k8s 的安装,绝对是个坑,尤其是国内,不翻墙基本上就没戏,对比国外的技术环境,瞬间觉得,国内的技术环境下,能做出好的世界性项目绝对不容易,当然 GFW 除外。

    好了,吐槽结束,下面开始正题。

    工具准备

    首先是代理或者 VPN,这个没的说,不然很多东西都得浪费一

  • 一般来说,我们从外部访问 k8s 里面的应用,有以下种方式:

    1. Ingress:有些云服务商有提供,自己也能安装自己的 ingress controller;
    2. Service NodePort:在 Node 上暴露一个 30000-32767 的端口,可以通过 NodeIp:NodePort 的方式访问;
    3. Service LoadBalancer:取决于云服务商,目前似乎只有 AWS、GCE 以及国内的阿里云有提供;
    4. Kubectl Proxy:通过本地执行 kubectl proxy,然后访问 http://localhost:8001/api/v1/proxy/namespaces/nam
  • 自从 上次 介绍了 Prometheus 之后,就想到要在 k8s 中使用了,不过,在这之前,先介绍下 k8s 的监控。

    k8s 的监控

    k8s 默认以及推荐的监控体系是它自己的一套东西:Heapster + cAdvisor + Influxdb + Grafana,具体可以看 这里 。

    包括 k8s 自身的 HPA (Horizontal Pod Autoscaler),默认从 Heapster 中获取数据进行自动伸缩。(顺便提一句,当你部署完 k8s 集群之后,如果从 Dashboard 中看不到监控数据,往往就是因为你没有部署 Heapster,或者网络层有问题, Dashboard

  • Kubernetes 发展好快,在我写这篇总结的同时,1.9.0 版本已经在昨日(2017.12.16)正式发布,而上次在正式环境中部署已经是半年前了,我花了点时间将集群升级到了 1.8.4 版本,其中变化最明显的就是权限了,已经可以用上 RBAC 了,而我也在发现报错的时候才意识到需要将以前 k8s 的基础应用也全部加上了权限(当然了,1.6 其实就开始有了)。

    目前,k8s 中一共有 4 种权限模式:

    • Node: 一种特殊目的的授权模式,主要用来让 kubelets 遵从 node 的编排规则,实际上是 RBAC 的一部分,相当于只定义了 node 这个角色以及它的权限;
    • ABAC:
  • 背景

    1. 我们线上的 k8s 集群是使用 ansible 安装的[1],使用的是 coreos 提供的 hyperkube 镜像中的可执行文件(其实之前也提到过类似的:CentOS 7 使用 ansible 搭建 kubernetes);
    2. 跑的应用主要是线上离线任务,属于即使挂掉一阵也不会影响到正常业务的那种,部署了 15 个 Deployment;
    3. 部署的 Etcd 使用 docker 部署,使用 systemd 管理;
    4. 一旦更新了应用配置,就会自动更新在相应的 namespace 中所有的 Deployment;

    起因

    一直以来,我们用的线上 k8s 非常稳定,但是在春节期间,出现一个很