在阿里云国内搭建一个纯净的 kubernetes 环境

阿里云自己的 kubernetes 有好多闭源组件,而且更新慢。本文总结一下在阿里云建立一个仅用 kubernetes 官方组件的容易升级的环境。

环境规划:

  • 一台出口代理(以下简称 proxy):1 CPU 1G Memory
  • 一台网关(以下简称 gateway):1 CPU 1G Memory
  • 一台独立 master(以下简称 master): 2CPU 4G Memory
  • 两台 Node(以下简称 node1、node2): 2CPU 8G Memory,数量可调整
  • 存储使用阿里云的 NAS(nfs)
  • 入网请求使用阿里云的 SLB + Ingress

合计 5 台服务器,2 个阿里云服务。

编辑此区域

准备网络环境

主要是配置 NAT。让多台局域网内的服务器能访问外网。

另外 kubernetes 依赖一些在中国大陆需要代理才能访问的镜像源,因此也需要选择性代理。

代理使用 outline,管理方便一些。

第一步,安装 outline

租用一台阿里云海外的服务器,选 1 CPU 1G Memory 即可,需要公网。

在 proxy 上执行:

sudo bash -c "$(wget -qO- https://raw.githubusercontent.com/Jigsaw-Code/outline-server/master/src/server_manager/install_scripts/install_server.sh)"

之后在安全组中,把管理端口与连接端口开放 0.0.0.0 访问。

把生成的 token 贴到本机的 outline manager 中。获取连接信息。

第二步,配置 gateway

gateway 有三个作用

  1. 做局域网内部的 NAT
  2. 做海外的透明代理
  3. 做防污染的 DNS

租用一台阿里云中国大陆的服务器,选 1 CPU 1G Memory 即可,需要公网。ubuntu。

配置文件参考:https://www.evernote.com/shard/s35/client/snv?noteGuid=4324a379-ad27-45ce-8a98-35d77dfa06d4&noteKey=8097939ce5e18420ba6a29c7d4cb0d7c&sn=https%3A%2F%2Fwww.evernote.com%2Fshard%2Fs35%2Fsh%2F4324a379-ad27-45ce-8a98-35d77dfa06d4%2F8097939ce5e18420ba6a29c7d4cb0d7c&title=%25E9%2598%25BF%25E9%2587%258C%25E4%25BA%2591%25E4%25B8%258A%25E7%259A%2584%2Bshadowsocks%2B%25E7%25BD%2591%25E5%2585%25B3

编译安装 shadowsocks。参考:https://github.com/shadowsocks/shadowsocks-libev

根据 outline manager 的连接信息,配置 ss-redir 与 ss-nat

配置 ss-redir / ss-nat 开机自启动

安装 unbound。配置 tcp upstream

配置防火墙,打开 NAT。参考:https://gist.github.com/kimus/9315140

第三步,配置 VPC 路由表

将局域网内 0.0.0.0 的下一跳设置为 gateway 的地址

编辑此区域

安装 master 与 node

在 gateway 的局域网中,租用三台 ECS。ubuntu。不要外网。配置如前述。

另外还需要租用一套 SLB 用于外部访问集群。搭建前请提前租。

初始化服务器:

#!/bin/bashapt-get update && apt-get upgrade -y && apt-get install -y socat ebtables docker.io nfs-common# enable modules
echo ip_vs_rr >> /etc/modules-load.d/modules.conf
echo ip_vs_wrr >> /etc/modules-load.d/modules.conf
echo ip_vs_sh >> /etc/modules-load.d/modules.conf
echo ip_vs >> /etc/modules-load.d/modules.conf# override dhcp dnc client
echo 'supersede domain-name-servers 172.16.0.138;' >> /etc/dhcp/dhclient.conf
service networking restart# install kubeadm
apt-get update && apt-get install -y apt-transport-https curl
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 && apt-get install -y kubelet kubeadm kubectl
reboot

初始化完成后,使用下列命令安装 master:

kubeadm init

master 安装好后,在其他两台机器上执行:

kubeadm join

最后在 SLB 上把 6443 转到 master 上。把集群的配置文件拷贝出来,地址改成 SLB 的地址。放到 kubectl 的环境中即可连接集群。

编辑此区域

安装网络

本文选择 calico 作为网络。

执行下列命令即可:

curl https://docs.projectcalico.org/v3.5/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml | kubectl apply -f -

参考:https://docs.projectcalico.org/v3.5/getting-started/kubernetes/installation/calico

编辑此区域

安装 helm

之后的组件利用 helm 管理会比较方便,因此先装 helm

执行下列命令即可:

cat << EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:name: tillernamespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: tiller
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:- kind: ServiceAccountname: tillernamespace: kube-system
EOF
helm init --service-account tiller
helm repo update

参考:https://github.com/helm/helm/blob/master/docs/rbac.md

编辑此区域

配置 ingress

利用 nginx-ingress。利用 daemonset 安装,便于 SLB 转发。

执行下列命令即可:

cat << EOF | helm install stable/nginx-ingress --namespace kube-system -f -
controller:kind: DaemonSetdaemonset:useHostPort: trueservice:type: ClusterIP
EOF

最后在 SLB 中配置将 80 和 443 平均分到全部 node 上

编辑此区域

配置存储

使用 nfs 作为存储。不过老实说 nfs 不是特别适合,因为集群里偶尔会有需要锁文件的应用,比如 sqlite。使用 nfs 会导致整个 node 无法锁文件。

第一步,租用 NAS 服务。获取挂载地址

第二步,安装

执行下列命令即可:

cat << EOF | helm install stable/nfs-client-provisioner --namespace kube-system -f -
storageClass:defaultClass: truenfs:server: 6992e4b4f5-wst84.cn-qingdao.nas.aliyuncs.compath: /mountOptions:- nfsvers=4- noresvportnodeSelector:node-role.kubernetes.io/master: nulltolerations:
- key: node-role.kubernetes.io/mastereffect: NoScheduleoperator: Exists
EOF

注意 nfs.server 需要填写第一步获取的挂载地址

编辑此区域

配置 cert-manager

最后配置签发 https 证书的工具。

执行下列命令即可:

cat << EOF | helm install stable/cert-manager --namespace kube-system -f -
ingressShim:defaultIssuerName: letsencrypt-proddefaultIssuerKind: ClusterIssuernodeSelector:node-role.kubernetes.io/master: nulltolerations:
- key: node-role.kubernetes.io/mastereffect: NoScheduleoperator: Exists
EOF

最后加入 cluster issuer

cat << EOF | kubectl apply -f -
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:name: letsencrypt-prod
spec:acme:# The ACME server URLserver: https://acme-v02.api.letsencrypt.org/directory# Email address used for ACME registrationemail: lg@e-teng.com.cn# Name of a secret used to store the ACME account private keyprivateKeySecretRef:name: letsencrypt-prod# Enable HTTP01 validationshttp01: {}
EOF

在阿里云国内搭建一个纯净的 kubernetes 环境相关推荐

  1. 如何在阿里云上构建一个合适的Kubernetes集群

    摘要: 声明 本文主要介绍如何在阿里云上构建一个K8S集群的实践,只是作为参考,大家可以根据实际情况做出调整. 集群规划 在实际案例中发现,有不少同学使用了很多的小规格的ECS来构建K8S集群,这样其 ...

  2. 教你利用阿里云服务器搭建一个随时随地的Web IDE

    前言 我们在学习各种编程语言的时候,总是要安装不同的IDE,需要去配置各种环境变量,而且对于配置比较低的电脑来说,打开各种IDE后风扇就会开始疯狂旋转,在这种噪音下很难专心去敲代码. 如果问我编程工具 ...

  3. 阿里云服务搭建微信小程序开发环境

    最近微信小程序异常火爆,很多人在学习,下面带着大家搭建下微信小程序的调试环境(client+server),并调试一套demo源码(JavaScript和node.js基础即可,微信推荐使用的语言,无 ...

  4. 梨视频:基于阿里云E-MapReduce搭建视频推荐系统实践

    专注新闻资讯的梨视频近来表现亮眼. 梨视频由前澎湃新闻掌门人邱兵创立. 在上线之前,它就获得了黎瑞刚华人文化近1亿美元投资,旗下<微辣>栏目总播放量已经超过4亿,并在上线1个月后获得&qu ...

  5. 梨视频:基于阿里云E-MapReduce搭建视频推荐系统的实践

    专注新闻资讯的梨视频近来表现亮眼. 梨视频由前澎湃新闻掌门人邱兵创立. 在上线之前,它就获得了黎瑞刚华人文化近1亿美元投资,旗下<微辣>栏目总播放量已经超过4亿,并在上线1个月后获得&qu ...

  6. 阿里云+wordpress搭建个人博客网站【小白专用的图文教程】

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. 【云中沙箱】如何快速使用阿里云快速搭建论坛网站?

    如何快速使用阿里云快速搭建论坛网站? 云中沙箱实验"使用阿里云快速搭建论坛网站",教您如何快速使用阿里云快速搭建论坛网站? 云中沙箱,阿里云官方实验平台.网址:http://lab ...

  8. 使用阿里云服务器搭建个人博客

    零. 前言 最近购买了一台阿里云服务器,申请了一个域名,准备自己搭建一个博客出来,大致记录一下流程,是一个学习的过程,也希望能帮助到别人. 有几点需要注意的地方,或者说是遇到问题后排查的点,提前说一下 ...

  9. MarkText + iPic + 阿里云Oss 搭建markdown文档写作

    MarkText + iPic + 阿里云Oss 搭建markdown文档写作 本文记录如何下载配置MarkText编辑器以及如何使用iPic+阿里云的对象存储搭建一个markdown的图床 下载安装 ...

最新文章

  1. 福利 | 爱德华·阿什福德·李:人类与AI技术将是共生关系
  2. 详细介绍springData
  3. 大数据虚拟化零起点-5基础运维第四步-部署vSphere Big Data Extensions 1.0 vApp
  4. Ants UVA - 1411(km板题竟然让我换了个板子)
  5. DOS命令编译JAVA程序
  6. idea左右切换页面 返回上一次鼠标位置
  7. Hamcrest Matchers教程
  8. 一个超强的逆向分析软件
  9. linux mysql更改生效_linux下面MySQL变量修改及生效
  10. Predicate函数式接口
  11. 数字后端基本概念介绍——Routing Blockage
  12. SetCapture()函数和ReleaseCapture()
  13. 最好用的终端模拟器ZOC for Mac 8.04
  14. Redis与Django中配置使用Redis
  15. Unity 使用tiledmap解析地图
  16. 区块链中的交易是什么意思
  17. 如何设置添加页眉 计算机知识,怎么设置页眉页脚-轻松解决计算机二级之页眉页脚不再是问题...
  18. OLTP和OLAP有何区别?
  19. Github精选:本周10大热门项目
  20. nas存储如何做远程服务器数据备份_NAS存储与数据备份方案

热门文章

  1. 微信小程序 — 二维码海报分享到好友功能
  2. Week15 实验 B - ZJM 的本领 CodeForces - 499A
  3. [渝粤教育] 西南科技大学 中国当代文学 在线考试复习资料
  4. FreeRTOS中的任务堆栈溢出检测机制
  5. 城市道路井盖安全监测系统 opencv
  6. ppgs_extractor_10ms_sch_lh_xx封装接口
  7. 开发会自测为什么测试还会单独存在?软件测试八大误区
  8. 在vue项目中引用萤石云播放器插件
  9. 创建制作SDK的静态库工程
  10. 绕CDN查找真实IP方法